Skip to content

Commit c1950f5

Browse files
committed
fix: refs #4290 - fixes anyof for non objects
1 parent 85829d5 commit c1950f5

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -805,6 +805,9 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context
805805
allOfFiltered.forEach(c -> {
806806
Schema allOfRef = context.resolve(new AnnotatedType().type(c).jsonViewAnnotation(annotatedType.getJsonViewAnnotation()));
807807
Schema refSchema = new Schema().$ref(allOfRef.getName());
808+
if (StringUtils.isBlank(allOfRef.getName())) {
809+
refSchema = allOfRef;
810+
}
808811
// allOf could have already being added during subtype resolving
809812
if (composedSchema.getAllOf() == null || !composedSchema.getAllOf().contains(refSchema)) {
810813
composedSchema.addAllOfItem(refSchema);
@@ -822,7 +825,11 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context
822825
.collect(Collectors.toList());
823826
anyOfFiltered.forEach(c -> {
824827
Schema anyOfRef = context.resolve(new AnnotatedType().type(c).jsonViewAnnotation(annotatedType.getJsonViewAnnotation()));
825-
composedSchema.addAnyOfItem(new Schema().$ref(anyOfRef.getName()));
828+
if (StringUtils.isNotBlank(anyOfRef.getName())) {
829+
composedSchema.addAnyOfItem(new Schema().$ref(anyOfRef.getName()));
830+
} else {
831+
composedSchema.addAnyOfItem(anyOfRef);
832+
}
826833
// remove shared properties defined in the parent
827834
if (isSubtype(beanDesc.getClassInfo(), c)) {
828835
removeParentProperties(composedSchema, anyOfRef);
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.swagger.v3.core.resolving;
2+
3+
import io.swagger.v3.core.converter.AnnotatedType;
4+
import io.swagger.v3.core.converter.ModelConverterContextImpl;
5+
import io.swagger.v3.core.jackson.ModelResolver;
6+
import io.swagger.v3.core.matchers.SerializationMatchers;
7+
import io.swagger.v3.core.resolving.resources.Issue4290;
8+
import io.swagger.v3.oas.models.media.Schema;
9+
import org.testng.annotations.Test;
10+
11+
public class Ticket4290Test extends SwaggerTestBase {
12+
@Test
13+
public void testAnyOf() throws Exception {
14+
final ModelResolver modelResolver = new ModelResolver(mapper());
15+
16+
final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver);
17+
18+
final Schema model = context
19+
.resolve(new AnnotatedType(Issue4290.class));
20+
21+
SerializationMatchers.assertEqualsToYaml(context.getDefinedModels(), "Issue4290:\n" +
22+
" type: object\n" +
23+
" properties:\n" +
24+
" value:\n" +
25+
" type: object\n" +
26+
" description: \"A string, a number or a boolean\"\n" +
27+
" anyOf:\n" +
28+
" - type: string\n" +
29+
" - type: number\n" +
30+
" - type: boolean");
31+
}
32+
33+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.swagger.v3.core.resolving.resources;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
5+
public class Issue4290 {
6+
@Schema(description = "A string, a number or a boolean", anyOf = { String.class, Number.class, Boolean.class })
7+
public Object value;
8+
9+
}

0 commit comments

Comments
 (0)