Skip to content

Commit cb2776c

Browse files
committed
refs #4247 - fix composed schema resolving on props
1 parent 5c5bcf8 commit cb2776c

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,9 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context
327327
return new Schema();
328328
}
329329

330+
List<Class<?>> composedSchemaReferencedClasses = getComposedSchemaReferencedClasses(type.getRawClass(), annotatedType.getCtxAnnotations(), resolvedSchemaAnnotation);
331+
boolean isComposedSchema = composedSchemaReferencedClasses != null;
332+
330333
if (isPrimitive) {
331334
XML xml = resolveXml(beanDesc.getClassInfo(), annotatedType.getCtxAnnotations(), resolvedSchemaAnnotation);
332335
if (xml != null) {
@@ -346,7 +349,9 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context
346349
// Return the model as a ref only property
347350
model = new Schema().$ref(Components.COMPONENTS_SCHEMAS_REF + name);
348351
}
349-
return model;
352+
if (!isComposedSchema) {
353+
return model;
354+
}
350355
}
351356

352357
/**
@@ -384,9 +389,6 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context
384389
return context.resolve(aType);
385390
}
386391

387-
List<Class<?>> composedSchemaReferencedClasses = getComposedSchemaReferencedClasses(type.getRawClass(), annotatedType.getCtxAnnotations(), resolvedSchemaAnnotation);
388-
boolean isComposedSchema = composedSchemaReferencedClasses != null;
389-
390392
if (type.isContainerType()) {
391393
// TODO currently a MapSchema or ArraySchema don't also support composed schema props (oneOf,..)
392394
isComposedSchema = false;

modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/ComposedSchemaTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
import io.swagger.v3.core.resolving.resources.TestObjectTicket2620;
66
import io.swagger.v3.core.resolving.resources.TestObjectTicket2620Subtypes;
77
import io.swagger.v3.core.resolving.resources.TestObjectTicket2900;
8+
import io.swagger.v3.core.resolving.resources.TestObjectTicket4247;
89
import io.swagger.v3.core.util.Json;
10+
import io.swagger.v3.core.util.Yaml;
911
import io.swagger.v3.oas.models.media.ArraySchema;
1012
import io.swagger.v3.oas.models.media.ComposedSchema;
1113
import io.swagger.v3.oas.models.media.Schema;
@@ -125,4 +127,16 @@ public void readComposedSchema_ticket2616() {
125127
model = schemas.get("objects");
126128
Assert.assertNull(model);
127129
}
130+
131+
@Test(description = "read composed schem refs #4247")
132+
public void readComposedSchema_ticket4247() {
133+
Map<String, Schema> schemas = ModelConverters.getInstance().readAll(TestObjectTicket4247.class);
134+
Schema model = schemas.get("TestObjectTicket4247");
135+
Assert.assertNotNull(model);
136+
Map<String, Schema> properties = model.getProperties();
137+
Assert.assertNotNull(properties.get("value"));
138+
Assert.assertTrue(((ComposedSchema)properties.get("value")).getOneOf().size() == 2);
139+
Assert.assertEquals(((ComposedSchema)properties.get("value")).getOneOf().get(0).getType(), "string");
140+
Assert.assertEquals(((ComposedSchema)properties.get("value")).getOneOf().get(1).getType(), "number");
141+
}
128142
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.swagger.v3.core.resolving.resources;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
5+
public class TestObjectTicket4247 {
6+
7+
@Schema(
8+
oneOf = { String.class, Number.class }
9+
)
10+
public Object value;
11+
12+
}

0 commit comments

Comments
 (0)