diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 7c37731bc63..2a5a3b7f43e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -4226,7 +4226,7 @@ public class DefaultCodegen implements CodegenConfig { codegenProperty = codegenProperty.items; } - } else if (ModelUtils.isObjectSchema(schema)) { + } else if (ModelUtils.isObjectSchema(schema) || ModelUtils.isComposedSchema(schema)) { CodegenModel codegenModel = null; if (StringUtils.isNotBlank(name)) { schema.setName(name); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index 3b36db9a7b7..35c63515137 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -19,6 +19,9 @@ package org.openapitools.codegen.java; import com.google.common.collect.ImmutableMap; +import io.swagger.parser.OpenAPIParser; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.ComposedSchema; import io.swagger.v3.oas.models.media.Content; @@ -28,6 +31,7 @@ import io.swagger.v3.oas.models.media.ObjectSchema; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.StringSchema; import io.swagger.v3.oas.models.parameters.RequestBody; +import io.swagger.v3.parser.core.models.ParseOptions; import io.swagger.v3.parser.util.SchemaTypeUtil; import org.openapitools.codegen.CodegenConstants; @@ -37,6 +41,7 @@ import org.openapitools.codegen.CodegenModelType; import org.openapitools.codegen.CodegenOperation; import org.openapitools.codegen.CodegenParameter; import org.openapitools.codegen.languages.JavaClientCodegen; +import org.openapitools.codegen.utils.ModelUtils; import org.testng.Assert; import org.testng.annotations.Test; @@ -305,6 +310,17 @@ public class JavaClientCodegenTest { Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.INVOKER_PACKAGE), "xyz.yyyyy.zzzzzzz.mmmmm"); } + @Test + public void testGetSchemaTypeWithComposedSchemaWithAllOf() { + final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/2_0/composed-allof.yaml", null, new ParseOptions()).getOpenAPI(); + final JavaClientCodegen codegen = new JavaClientCodegen(); + + Operation operation = openAPI.getPaths().get("/ping").getPost(); + CodegenOperation co = codegen.fromOperation("/ping", "POST", operation, ModelUtils.getSchemas(openAPI), openAPI); + Assert.assertEquals(co.allParams.size(), 1); + Assert.assertEquals(co.allParams.get(0).baseType, "MessageEventCoreWithTimeListEntries"); + } + private CodegenParameter createPathParam(String name) { CodegenParameter codegenParameter = createStringParam(name); codegenParameter.isPathParam = true; diff --git a/modules/openapi-generator/src/test/resources/2_0/composed-allof.yaml b/modules/openapi-generator/src/test/resources/2_0/composed-allof.yaml new file mode 100644 index 00000000000..579c2f796b4 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/2_0/composed-allof.yaml @@ -0,0 +1,53 @@ +swagger: "2.0" +info: + version: "2" + title: "Test API" +basePath: "/xx2" +consumes: +- "application/json" +produces: +- "application/json" +paths: + /ping: + post: + tags: + - Messaging + summary: Add a message event to the given message calendar + operationId: addMessageEventToMessageCalendar + parameters: + - in: body + name: new-message-event + required: true + schema: + $ref: "#/definitions/MessageEventCoreWithTimeListEntries" + responses: + 200: + description: OK +definitions: + MessageEventCoreWithTimeListEntries: + type: object + description: "Base of a message event with Time List entries" + allOf: + - $ref: "#/definitions/MessageEventCore" + - type: object + required: + - timeListEntries + properties: + timeListEntries: + type: array + items: + $ref: "#/definitions/TimeListEntry" + MessageEventCore: + type: object + properties: + id: + type: integer + message: + type: string + TimeListEntry: + type: object + properties: + p1: + type: string + p2: + type: string \ No newline at end of file