Consider ComposedSchema in DefaultCodegen#fromRequestBody(..) (#358)

This commit is contained in:
Jérémie Bresson 2018-06-22 10:44:14 +02:00 committed by GitHub
parent 23ab5177b3
commit 8f4df45fb4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 70 additions and 1 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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