From 05a2f4b2407d94bde6e041ce70aa2fb1526ca38c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Bresson?= Date: Sun, 13 May 2018 09:23:48 +0200 Subject: [PATCH] Fix NullPointerException in getSchemaType(Schema) (#14) Fix #11 --- .../openapitools/codegen/DefaultCodegen.java | 12 ++-- .../codegen/DefaultCodegenTest.java | 12 ++++ .../test/resources/3_0/composed-oneof.yaml | 61 +++++++++++++++++++ 3 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 modules/openapi-generator/src/test/resources/3_0/composed-oneof.yaml 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 9c7240be87c..806df83f4c8 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 @@ -1166,11 +1166,13 @@ public class DefaultCodegen implements CodegenConfig { // TODO better logic to handle compose schema if (schema instanceof ComposedSchema) { // composed schema ComposedSchema cs = (ComposedSchema) schema; - for (Schema s : cs.getAllOf()) { - if (s != null) { - // using the first schema defined in allOf - schema = s; - break; + if(cs.getAllOf() != null) { + for (Schema s : cs.getAllOf()) { + if (s != null) { + // using the first schema defined in allOf + schema = s; + break; + } } } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index d0bc83bd0d3..104f7ce5d5a 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -202,4 +202,16 @@ public class DefaultCodegenTest { Assert.assertEquals(co.produces.size(), 1); Assert.assertEquals(co.produces.get(0).get("mediaType"), "application/json"); } + + @Test + public void testGetSchemaTypeWithComposedSchemaWithOneOf() { + final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/composed-oneof.yaml", null, new ParseOptions()).getOpenAPI(); + final DefaultCodegen codegen = new DefaultCodegen(); + + Operation operation = openAPI.getPaths().get("/state").getPost(); + Schema schema = ModelUtils.getSchemaFromRequestBody(operation.getRequestBody()); + String type = codegen.getSchemaType(schema); + + Assert.assertNotNull(type); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/composed-oneof.yaml b/modules/openapi-generator/src/test/resources/3_0/composed-oneof.yaml new file mode 100644 index 00000000000..61bfc1da50a --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/composed-oneof.yaml @@ -0,0 +1,61 @@ +openapi: 3.0.1 +info: + title: oneOf test + version: '1.0' +servers: + - url: 'http://localhost:8000/' +paths: + /state: + get: + operationId: getState + responses: + '200': + description: OK + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ObjA' + - $ref: '#/components/schemas/ObjB' + discriminator: + propertyName: realtype + mapping: + a-type: '#/components/schemas/ObjA' + b-type: '#/components/schemas/ObjB' + post: + operationId: createState + requestBody: + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ObjA' + - $ref: '#/components/schemas/ObjB' + discriminator: + propertyName: realtype + mapping: + a-type: '#/components/schemas/ObjA' + b-type: '#/components/schemas/ObjB' + required: true + responses: + '201': + description: OK +components: + schemas: + ObjA: + type: object + properties: + realtype: + type: string + message: + type: string + ObjB: + type: object + properties: + realtype: + type: string + description: + type: string + code: + type: integer + format: int32 \ No newline at end of file