From 0202bac5390b280071961c2fd809c2199656fa75 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 7 Feb 2024 18:11:43 +0800 Subject: [PATCH] fix parent name look up using schema name (#17807) --- .../org/openapitools/codegen/CodegenModel.java | 18 ++++++++++++++++-- .../openapitools/codegen/DefaultCodegen.java | 15 +++++++++------ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java index a09d7a84599b..0dc86490e49c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java @@ -51,8 +51,11 @@ public class CodegenModel implements IJsonSchemaValidationProperties { public Set oneOf = new TreeSet<>(); public Set allOf = new TreeSet<>(); - // The schema name as written in the OpenAPI document. + // The schema name as written in the OpenAPI document + // If it's a reserved word, it will be escaped. public String name; + // The original schema name as written in the OpenAPI document. + public String schemaName; // The language-specific name of the class that implements this schema. // The name of the class is derived from the OpenAPI schema name with formatting rules applied. // The classname is derived from the OpenAPI schema name, with sanitization and escaping rules applied. @@ -492,6 +495,15 @@ public class CodegenModel implements IJsonSchemaValidationProperties { this.name = name; } + public String getSchemaName() { + return schemaName; + } + + public void setSchemaName(String schemaName) { + this.schemaName = schemaName; + } + + public List getOptionalVars() { return optionalVars; } @@ -1144,6 +1156,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties { Objects.equals(oneOf, that.oneOf) && Objects.equals(allOf, that.allOf) && Objects.equals(name, that.name) && + Objects.equals(schemaName, that.schemaName) && Objects.equals(classname, that.classname) && Objects.equals(title, that.title) && Objects.equals(description, that.description) && @@ -1192,7 +1205,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties { @Override public int hashCode() { return Objects.hash(getParent(), getParentSchema(), getInterfaces(), getAllParents(), getParentModel(), - getInterfaceModels(), getChildren(), anyOf, oneOf, allOf, getName(), getClassname(), getTitle(), + getInterfaceModels(), getChildren(), anyOf, oneOf, allOf, getName(), getSchemaName(), getClassname(), getTitle(), getDescription(), getClassVarName(), getModelJson(), getDataType(), getXmlPrefix(), getXmlNamespace(), getXmlName(), getClassFilename(), getUnescapedDescription(), getDiscriminator(), getDefaultValue(), getArrayModelType(), isAlias, isString, isInteger, isLong, isNumber, isNumeric, isFloat, isDouble, @@ -1214,6 +1227,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties { public String toString() { final StringBuilder sb = new StringBuilder("CodegenModel{"); sb.append("name='").append(name).append('\''); + sb.append(", schemaName='").append(schemaName).append('\''); sb.append(", parent='").append(parent).append('\''); sb.append(", parentSchema='").append(parentSchema).append('\''); sb.append(", interfaces=").append(interfaces); 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 2cf0cba46e39..6de52cc99a35 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 @@ -667,14 +667,16 @@ public class DefaultCodegen implements CodegenConfig { } parent.getChildren().add(cm); parent.hasChildren = true; - Schema parentSchema = this.openAPI.getComponents().getSchemas().get(parent.name); + Schema parentSchema = this.openAPI.getComponents().getSchemas().get(parent.schemaName); if (parentSchema == null) { - throw new NullPointerException(parent.name + " in " + this.openAPI.getComponents().getSchemas()); - } - if (parentSchema.getDiscriminator() == null) { - parent = allModels.get(parent.getParent()); - } else { + LOGGER.warn("Failed to look up parent schema: {}", parent.schemaName); parent = null; + } else { + if (parentSchema.getDiscriminator() == null) { + parent = allModels.get(parent.getParent()); + } else { + parent = null; + } } } } @@ -3122,6 +3124,7 @@ public class DefaultCodegen implements CodegenConfig { } else { m.name = name; } + m.schemaName = name; // original schema name m.title = escapeText(schema.getTitle()); m.description = escapeText(schema.getDescription()); m.unescapedDescription = schema.getDescription();