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 68750b1bdefc..478224a92976 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 @@ -1620,10 +1620,15 @@ protected Schema simplifyComposedSchemaWithEnums(Schema schema, List sub Schema subSchema = ModelUtils.getReferencedSchema(openAPI, (Schema) item); - // Check if this sub-schema has an enum (with one or more values) - if (subSchema.getEnum() == null || subSchema.getEnum().isEmpty()) { + // Check if this sub-schema has an enum or const value (OAS 3.1 uses const for single-value enums) + boolean definesEnum = ModelUtils.hasEnum(subSchema); + if (!definesEnum && subSchema.getConst() == null) { return schema; } + // If const is present but enum is not, treat const as a single enum value + List subSchemaEnumValues = definesEnum + ? subSchema.getEnum() + : Arrays.asList(subSchema.getConst()); // Ensure all sub-schemas have the same type (if type is specified) if(subSchema.getTypes() != null && subSchema.getTypes().size() > 1) { @@ -1639,7 +1644,7 @@ protected Schema simplifyComposedSchemaWithEnums(Schema schema, List sub } } // Add all enum values from this sub-schema to our collection - if(subSchema.getEnum().size() == 1) { + if(subSchemaEnumValues.size() == 1) { String description = subSchema.getTitle() == null ? "" : subSchema.getTitle(); if(subSchema.getDescription() != null) { if(!description.isEmpty()) { @@ -1647,9 +1652,9 @@ protected Schema simplifyComposedSchemaWithEnums(Schema schema, List sub } description += subSchema.getDescription(); } - enumValues.put(subSchema.getEnum().get(0), description); + enumValues.put(subSchemaEnumValues.get(0), description); } else { - for(Object e: subSchema.getEnum()) { + for(Object e: subSchemaEnumValues) { enumValues.put(e, ""); } } 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 87e96066c0bc..505fd82ccf77 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 @@ -1536,9 +1536,10 @@ public void testOpenAPINormalizerSimplifyOneOfAnyOf31Spec() { assertEquals(schema14.getType(), null); Schema schema16 = openAPI.getComponents().getSchemas().get("TypeIntegerWithOneOf"); - assertEquals(schema16.getOneOf().size(),3); - assertEquals(((Schema) schema16.getOneOf().get(0)).getConst(), 1); - assertEquals(((Schema) schema16.getOneOf().get(0)).getDeprecated(), true); + // After normalization, oneOf with const values should be simplified to enum + assertEquals(schema16.getOneOf(), null); + assertEquals(schema16.getEnum().size(), 3); + assertEquals(schema16.getEnum().get(0), 1); Schema schema18 = openAPI.getComponents().getSchemas().get("OneOfNullAndRef3"); // original oneOf removed and simplified to just $ref (oneOf sub-schema) instead