From 93301eaacf6dc56e39240012427d88375e4c72cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Bresson?= Date: Tue, 17 Apr 2018 10:50:10 +0200 Subject: [PATCH] Fix NullPointer with empty Composed Schema (#107) --- .../openapitools/codegen/DefaultCodegen.java | 28 ++++++++++--------- .../codegen/java/JavaClientCodegenTest.java | 9 ++++++ 2 files changed, 24 insertions(+), 13 deletions(-) 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 70545c29784..03bd6106b28 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 @@ -1360,19 +1360,21 @@ public class DefaultCodegen implements CodegenConfig { allProperties = new LinkedHashMap(); allRequired = new ArrayList(); m.allVars = new ArrayList(); - int modelImplCnt = 0; // only one inline object allowed in a ComposedModel - for (Schema innerModel : composed.getAllOf()) { - if (m.discriminator == null) { - m.discriminator = schema.getDiscriminator(); - } - if (innerModel.getXml() != null) { - m.xmlPrefix = innerModel.getXml().getPrefix(); - m.xmlNamespace = innerModel.getXml().getNamespace(); - m.xmlName = innerModel.getXml().getName(); - } - if (modelImplCnt++ > 1) { - LOGGER.warn("More than one inline schema specified in allOf:. Only the first one is recognized. All others are ignored."); - break; // only one ModelImpl with discriminator allowed in allOf + if(composed.getAllOf() != null) { + int modelImplCnt = 0; // only one inline object allowed in a ComposedModel + for (Schema innerModel : composed.getAllOf()) { + if (m.discriminator == null) { + m.discriminator = schema.getDiscriminator(); + } + if (innerModel.getXml() != null) { + m.xmlPrefix = innerModel.getXml().getPrefix(); + m.xmlNamespace = innerModel.getXml().getNamespace(); + m.xmlName = innerModel.getXml().getName(); + } + if (modelImplCnt++ > 1) { + LOGGER.warn("More than one inline schema specified in allOf:. Only the first one is recognized. All others are ignored."); + break; // only one ModelImpl with discriminator allowed in allOf + } } } } else { 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 1628d9d9063..0d75125c579 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 @@ -14,6 +14,7 @@ import org.testng.annotations.Test; import com.google.common.collect.ImmutableMap; import io.swagger.v3.oas.models.media.ArraySchema; +import io.swagger.v3.oas.models.media.ComposedSchema; import io.swagger.v3.oas.models.media.Content; import io.swagger.v3.oas.models.media.IntegerSchema; import io.swagger.v3.oas.models.media.MediaType; @@ -162,6 +163,14 @@ public class JavaClientCodegenTest { CodegenParameter codegenParameter3 = codegen.fromRequestBody(body3 , Collections.singletonMap("Point", point), new HashSet()); } + @Test + public void nullValuesInComposedSchema() throws Exception { + final JavaClientCodegen codegen = new JavaClientCodegen(); + CodegenModel result = codegen.fromModel("CompSche", + new ComposedSchema()); + Assert.assertEquals(result.name, "CompSche"); + } + @Test public void testParametersAreCorrectlyOrderedWhenUsingRetrofit(){ JavaClientCodegen javaClientCodegen = new JavaClientCodegen();