Skip to content

Commit 8f4df45

Browse files
authored
Consider ComposedSchema in DefaultCodegen#fromRequestBody(..) (#358)
1 parent 23ab517 commit 8f4df45

3 files changed

Lines changed: 70 additions & 1 deletion

File tree

modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4226,7 +4226,7 @@ public CodegenParameter fromRequestBody(RequestBody body, Map<String, Schema> sc
42264226
codegenProperty = codegenProperty.items;
42274227
}
42284228

4229-
} else if (ModelUtils.isObjectSchema(schema)) {
4229+
} else if (ModelUtils.isObjectSchema(schema) || ModelUtils.isComposedSchema(schema)) {
42304230
CodegenModel codegenModel = null;
42314231
if (StringUtils.isNotBlank(name)) {
42324232
schema.setName(name);

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919

2020
import com.google.common.collect.ImmutableMap;
2121

22+
import io.swagger.parser.OpenAPIParser;
23+
import io.swagger.v3.oas.models.OpenAPI;
24+
import io.swagger.v3.oas.models.Operation;
2225
import io.swagger.v3.oas.models.media.ArraySchema;
2326
import io.swagger.v3.oas.models.media.ComposedSchema;
2427
import io.swagger.v3.oas.models.media.Content;
@@ -28,6 +31,7 @@
2831
import io.swagger.v3.oas.models.media.Schema;
2932
import io.swagger.v3.oas.models.media.StringSchema;
3033
import io.swagger.v3.oas.models.parameters.RequestBody;
34+
import io.swagger.v3.parser.core.models.ParseOptions;
3135
import io.swagger.v3.parser.util.SchemaTypeUtil;
3236

3337
import org.openapitools.codegen.CodegenConstants;
@@ -37,6 +41,7 @@
3741
import org.openapitools.codegen.CodegenOperation;
3842
import org.openapitools.codegen.CodegenParameter;
3943
import org.openapitools.codegen.languages.JavaClientCodegen;
44+
import org.openapitools.codegen.utils.ModelUtils;
4045
import org.testng.Assert;
4146
import org.testng.annotations.Test;
4247

@@ -305,6 +310,17 @@ public void testPackageNamesSetInvokerDerivedFromModel() throws Exception {
305310
Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.INVOKER_PACKAGE), "xyz.yyyyy.zzzzzzz.mmmmm");
306311
}
307312

313+
@Test
314+
public void testGetSchemaTypeWithComposedSchemaWithAllOf() {
315+
final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/2_0/composed-allof.yaml", null, new ParseOptions()).getOpenAPI();
316+
final JavaClientCodegen codegen = new JavaClientCodegen();
317+
318+
Operation operation = openAPI.getPaths().get("/ping").getPost();
319+
CodegenOperation co = codegen.fromOperation("/ping", "POST", operation, ModelUtils.getSchemas(openAPI), openAPI);
320+
Assert.assertEquals(co.allParams.size(), 1);
321+
Assert.assertEquals(co.allParams.get(0).baseType, "MessageEventCoreWithTimeListEntries");
322+
}
323+
308324
private CodegenParameter createPathParam(String name) {
309325
CodegenParameter codegenParameter = createStringParam(name);
310326
codegenParameter.isPathParam = true;
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
swagger: "2.0"
2+
info:
3+
version: "2"
4+
title: "Test API"
5+
basePath: "/xx2"
6+
consumes:
7+
- "application/json"
8+
produces:
9+
- "application/json"
10+
paths:
11+
/ping:
12+
post:
13+
tags:
14+
- Messaging
15+
summary: Add a message event to the given message calendar
16+
operationId: addMessageEventToMessageCalendar
17+
parameters:
18+
- in: body
19+
name: new-message-event
20+
required: true
21+
schema:
22+
$ref: "#/definitions/MessageEventCoreWithTimeListEntries"
23+
responses:
24+
200:
25+
description: OK
26+
definitions:
27+
MessageEventCoreWithTimeListEntries:
28+
type: object
29+
description: "Base of a message event with Time List entries"
30+
allOf:
31+
- $ref: "#/definitions/MessageEventCore"
32+
- type: object
33+
required:
34+
- timeListEntries
35+
properties:
36+
timeListEntries:
37+
type: array
38+
items:
39+
$ref: "#/definitions/TimeListEntry"
40+
MessageEventCore:
41+
type: object
42+
properties:
43+
id:
44+
type: integer
45+
message:
46+
type: string
47+
TimeListEntry:
48+
type: object
49+
properties:
50+
p1:
51+
type: string
52+
p2:
53+
type: string

0 commit comments

Comments
 (0)