From a4325ec5205b68298fcc66b9e85927aa64d840ff Mon Sep 17 00:00:00 2001 From: Sorin Florea <30589784+sorin-florea@users.noreply.github.com> Date: Mon, 10 Jan 2022 15:23:28 +0200 Subject: [PATCH] ISSUE-11242: Fix Java native path param encoding (#11257) --- .../Java/libraries/native/ApiClient.mustache | 2 +- .../codegen/java/JavaClientCodegenTest.java | 32 +++++++++++++++- .../src/test/resources/3_0/issue11242.yaml | 37 +++++++++++++++++++ .../org/openapitools/client/ApiClient.java | 2 +- .../org/openapitools/client/ApiClient.java | 2 +- 5 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 modules/openapi-generator/src/test/resources/3_0/issue11242.yaml diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/native/ApiClient.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/native/ApiClient.mustache index 977147238108..03fe2a46841d 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/native/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/native/ApiClient.mustache @@ -76,7 +76,7 @@ public class ApiClient { * @return URL-encoded representation of the input string. */ public static String urlEncode(String s) { - return URLEncoder.encode(s, UTF_8); + return URLEncoder.encode(s, UTF_8).replaceAll("\\+", "%20"); } /** 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 2e25fa70a24a..1d326861f0a6 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 @@ -1170,7 +1170,7 @@ public class JavaClientCodegenTest { "formParams.add(\"file\", file);" ); } - + /** * See https://github.com/OpenAPITools/openapi-generator/issues/8352 */ @@ -1228,4 +1228,34 @@ public class JavaClientCodegenTest { final Path defaultApi = Paths.get(output + "/src/main/java/xyz/abcdef/ApiClient.java"); TestUtils.assertFileContains(defaultApi, "value instanceof Map"); } + + /** + * See https://github.com/OpenAPITools/openapi-generator/issues/11242 + */ + @Test + public void testNativeClientWhiteSpacePathParamEncoding() throws IOException { + Map properties = new HashMap<>(); + properties.put(JavaClientCodegen.JAVA8_MODE, true); + properties.put(CodegenConstants.API_PACKAGE, "xyz.abcdef.api"); + + File output = Files.createTempDirectory("test").toFile(); + output.deleteOnExit(); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("java") + .setLibrary(JavaClientCodegen.NATIVE) + .setAdditionalProperties(properties) + .setInputSpec("src/test/resources/3_0/issue11242.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")); + + final ClientOptInput clientOptInput = configurator.toClientOptInput(); + DefaultGenerator generator = new DefaultGenerator(); + List files = generator.opts(clientOptInput).generate(); + + Assert.assertEquals(files.size(), 34); + validateJavaSourceFiles(files); + + TestUtils.assertFileContains(Paths.get(output + "/src/main/java/xyz/abcdef/ApiClient.java"), + "public static String urlEncode(String s) { return URLEncoder.encode(s, UTF_8).replaceAll(\"\\\\+\", \"%20\"); }"); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/issue11242.yaml b/modules/openapi-generator/src/test/resources/3_0/issue11242.yaml new file mode 100644 index 000000000000..ee27ec7f33b1 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/issue11242.yaml @@ -0,0 +1,37 @@ +openapi: 3.0.3 +info: + title: Issue 11242 - Path Param encoding + description: "White space encoding in path parameters" + version: "1.0.0" +servers: + - url: localhost:8080 +paths: + /api/{someParam}: + parameters: + - in: path + name: someParam + schema: + type: string + required: true + description: Some parameter. + get: + operationId: GetSomeParam + summary: View some param + responses: + '200': + description: Some return value + content: + application/json: + schema: + $ref: '#/components/schemas/SomeReturnValue' + example: + someParam: someValue +components: + schemas: + SomeReturnValue: + type: object + required: + - someParam + properties: + someParam: + type: string diff --git a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/ApiClient.java index 9d108d594e4a..f39fd0a344b6 100644 --- a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/ApiClient.java @@ -81,7 +81,7 @@ public class ApiClient { * @return URL-encoded representation of the input string. */ public static String urlEncode(String s) { - return URLEncoder.encode(s, UTF_8); + return URLEncoder.encode(s, UTF_8).replaceAll("\\+", "%20"); } /** diff --git a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/ApiClient.java index 9d108d594e4a..f39fd0a344b6 100644 --- a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/ApiClient.java @@ -81,7 +81,7 @@ public class ApiClient { * @return URL-encoded representation of the input string. */ public static String urlEncode(String s) { - return URLEncoder.encode(s, UTF_8); + return URLEncoder.encode(s, UTF_8).replaceAll("\\+", "%20"); } /**