diff --git a/.gitignore b/.gitignore index f1c8123eca..abf3e16c07 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ hs_err_pid* # ide .idea *.iml +.DS_Store diff --git a/client-runtime/src/main/java/com/microsoft/rest/ServiceResponseBuilder.java b/client-runtime/src/main/java/com/microsoft/rest/ServiceResponseBuilder.java index 3ccbe0a5f5..20601280b5 100644 --- a/client-runtime/src/main/java/com/microsoft/rest/ServiceResponseBuilder.java +++ b/client-runtime/src/main/java/com/microsoft/rest/ServiceResponseBuilder.java @@ -114,8 +114,10 @@ public ServiceResponse build(Response response) throws IOExcept return new ServiceResponse<>(null, response); } else { try { - String responseContent = responseBody.string(); - responseBody = ResponseBody.create(responseBody.contentType(), responseContent); + String responseContent = ""; + if (responseBody != null) { + responseContent = responseBody.source().buffer().clone().readUtf8(); + } throw exceptionType.getConstructor(String.class, Response.class, (Class) responseTypes.get(0)) .newInstance("Status code " + statusCode + ", " + responseContent, response, buildBody(statusCode, responseBody)); } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { @@ -207,8 +209,7 @@ else if (type == InputStream.class) { } // Deserialize else { - String responseContent = responseBody.string(); - responseBody.close(); + String responseContent = responseBody.source().buffer().clone().readUtf8(); if (responseContent.length() <= 0) { return null; } diff --git a/client-runtime/src/main/java/com/microsoft/rest/interceptors/LoggingInterceptor.java b/client-runtime/src/main/java/com/microsoft/rest/interceptors/LoggingInterceptor.java index 44b85a63fa..8ef4c0a8e2 100644 --- a/client-runtime/src/main/java/com/microsoft/rest/interceptors/LoggingInterceptor.java +++ b/client-runtime/src/main/java/com/microsoft/rest/interceptors/LoggingInterceptor.java @@ -129,7 +129,7 @@ public Response intercept(Chain chain) throws IOException { // log headers if (logLevel == LogLevel.HEADERS || logLevel == LogLevel.BODY_AND_HEADERS) { for (String header : response.headers().names()) { - log(logger, String.format("%s: %s", header, Joiner.on(", ").join(request.headers(header)))); + log(logger, String.format("%s: %s", header, Joiner.on(", ").join(response.headers(header)))); } } diff --git a/client-runtime/src/main/java/com/microsoft/rest/serializer/JacksonAdapter.java b/client-runtime/src/main/java/com/microsoft/rest/serializer/JacksonAdapter.java index 061e06dd52..fdc55ef3cf 100644 --- a/client-runtime/src/main/java/com/microsoft/rest/serializer/JacksonAdapter.java +++ b/client-runtime/src/main/java/com/microsoft/rest/serializer/JacksonAdapter.java @@ -139,6 +139,7 @@ public T deserialize(String value, final Type type) throws IOException { */ private static ObjectMapper initializeObjectMapper(ObjectMapper mapper) { mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false) + .configure(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS, true) .configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) .configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true)