From a2859a3c2d5eefe2e628632ef357ef6e31d976a0 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Tue, 14 Sep 2021 20:00:35 -0500 Subject: [PATCH 1/4] refactored operation parameter handling --- .../v3/generators/DefaultCodegenConfig.java | 80 ++------- .../v3/generators/OpenAPIParameters.java | 160 ++++++++++++++++++ .../nodejs/NodeJSServerCodegen.java | 3 +- 3 files changed, 178 insertions(+), 65 deletions(-) create mode 100644 src/main/java/io/swagger/codegen/v3/generators/OpenAPIParameters.java diff --git a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java index 326fb5d306..95baa02051 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java +++ b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java @@ -2117,17 +2117,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation } List parameters = operation.getParameters(); - CodegenParameter bodyParam = null; - List allParams = new ArrayList<>(); - List bodyParams = new ArrayList<>(); - List pathParams = new ArrayList<>(); - List queryParams = new ArrayList<>(); - List headerParams = new ArrayList<>(); - List cookieParams = new ArrayList<>(); - List formParams = new ArrayList<>(); - List requiredParams = new ArrayList<>(); - - List codegenContents = new ArrayList<>(); + final OpenAPIParameters openAPIParameters = new OpenAPIParameters(); RequestBody body = operation.getRequestBody(); if (body != null) { @@ -2188,20 +2178,20 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation } // todo: this segment is only to support the "older" template design. it should be removed once all templates are updated with the new {{#contents}} tag. formParameter.getVendorExtensions().put(CodegenConstants.IS_FORM_PARAM_EXT_NAME, Boolean.TRUE); - formParams.add(formParameter.copy()); + openAPIParameters.addFormParam(formParameter.copy()); if (body.getRequired() != null && body.getRequired()) { - requiredParams.add(formParameter.copy()); + openAPIParameters.addRequiredParam(formParameter.copy()); } - allParams.add(formParameter); + openAPIParameters.addAllParams(formParameter); } - codegenContents.add(codegenContent); + openAPIParameters.addCodegenContents(codegenContent); } } else { - bodyParam = fromRequestBody(body, schemaName, schema, schemas, imports); + CodegenParameter bodyParam = fromRequestBody(body, schemaName, schema, schemas, imports); + openAPIParameters.setBodyParam(bodyParam); if (foundSchemas.isEmpty()) { - // todo: this segment is only to support the "older" template design. it should be removed once all templates are updated with the new {{#contents}} tag. - bodyParams.add(bodyParam.copy()); - allParams.add(bodyParam); + openAPIParameters.addBodyParams(bodyParam.copy()); + openAPIParameters.addAllParams(bodyParam); } else { boolean alreadyAdded = false; for (Schema usedSchema : foundSchemas) { @@ -2214,7 +2204,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation } } foundSchemas.add(schema); - codegenContents.add(codegenContent); + openAPIParameters.addCodegenContents(codegenContent); } } } @@ -2225,52 +2215,24 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation param = getParameterFromRef(param.get$ref(), openAPI); } CodegenParameter codegenParameter = fromParameter(param, imports); - allParams.add(codegenParameter); - // Issue #2561 (neilotoole) : Moved setting of isParam flags - // from here to fromParameter(). - if (param instanceof QueryParameter || "query".equalsIgnoreCase(param.getIn())) { - queryParams.add(codegenParameter.copy()); - } else if (param instanceof PathParameter || "path".equalsIgnoreCase(param.getIn())) { - pathParams.add(codegenParameter.copy()); - } else if (param instanceof HeaderParameter || "header".equalsIgnoreCase(param.getIn())) { - headerParams.add(codegenParameter.copy()); - } else if (param instanceof CookieParameter || "cookie".equalsIgnoreCase(param.getIn())) { - cookieParams.add(codegenParameter.copy()); - } - if (codegenParameter.required) { - requiredParams.add(codegenParameter.copy()); - } + openAPIParameters.addParameters(param, codegenParameter); } } addOperationImports(codegenOperation, imports); - codegenOperation.bodyParam = bodyParam; + codegenOperation.bodyParam = openAPIParameters.getBodyParam(); codegenOperation.httpMethod = httpMethod.toUpperCase(); // move "required" parameters in front of "optional" parameters if (sortParamsByRequiredFlag) { - Collections.sort(allParams, new Comparator() { - @Override - public int compare(CodegenParameter one, CodegenParameter another) { - if (one.required == another.required) return 0; - else if (one.required) return -1; - else return 1; - } - }); + openAPIParameters.sortRequiredAllParams(); } - codegenOperation.allParams = addHasMore(allParams); - codegenOperation.bodyParams = addHasMore(bodyParams); - codegenOperation.pathParams = addHasMore(pathParams); - codegenOperation.queryParams = addHasMore(queryParams); - codegenOperation.headerParams = addHasMore(headerParams); - codegenOperation.cookieParams = addHasMore(cookieParams); - codegenOperation.formParams = addHasMore(formParams); - codegenOperation.requiredParams = addHasMore(requiredParams); + openAPIParameters.addHasMore(codegenOperation); codegenOperation.externalDocs = operation.getExternalDocs(); - configuresParameterForMediaType(codegenOperation, codegenContents); + configuresParameterForMediaType(codegenOperation, openAPIParameters.getCodegenContents()); // legacy support codegenOperation.nickname = codegenOperation.operationId; @@ -3002,16 +2964,6 @@ private void addHeaders(ApiResponse response, List target, Map< } } - protected static List addHasMore(List objs) { - if (objs != null) { - for (int i = 0; i < objs.size(); i++) { - objs.get(i).secondaryParam = i > 0; - objs.get(i).getVendorExtensions().put(CodegenConstants.HAS_MORE_EXT_NAME, i < objs.size() - 1); - } - } - return objs; - } - private static Map addHasMore(Map objs) { if (objs != null) { for (int i = 0; i < objs.size() - 1; i++) { @@ -4379,7 +4331,7 @@ protected void configuresParameterForMediaType(CodegenOperation codegenOperation } } ); - addHasMore(content.getParameters()); + OpenAPIParameters.addHasMore(content.getParameters()); } codegenOperation.getContents().addAll(codegenContents); } diff --git a/src/main/java/io/swagger/codegen/v3/generators/OpenAPIParameters.java b/src/main/java/io/swagger/codegen/v3/generators/OpenAPIParameters.java new file mode 100644 index 0000000000..f4ce9933a9 --- /dev/null +++ b/src/main/java/io/swagger/codegen/v3/generators/OpenAPIParameters.java @@ -0,0 +1,160 @@ +package io.swagger.codegen.v3.generators; + +import io.swagger.codegen.v3.CodegenConstants; +import io.swagger.codegen.v3.CodegenContent; +import io.swagger.codegen.v3.CodegenOperation; +import io.swagger.codegen.v3.CodegenParameter; +import io.swagger.v3.oas.models.parameters.CookieParameter; +import io.swagger.v3.oas.models.parameters.HeaderParameter; +import io.swagger.v3.oas.models.parameters.Parameter; +import io.swagger.v3.oas.models.parameters.PathParameter; +import io.swagger.v3.oas.models.parameters.QueryParameter; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class OpenAPIParameters { + + private CodegenParameter bodyParam = null; + private List allParams = new ArrayList<>(); + private List bodyParams = new ArrayList<>(); + private List pathParams = new ArrayList<>(); + private List queryParams = new ArrayList<>(); + private List headerParams = new ArrayList<>(); + private List cookieParams = new ArrayList<>(); + private List formParams = new ArrayList<>(); + private List requiredParams = new ArrayList<>(); + private List codegenContents = new ArrayList<>(); + + public void setBodyParam(CodegenParameter bodyParam) { + this.bodyParam = bodyParam; + } + + public CodegenParameter getBodyParam() { + return bodyParam; + } + + public List getAllParams() { + return allParams; + } + + public List getBodyParams() { + return bodyParams; + } + + public List getPathParams() { + return pathParams; + } + + public List getQueryParams() { + return queryParams; + } + + public List getHeaderParams() { + return headerParams; + } + + public List getCookieParams() { + return cookieParams; + } + + public List getFormParams() { + return formParams; + } + + public List getRequiredParams() { + return requiredParams; + } + + public List getCodegenContents() { + return codegenContents; + } + + public void addAllParams(CodegenParameter codegenParameter) { + allParams.add(codegenParameter); + } + + public void addBodyParams(CodegenParameter codegenParameter) { + bodyParams.add(codegenParameter); + } + + public void addPathParams(CodegenParameter codegenParameter) { + pathParams.add(codegenParameter); + } + + public void addQueryParams(CodegenParameter codegenParameter) { + queryParams.add(codegenParameter); + } + + public void addHeaderParams(CodegenParameter codegenParameter) { + headerParams.add(codegenParameter); + } + + public void addCookieParams(CodegenParameter codegenParameter) { + cookieParams.add(codegenParameter); + } + + public void addFormParam(CodegenParameter codegenParameter) { + formParams.add(codegenParameter); + } + + public void addRequiredParam(CodegenParameter codegenParameter) { + requiredParams.add(codegenParameter); + } + + public void addCodegenContents(CodegenContent codegenContent) { + codegenContents.add(codegenContent); + } + + public void addParameters(Parameter parameter, CodegenParameter codegenParameter) { + allParams.add(codegenParameter); + + if (parameter instanceof QueryParameter || "query".equalsIgnoreCase(parameter.getIn())) { + queryParams.add(codegenParameter.copy()); + } else if (parameter instanceof PathParameter || "path".equalsIgnoreCase(parameter.getIn())) { + pathParams.add(codegenParameter.copy()); + } else if (parameter instanceof HeaderParameter || "header".equalsIgnoreCase(parameter.getIn())) { + headerParams.add(codegenParameter.copy()); + } else if (parameter instanceof CookieParameter || "cookie".equalsIgnoreCase(parameter.getIn())) { + cookieParams.add(codegenParameter.copy()); + } + if (codegenParameter.required) { + requiredParams.add(codegenParameter.copy()); + } + } + + public void addHasMore(CodegenOperation codegenOperation) { + codegenOperation.allParams = addHasMore(allParams); + codegenOperation.bodyParams = addHasMore(bodyParams); + codegenOperation.pathParams = addHasMore(pathParams); + codegenOperation.queryParams = addHasMore(queryParams); + codegenOperation.headerParams = addHasMore(headerParams); + codegenOperation.cookieParams = addHasMore(cookieParams); + codegenOperation.formParams = addHasMore(formParams); + codegenOperation.requiredParams = addHasMore(requiredParams); + } + + public void sortRequiredAllParams() { + Collections.sort(allParams, (one, another) -> { + if (one.required == another.required) { + return 0; + } else if (one.required) { + return -1; + } else { + return 1; + } + }); + } + + public static List addHasMore(List codegenParameters) { + if (codegenParameters == null || codegenParameters.isEmpty()) { + return codegenParameters; + } + for (int i = 0; i < codegenParameters.size(); i++) { + codegenParameters.get(i).secondaryParam = i > 0; + codegenParameters.get(i).getVendorExtensions().put(CodegenConstants.HAS_MORE_EXT_NAME, i < codegenParameters.size() - 1); + } + return codegenParameters; + } +} diff --git a/src/main/java/io/swagger/codegen/v3/generators/nodejs/NodeJSServerCodegen.java b/src/main/java/io/swagger/codegen/v3/generators/nodejs/NodeJSServerCodegen.java index d2814604e3..5755e48376 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/nodejs/NodeJSServerCodegen.java +++ b/src/main/java/io/swagger/codegen/v3/generators/nodejs/NodeJSServerCodegen.java @@ -10,6 +10,7 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; +import io.swagger.codegen.v3.generators.OpenAPIParameters; import io.swagger.codegen.v3.utils.URLPathUtil; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; @@ -452,7 +453,7 @@ protected void configuresParameterForMediaType(CodegenOperation codegenOperation addParameters(content, codegenOperation.cookieParams); } for (CodegenContent content : codegenContents) { - addHasMore(content.getParameters()); + OpenAPIParameters.addHasMore(content.getParameters()); } codegenOperation.getContents().addAll(codegenContents); } From 71f8078e474ae2dfbde88375940f7039451708fb Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Tue, 14 Sep 2021 20:09:27 -0500 Subject: [PATCH 2/4] renamed operation parameters class --- .../v3/generators/DefaultCodegenConfig.java | 30 +++++++++---------- ...rameters.java => OperationParameters.java} | 2 +- .../nodejs/NodeJSServerCodegen.java | 4 +-- 3 files changed, 18 insertions(+), 18 deletions(-) rename src/main/java/io/swagger/codegen/v3/generators/{OpenAPIParameters.java => OperationParameters.java} (99%) diff --git a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java index 95baa02051..f738dbbf8d 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java +++ b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java @@ -2117,7 +2117,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation } List parameters = operation.getParameters(); - final OpenAPIParameters openAPIParameters = new OpenAPIParameters(); + final OperationParameters operationParameters = new OperationParameters(); RequestBody body = operation.getRequestBody(); if (body != null) { @@ -2178,20 +2178,20 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation } // todo: this segment is only to support the "older" template design. it should be removed once all templates are updated with the new {{#contents}} tag. formParameter.getVendorExtensions().put(CodegenConstants.IS_FORM_PARAM_EXT_NAME, Boolean.TRUE); - openAPIParameters.addFormParam(formParameter.copy()); + operationParameters.addFormParam(formParameter.copy()); if (body.getRequired() != null && body.getRequired()) { - openAPIParameters.addRequiredParam(formParameter.copy()); + operationParameters.addRequiredParam(formParameter.copy()); } - openAPIParameters.addAllParams(formParameter); + operationParameters.addAllParams(formParameter); } - openAPIParameters.addCodegenContents(codegenContent); + operationParameters.addCodegenContents(codegenContent); } } else { CodegenParameter bodyParam = fromRequestBody(body, schemaName, schema, schemas, imports); - openAPIParameters.setBodyParam(bodyParam); + operationParameters.setBodyParam(bodyParam); if (foundSchemas.isEmpty()) { - openAPIParameters.addBodyParams(bodyParam.copy()); - openAPIParameters.addAllParams(bodyParam); + operationParameters.addBodyParams(bodyParam.copy()); + operationParameters.addAllParams(bodyParam); } else { boolean alreadyAdded = false; for (Schema usedSchema : foundSchemas) { @@ -2204,7 +2204,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation } } foundSchemas.add(schema); - openAPIParameters.addCodegenContents(codegenContent); + operationParameters.addCodegenContents(codegenContent); } } } @@ -2215,24 +2215,24 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation param = getParameterFromRef(param.get$ref(), openAPI); } CodegenParameter codegenParameter = fromParameter(param, imports); - openAPIParameters.addParameters(param, codegenParameter); + operationParameters.addParameters(param, codegenParameter); } } addOperationImports(codegenOperation, imports); - codegenOperation.bodyParam = openAPIParameters.getBodyParam(); + codegenOperation.bodyParam = operationParameters.getBodyParam(); codegenOperation.httpMethod = httpMethod.toUpperCase(); // move "required" parameters in front of "optional" parameters if (sortParamsByRequiredFlag) { - openAPIParameters.sortRequiredAllParams(); + operationParameters.sortRequiredAllParams(); } - openAPIParameters.addHasMore(codegenOperation); + operationParameters.addHasMore(codegenOperation); codegenOperation.externalDocs = operation.getExternalDocs(); - configuresParameterForMediaType(codegenOperation, openAPIParameters.getCodegenContents()); + configuresParameterForMediaType(codegenOperation, operationParameters.getCodegenContents()); // legacy support codegenOperation.nickname = codegenOperation.operationId; @@ -4331,7 +4331,7 @@ protected void configuresParameterForMediaType(CodegenOperation codegenOperation } } ); - OpenAPIParameters.addHasMore(content.getParameters()); + OperationParameters.addHasMore(content.getParameters()); } codegenOperation.getContents().addAll(codegenContents); } diff --git a/src/main/java/io/swagger/codegen/v3/generators/OpenAPIParameters.java b/src/main/java/io/swagger/codegen/v3/generators/OperationParameters.java similarity index 99% rename from src/main/java/io/swagger/codegen/v3/generators/OpenAPIParameters.java rename to src/main/java/io/swagger/codegen/v3/generators/OperationParameters.java index f4ce9933a9..5e37176e4b 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/OpenAPIParameters.java +++ b/src/main/java/io/swagger/codegen/v3/generators/OperationParameters.java @@ -14,7 +14,7 @@ import java.util.Collections; import java.util.List; -public class OpenAPIParameters { +public class OperationParameters { private CodegenParameter bodyParam = null; private List allParams = new ArrayList<>(); diff --git a/src/main/java/io/swagger/codegen/v3/generators/nodejs/NodeJSServerCodegen.java b/src/main/java/io/swagger/codegen/v3/generators/nodejs/NodeJSServerCodegen.java index 5755e48376..24a29d3724 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/nodejs/NodeJSServerCodegen.java +++ b/src/main/java/io/swagger/codegen/v3/generators/nodejs/NodeJSServerCodegen.java @@ -10,7 +10,7 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; -import io.swagger.codegen.v3.generators.OpenAPIParameters; +import io.swagger.codegen.v3.generators.OperationParameters; import io.swagger.codegen.v3.utils.URLPathUtil; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; @@ -453,7 +453,7 @@ protected void configuresParameterForMediaType(CodegenOperation codegenOperation addParameters(content, codegenOperation.cookieParams); } for (CodegenContent content : codegenContents) { - OpenAPIParameters.addHasMore(content.getParameters()); + OperationParameters.addHasMore(content.getParameters()); } codegenOperation.getContents().addAll(codegenContents); } From 7c9cac36a369316e6c5b4525707f79168191cf65 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Thu, 16 Sep 2021 22:02:24 -0500 Subject: [PATCH 3/4] convert schema from deepObject style parameter into query parameter. --- .../v3/generators/DefaultCodegenConfig.java | 5 ++ .../v3/generators/OperationParameters.java | 46 +++++++++++++++++++ .../v3/generators/util/OpenAPIUtil.java | 11 +++++ 3 files changed, 62 insertions(+) diff --git a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java index f738dbbf8d..26ece16059 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java +++ b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java @@ -2214,6 +2214,11 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation if (StringUtils.isNotBlank(param.get$ref())) { param = getParameterFromRef(param.get$ref(), openAPI); } + if ((param instanceof QueryParameter || "query".equalsIgnoreCase(param.getIn())) + && param.getStyle().equals(Parameter.StyleEnum.DEEPOBJECT)) { + operationParameters.parseNestedObjects(param.getName(), param.getSchema(), imports, this, openAPI); + continue; + } CodegenParameter codegenParameter = fromParameter(param, imports); operationParameters.addParameters(param, codegenParameter); } diff --git a/src/main/java/io/swagger/codegen/v3/generators/OperationParameters.java b/src/main/java/io/swagger/codegen/v3/generators/OperationParameters.java index 5e37176e4b..7cf06a29f1 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/OperationParameters.java +++ b/src/main/java/io/swagger/codegen/v3/generators/OperationParameters.java @@ -4,6 +4,10 @@ import io.swagger.codegen.v3.CodegenContent; import io.swagger.codegen.v3.CodegenOperation; import io.swagger.codegen.v3.CodegenParameter; +import io.swagger.codegen.v3.generators.util.OpenAPIUtil; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.media.ArraySchema; +import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.parameters.CookieParameter; import io.swagger.v3.oas.models.parameters.HeaderParameter; import io.swagger.v3.oas.models.parameters.Parameter; @@ -13,6 +17,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.Set; public class OperationParameters { @@ -147,6 +153,40 @@ public void sortRequiredAllParams() { }); } + public void parseNestedObjects(String name, Schema schema, Set imports, DefaultCodegenConfig codegenConfig, OpenAPI openAPI) { + schema = OpenAPIUtil.getRefSchemaIfExists(schema, openAPI); + if (schema == null || !isObjectWithProperties(schema)) { + return; + } + final Map properties = schema.getProperties(); + for (String key : properties.keySet()) { + Schema property = properties.get(key); + property = OpenAPIUtil.getRefSchemaIfExists(property, openAPI); + boolean required; + if (schema.getRequired() == null || schema.getRequired().isEmpty()) { + required = false; + } else { + required = schema.getRequired().stream().anyMatch(propertyName -> key.equalsIgnoreCase(propertyName.toString())); + } + final String parameterName; + if (property instanceof ArraySchema) { + parameterName = String.format("%s[%s][]", name, key); + } else { + parameterName = String.format("%s[%s]", name, key); + } + if (isObjectWithProperties(property)) { + parseNestedObjects(parameterName, property, imports, codegenConfig, openAPI); + continue; + } + final Parameter queryParameter = new QueryParameter() + .name(parameterName) + .required(required) + .schema(property); + final CodegenParameter codegenParameter = codegenConfig.fromParameter(queryParameter, imports); + addParameters(queryParameter, codegenParameter); + } + } + public static List addHasMore(List codegenParameters) { if (codegenParameters == null || codegenParameters.isEmpty()) { return codegenParameters; @@ -157,4 +197,10 @@ public static List addHasMore(List codegenPa } return codegenParameters; } + + private boolean isObjectWithProperties(Schema schema) { + return ("object".equalsIgnoreCase(schema.getType()) || schema.getType() == null) + && schema.getProperties() != null + && !schema.getProperties().isEmpty(); + } } diff --git a/src/main/java/io/swagger/codegen/v3/generators/util/OpenAPIUtil.java b/src/main/java/io/swagger/codegen/v3/generators/util/OpenAPIUtil.java index f6a47bc7b9..bd7c3b2408 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/util/OpenAPIUtil.java +++ b/src/main/java/io/swagger/codegen/v3/generators/util/OpenAPIUtil.java @@ -51,6 +51,17 @@ public static Schema getSchemaFromName(String name, OpenAPI openAPI) { return mapSchema.get(name); } + public static Schema getRefSchemaIfExists(Schema schema, OpenAPI openAPI) { + if (schema == null) { + return null; + } + if (StringUtils.isBlank(schema.get$ref()) || openAPI == null || openAPI.getComponents() == null) { + return schema; + } + final String name = getSimpleRef(schema.get$ref()); + return getSchemaFromName(name, openAPI); + } + public static Schema getSchemaFromRefSchema(Schema refSchema, OpenAPI openAPI) { if (StringUtils.isBlank(refSchema.get$ref())) { return null; From 7c3ed54db35355a8f26c4c54318b116fc2595996 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Thu, 16 Sep 2021 23:15:35 -0500 Subject: [PATCH 4/4] check style property is not null in schema --- .../io/swagger/codegen/v3/generators/DefaultCodegenConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java index 26ece16059..10db850c7a 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java +++ b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java @@ -2215,7 +2215,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation param = getParameterFromRef(param.get$ref(), openAPI); } if ((param instanceof QueryParameter || "query".equalsIgnoreCase(param.getIn())) - && param.getStyle().equals(Parameter.StyleEnum.DEEPOBJECT)) { + && param.getStyle() != null && param.getStyle().equals(Parameter.StyleEnum.DEEPOBJECT)) { operationParameters.parseNestedObjects(param.getName(), param.getSchema(), imports, this, openAPI); continue; }