diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java index cfd0f1c1bc34..4352df6a0985 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java @@ -297,10 +297,12 @@ public void processOpts() { LOGGER.info("Set base package to invoker package ({})", basePackage); } - super.processOpts(); useOneOfInterfaces = true; legacyDiscriminatorBehavior = false; + // Please refrain from updating values of Config Options after super.ProcessOpts() is called + super.processOpts(); + if (DocumentationProvider.SPRINGFOX.equals(getDocumentationProvider())) { LOGGER.warn("The springfox documentation provider is deprecated for removal. Use the springdoc provider instead."); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index 0753e4bef6ad..ac058ecd2ba8 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -1473,4 +1473,30 @@ public void shouldHandleContentTypeWithSecondWildcardSubtype_issue12457() throws "consumes", "{ \"application/octet-stream\", \"application/*\" }" )); } + + @Test + public void shouldGenerateDiscriminatorFromAllOfWhenUsingLegacyDiscriminatorBehaviour_issue12692() throws IOException { + File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); + output.deleteOnExit(); + + OpenAPI openAPI = new OpenAPIParser() + .readLocation("src/test/resources/bugs/issue_12692.yml", null, new ParseOptions()).getOpenAPI(); + SpringCodegen codegen = new SpringCodegen(); + codegen.setLibrary(SPRING_BOOT); + codegen.setOutputDir(output.getAbsolutePath()); + codegen.additionalProperties().put(CodegenConstants.LEGACY_DISCRIMINATOR_BEHAVIOR, "true"); + + ClientOptInput input = new ClientOptInput() + .openAPI(openAPI) + .config(codegen); + + DefaultGenerator generator = new DefaultGenerator(); + generator.opts(input).generate(); + + String jsonTypeInfo = "@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = \"type\", visible = true)"; + String jsonSubType = "@JsonSubTypes({\n" + + " @JsonSubTypes.Type(value = Cat.class, name = \"cat\")" + + "})"; + assertFileContains(Paths.get(output.getAbsolutePath() + "/src/main/java/org/openapitools/model/Pet.java"), jsonTypeInfo, jsonSubType); + } } diff --git a/modules/openapi-generator/src/test/resources/bugs/issue_12692.yml b/modules/openapi-generator/src/test/resources/bugs/issue_12692.yml new file mode 100644 index 000000000000..607900199d8a --- /dev/null +++ b/modules/openapi-generator/src/test/resources/bugs/issue_12692.yml @@ -0,0 +1,45 @@ +openapi: 3.0.1 +info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT +paths: + "/pets": + get: + operationId: listPets + responses: + '200': + description: description + content: + application/json: + schema: + type: array + items: + "$ref": "#/components/schemas/Pet" +components: + schemas: + Pet: + type: object + required: + - type + properties: + type: + type: string + discriminator: + propertyName: type + mapping: + cat: "#/components/schemas/Cat" + Cat: + allOf: + - "$ref": "#/components/schemas/Pet" + - type: object + required: + - type + properties: + type: + type: string + discriminator: + propertyName: type + mapping: + cat: "#/components/schemas/Cat"