diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java index 4f129b2f4c68..ece6f10b7540 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java @@ -943,7 +943,13 @@ private Schema processSimplifyOneOf(Schema schema) { if (oneOfSchemas.size() == 6) { TreeSet ts = new TreeSet<>(); for (Schema s: oneOfSchemas) { - ts.add(ModelUtils.getType(s)); + s = ModelUtils.getReferencedSchema(openAPI, s); + String type = ModelUtils.getType(s); + if (type == null) { + LOGGER.debug("Error null type found in schema when simplifying any type with 6 sub-schemas: {}", s); + } else { + ts.add(type); + } } if (ts.equals(anyTypeTreeSet)) { @@ -1068,7 +1074,13 @@ private Schema processSimplifyAnyOf(Schema schema) { if (anyOfSchemas.size() == 6) { TreeSet ts = new TreeSet<>(); for (Schema s: anyOfSchemas) { - ts.add(ModelUtils.getType(s)); + s = ModelUtils.getReferencedSchema(openAPI, s); + String type = ModelUtils.getType(s); + if (type == null) { + LOGGER.debug("Error null type found in schema when simplifying any type with 6 sub-schemas: {}", s); + } else { + ts.add(type); + } } if (ts.equals(anyTypeTreeSet)) { diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/OpenAPINormalizerTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/OpenAPINormalizerTest.java index 5dc0b8f3cf51..d7b85e4be6f0 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/OpenAPINormalizerTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/OpenAPINormalizerTest.java @@ -178,6 +178,9 @@ public void testOpenAPINormalizerSimplifyOneOfAnyOf() { Schema schema13 = openAPI.getComponents().getSchemas().get("OneOfAnyType"); assertEquals(schema13.getOneOf().size(), 6); + Schema schema15 = openAPI.getComponents().getSchemas().get("AnyOfAnyTypeWithRef"); + assertEquals(schema15.getAnyOf().size(), 6); + Map options = new HashMap<>(); options.put("SIMPLIFY_ONEOF_ANYOF", "true"); OpenAPINormalizer openAPINormalizer = new OpenAPINormalizer(openAPI, options); @@ -216,6 +219,9 @@ public void testOpenAPINormalizerSimplifyOneOfAnyOf() { assertEquals(schema14.getOneOf(), null); assertEquals(schema14.getType(), null); + Schema schema16 = openAPI.getComponents().getSchemas().get("AnyOfAnyTypeWithRef"); + assertEquals(schema16.getAnyOf(), null); + assertEquals(schema16.getType(), null); } @Test diff --git a/modules/openapi-generator/src/test/resources/3_0/simplifyOneOfAnyOf_test.yaml b/modules/openapi-generator/src/test/resources/3_0/simplifyOneOfAnyOf_test.yaml index 8f829a884d14..f057ce6aea99 100644 --- a/modules/openapi-generator/src/test/resources/3_0/simplifyOneOfAnyOf_test.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/simplifyOneOfAnyOf_test.yaml @@ -103,6 +103,17 @@ components: - type: string - type: number - type: integer + AnyOfAnyTypeWithRef: + anyOf: + - type: boolean + - type: array + items: { } + - type: object + - type: string + - type: number + - $ref: '#/components/schemas/IntegerRef' + IntegerRef: + type: integer OneOfAnyType: oneOf: - type: object