From fe90d9c42606ff19abc53e22408bb9460fe6e122 Mon Sep 17 00:00:00 2001 From: Hui Yu Date: Tue, 2 Nov 2021 03:18:21 +0800 Subject: [PATCH] [Core] Does not recognize the type "ByteArray" as "String" (#10749) * Does not recognize the type "ByteArray" as "String" * Change in default codegen * Removes redundant updateRequestBodyForString * Adds testByteArrayTypeInSchemas Co-authored-by: Justin Black --- .../openapitools/codegen/DefaultCodegen.java | 3 ++ .../codegen/languages/RustServerCodegen.java | 32 ------------- .../codegen/DefaultCodegenTest.java | 25 ++++++++++ .../src/test/resources/3_0/issue_10725.yaml | 46 +++++++++++++++++++ 4 files changed, 74 insertions(+), 32 deletions(-) create mode 100644 modules/openapi-generator/src/test/resources/3_0/issue_10725.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 2c530aeaffe..dc67303aa9b 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 @@ -3336,6 +3336,7 @@ public class DefaultCodegen implements CodegenConfig { protected void updatePropertyForString(CodegenProperty property, Schema p) { if (ModelUtils.isByteArraySchema(p)) { + property.setIsString(false); property.isByteArray = true; } else if (ModelUtils.isBinarySchema(p)) { property.isBinary = true; @@ -4277,6 +4278,7 @@ public class DefaultCodegen implements CodegenConfig { } else if (ModelUtils.isUUIDSchema(responseSchema)) { r.isUuid = true; } else if (ModelUtils.isByteArraySchema(responseSchema)) { + r.setIsString(false); r.isByteArray = true; } else if (ModelUtils.isBinarySchema(responseSchema)) { r.isFile = true; // file = binary in OAS3 @@ -6529,6 +6531,7 @@ public class DefaultCodegen implements CodegenConfig { protected void updateRequestBodyForString(CodegenParameter codegenParameter, Schema schema, Set imports, String bodyParameterName) { updateRequestBodyForPrimitiveType(codegenParameter, schema, bodyParameterName, imports); if (ModelUtils.isByteArraySchema(schema)) { + codegenParameter.setIsString(false); codegenParameter.isByteArray = true; } else if (ModelUtils.isBinarySchema(schema)) { codegenParameter.isBinary = true; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java index cc8db68a316..a522c48d60a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java @@ -1686,38 +1686,6 @@ public class RustServerCodegen extends DefaultCodegen implements CodegenConfig { } } - @Override - protected void updateRequestBodyForString(CodegenParameter codegenParameter, Schema schema, Set imports, String bodyParameterName) { - /** - * we have a custom version of this function to set isString to false for isByteArray - */ - updateRequestBodyForPrimitiveType(codegenParameter, schema, bodyParameterName, imports); - if (ModelUtils.isByteArraySchema(schema)) { - codegenParameter.isByteArray = true; - // custom code - codegenParameter.setIsString(false); - } else if (ModelUtils.isBinarySchema(schema)) { - codegenParameter.isBinary = true; - codegenParameter.isFile = true; // file = binary in OAS3 - } else if (ModelUtils.isUUIDSchema(schema)) { - codegenParameter.isUuid = true; - } else if (ModelUtils.isURISchema(schema)) { - codegenParameter.isUri = true; - } else if (ModelUtils.isEmailSchema(schema)) { - codegenParameter.isEmail = true; - } else if (ModelUtils.isDateSchema(schema)) { // date format - codegenParameter.setIsString(false); // for backward compatibility with 2.x - codegenParameter.isDate = true; - } else if (ModelUtils.isDateTimeSchema(schema)) { // date-time format - codegenParameter.setIsString(false); // for backward compatibility with 2.x - codegenParameter.isDateTime = true; - } else if (ModelUtils.isDecimalSchema(schema)) { // type: string, format: number - codegenParameter.isDecimal = true; - codegenParameter.setIsString(false); - } - codegenParameter.pattern = toRegularExpression(schema.getPattern()); - } - @Override protected void updateParameterForString(CodegenParameter codegenParameter, Schema parameterSchema){ /** 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 83917da4eba..f1e0cd6b9b6 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 @@ -3846,4 +3846,29 @@ public class DefaultCodegenTest { cp = co.queryParams.get(0); assertTrue(cp.getIsAnyType()); } + + @Test + public void testByteArrayTypeInSchemas() { + DefaultCodegen codegen = new DefaultCodegen(); + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue_10725.yaml"); + codegen.setOpenAPI(openAPI); + String path; + CodegenOperation co; + CodegenParameter cp; + + path = "/TxRxByteArray"; + co = codegen.fromOperation(path, "POST", openAPI.getPaths().get(path).getPost(), null); + cp = co.bodyParam; + assertTrue(cp.isByteArray); + assertFalse(cp.getIsString()); + CodegenResponse cr = co.responses.get(0); + assertTrue(cr.isByteArray); + assertFalse(cr.getIsString()); + + String modelName = "ObjectContainingByteArray"; + CodegenModel m = codegen.fromModel(modelName, openAPI.getComponents().getSchemas().get(modelName)); + CodegenProperty pr = m.vars.get(0); + assertTrue(pr.isByteArray); + assertFalse(pr.getIsString()); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/issue_10725.yaml b/modules/openapi-generator/src/test/resources/3_0/issue_10725.yaml new file mode 100644 index 00000000000..780965111f9 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/issue_10725.yaml @@ -0,0 +1,46 @@ +openapi: 3.0.1 +info: + title: OpenAPI Petstore + description: "byteArray schema isX type checks" + license: + name: Apache-2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + version: 1.0.0 +servers: + - url: http://petstore.swagger.io:80/v2 +tags: [] +paths: + /TxRxByteArray: + post: + requestBody: + required: true + content: + application/json: + schema: + type: string + format: byte + responses: + '200': + description: ComposedObject + content: + application/json: + schema: + type: string + format: byte + /RxRefObjectContainingByteArray: + get: + responses: + '200': + description: ComposedNumber + content: + application/json: + schema: + $ref: '#/components/schemas/ObjectContainingByteArray' +components: + schemas: + ObjectContainingByteArray: + type: object + properties: + byteArray: + type: string + format: byte