From 68a920dce5491f65e995750e8aa386637f611ab1 Mon Sep 17 00:00:00 2001 From: frantuma Date: Wed, 10 Jul 2019 13:06:01 +0200 Subject: [PATCH] refs swagger-api/swagger-codegen#9548 - fix NPE for composed models --- .../codegen/v3/generators/SchemaHandler.java | 63 ++++++++++--------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/src/main/java/io/swagger/codegen/v3/generators/SchemaHandler.java b/src/main/java/io/swagger/codegen/v3/generators/SchemaHandler.java index 41a37ea6ad..2c73d6b5e8 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/SchemaHandler.java +++ b/src/main/java/io/swagger/codegen/v3/generators/SchemaHandler.java @@ -4,6 +4,7 @@ import io.swagger.codegen.v3.generators.util.OpenAPIUtil; import io.swagger.v3.oas.models.media.ComposedSchema; import io.swagger.v3.oas.models.media.Schema; +import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.List; @@ -49,38 +50,46 @@ public void configureOneOfModel(CodegenModel codegenModel, List oneOf) { final List modelNames = new ArrayList<>(); for (Schema interfaceSchema : oneOf) { - String schemaName = OpenAPIUtil.getSimpleRef(interfaceSchema.get$ref()); - modelNames.add(codegenConfig.toModelName(schemaName)); + if (StringUtils.isNotBlank(interfaceSchema.get$ref())) { + String schemaName = OpenAPIUtil.getSimpleRef(interfaceSchema.get$ref()); + modelNames.add(codegenConfig.toModelName(schemaName)); + } } oneOfModel.vendorExtensions.put("x-model-names", modelNames); - codegenModel.vendorExtensions.put("oneOf-model", oneOfModel); - if (codegenModel.interfaceModels == null) { - codegenModel.interfaceModels = new ArrayList<>(); + if (!modelNames.isEmpty()) { + codegenModel.vendorExtensions.put("oneOf-model", oneOfModel); + if (codegenModel.interfaceModels == null) { + codegenModel.interfaceModels = new ArrayList<>(); + } + codegenModel.interfaceModels.add(oneOfModel); } - codegenModel.interfaceModels.add(oneOfModel); } - public void configureAnyOfModel(CodegenModel codegenModel, List oneOf) { - String oneOfModelName = "AnyOf" + codegenModel.name; - final CodegenModel oneOfModel = CodegenModelFactory.newInstance(CodegenModelType.MODEL); - oneOfModel.name = oneOfModelName; - oneOfModel.classname = codegenConfig.toModelName(oneOfModelName); - oneOfModel.classVarName = codegenConfig.toVarName(oneOfModelName); - oneOfModel.classFilename = codegenConfig.toModelFilename(oneOfModelName); - oneOfModel.vendorExtensions.put("x-is-composed-model", Boolean.TRUE); + public void configureAnyOfModel(CodegenModel codegenModel, List anyOf) { + String anyOfModelName = "AnyOf" + codegenModel.name; + final CodegenModel anyOfModel = CodegenModelFactory.newInstance(CodegenModelType.MODEL); + anyOfModel.name = anyOfModelName; + anyOfModel.classname = codegenConfig.toModelName(anyOfModelName); + anyOfModel.classVarName = codegenConfig.toVarName(anyOfModelName); + anyOfModel.classFilename = codegenConfig.toModelFilename(anyOfModelName); + anyOfModel.vendorExtensions.put("x-is-composed-model", Boolean.TRUE); final List modelNames = new ArrayList<>(); - for (Schema interfaceSchema : oneOf) { - String schemaName = OpenAPIUtil.getSimpleRef(interfaceSchema.get$ref()); - modelNames.add(codegenConfig.toModelName(schemaName)); + for (Schema interfaceSchema : anyOf) { + if (StringUtils.isNotBlank(interfaceSchema.get$ref())) { + String schemaName = OpenAPIUtil.getSimpleRef(interfaceSchema.get$ref()); + modelNames.add(codegenConfig.toModelName(schemaName)); + } } - oneOfModel.vendorExtensions.put("x-model-names", modelNames); - codegenModel.vendorExtensions.put("anyOf-model", oneOfModel); - if (codegenModel.interfaceModels == null) { - codegenModel.interfaceModels = new ArrayList<>(); + anyOfModel.vendorExtensions.put("x-model-names", modelNames); + if (!modelNames.isEmpty()) { + codegenModel.vendorExtensions.put("anyOf-model", anyOfModel); + if (codegenModel.interfaceModels == null) { + codegenModel.interfaceModels = new ArrayList<>(); + } + codegenModel.interfaceModels.add(anyOfModel); } - codegenModel.interfaceModels.add(oneOfModel); } public void configureOneOfModelFromProperty(CodegenProperty codegenProperty, CodegenModel codegenModel) { @@ -119,17 +128,15 @@ public void configureAnyOfModelFromProperty(CodegenProperty codegenProperty, Cod codegenModel.vendorExtensions.put("anyOf-model", anyOfModel); } - public void configureAnyOfModelFromProperty() { - - } - private CodegenModel createFromOneOfSchemas(List schemas) { final CodegenModel codegenModel = CodegenModelFactory.newInstance(CodegenModelType.MODEL); final List modelNames = new ArrayList<>(); for (Schema interfaceSchema : schemas) { - String schemaName = OpenAPIUtil.getSimpleRef(interfaceSchema.get$ref()); - modelNames.add(codegenConfig.toModelName(schemaName)); + if (StringUtils.isNotBlank(interfaceSchema.get$ref())) { + String schemaName = OpenAPIUtil.getSimpleRef(interfaceSchema.get$ref()); + modelNames.add(codegenConfig.toModelName(schemaName)); + } } codegenModel.vendorExtensions.put("x-model-names", modelNames); return codegenModel;