From 14d045f7d60f90c2b12e2dab4817bf8146320a6b Mon Sep 17 00:00:00 2001 From: Mateusz Stefaniak Date: Fri, 1 Aug 2025 03:41:27 +0200 Subject: [PATCH] Fix for #4904 - Invalid cast of JsonSchema to ComposedSchema --- .../v3/core/jackson/ModelResolver.java | 2 +- .../v3/core/resolving/Ticket4904Test.java | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/Ticket4904Test.java diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java index 98bcb4ddeb..2b08b0b122 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java @@ -1043,7 +1043,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context if (isComposedSchema) { - ComposedSchema composedSchema = (ComposedSchema) model; + Schema composedSchema = model; // Could be ComposedSchema or JsonSchema (3.1) Class[] allOf = resolvedSchemaAnnotation.allOf(); Class[] anyOf = resolvedSchemaAnnotation.anyOf(); diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/Ticket4904Test.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/Ticket4904Test.java new file mode 100644 index 0000000000..b601cb074f --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/Ticket4904Test.java @@ -0,0 +1,40 @@ +package io.swagger.v3.core.resolving; + +import io.swagger.v3.core.converter.AnnotatedType; +import io.swagger.v3.core.converter.ModelConverterContextImpl; +import io.swagger.v3.core.jackson.ModelResolver; +import io.swagger.v3.oas.annotations.media.DiscriminatorMapping; +import io.swagger.v3.oas.annotations.media.Schema; +import org.testng.annotations.Test; + +import static io.swagger.v3.core.resolving.SwaggerTestBase.mapper; + +public class Ticket4904Test { + + @Test + public void testComposedSchemaWithDiscriminator() { + final ModelResolver modelResolver = new ModelResolver(mapper()); + modelResolver.setOpenapi31(true); + final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver); + context.resolve(new AnnotatedType(ParentClass.class)); + } + + @Schema( + type = "object", + discriminatorMapping = { + @DiscriminatorMapping(value = "A", schema = ChildClassA.class), + @DiscriminatorMapping(value = "B", schema = ChildClassB.class) + }, + oneOf = {ChildClassA.class, ChildClassB.class}, + discriminatorProperty = "objectType" + ) + public abstract static class ParentClass { + } + + public static class ChildClassA extends ParentClass { + } + + public static class ChildClassB extends ParentClass { + } + +}