From 009fda5e3deec7c296cdd48ac4ad2717fb3b1bab Mon Sep 17 00:00:00 2001 From: Alex B <45384811+AB-xdev@users.noreply.github.com> Date: Sat, 2 Mar 2024 14:18:49 +0100 Subject: [PATCH] [JAVA][apache-httpclient] Use ``EntityUtils#toString`` instead of ``Scanner`` (#17998) ``EntityUtils#toString`` automatically selects the correct encoding based on the received request. Scanner currently uses the JVM default encoding, which doesn't always work. --- .../Java/libraries/apache-httpclient/ApiClient.mustache | 6 ++---- .../src/main/java/org/openapitools/client/ApiClient.java | 6 ++---- .../src/main/java/org/openapitools/client/ApiClient.java | 6 ++---- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/apache-httpclient/ApiClient.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/apache-httpclient/ApiClient.mustache index 90f6a60ffd8..69f15e6a8a0 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/apache-httpclient/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/apache-httpclient/ApiClient.mustache @@ -853,8 +853,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} { if (mimeType == null || isJsonMime(mimeType)) { // Assume json if no mime type // convert input stream to string - java.util.Scanner s = new java.util.Scanner(entity.getContent()).useDelimiter("\\A"); - String content = (String) (s.hasNext() ? s.next() : ""); + String content = EntityUtils.toString(entity); if ("".equals(content)) { // returns null for empty body return null; @@ -863,8 +862,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} { return objectMapper.readValue(content, valueType); } else if ("text/plain".equalsIgnoreCase(mimeType)) { // convert input stream to string - java.util.Scanner s = new java.util.Scanner(entity.getContent()).useDelimiter("\\A"); - return (T) (s.hasNext() ? s.next() : ""); + return (T) EntityUtils.toString(entity); } else { throw new ApiException( "Deserialization for content type '" + mimeType + "' not supported for type '" + valueType + "'", diff --git a/samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/ApiClient.java index c553e155492..236225fe91c 100644 --- a/samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/ApiClient.java @@ -771,8 +771,7 @@ public class ApiClient extends JavaTimeFormatter { if (mimeType == null || isJsonMime(mimeType)) { // Assume json if no mime type // convert input stream to string - java.util.Scanner s = new java.util.Scanner(entity.getContent()).useDelimiter("\\A"); - String content = (String) (s.hasNext() ? s.next() : ""); + String content = EntityUtils.toString(entity); if ("".equals(content)) { // returns null for empty body return null; @@ -781,8 +780,7 @@ public class ApiClient extends JavaTimeFormatter { return objectMapper.readValue(content, valueType); } else if ("text/plain".equalsIgnoreCase(mimeType)) { // convert input stream to string - java.util.Scanner s = new java.util.Scanner(entity.getContent()).useDelimiter("\\A"); - return (T) (s.hasNext() ? s.next() : ""); + return (T) EntityUtils.toString(entity); } else { throw new ApiException( "Deserialization for content type '" + mimeType + "' not supported for type '" + valueType + "'", diff --git a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/ApiClient.java index ada6dcf55ce..f3ac756acde 100644 --- a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/ApiClient.java @@ -864,8 +864,7 @@ public class ApiClient extends JavaTimeFormatter { if (mimeType == null || isJsonMime(mimeType)) { // Assume json if no mime type // convert input stream to string - java.util.Scanner s = new java.util.Scanner(entity.getContent()).useDelimiter("\\A"); - String content = (String) (s.hasNext() ? s.next() : ""); + String content = EntityUtils.toString(entity); if ("".equals(content)) { // returns null for empty body return null; @@ -874,8 +873,7 @@ public class ApiClient extends JavaTimeFormatter { return objectMapper.readValue(content, valueType); } else if ("text/plain".equalsIgnoreCase(mimeType)) { // convert input stream to string - java.util.Scanner s = new java.util.Scanner(entity.getContent()).useDelimiter("\\A"); - return (T) (s.hasNext() ? s.next() : ""); + return (T) EntityUtils.toString(entity); } else { throw new ApiException( "Deserialization for content type '" + mimeType + "' not supported for type '" + valueType + "'",