From 22b8ebfe374ff9abd7fde6909e8465b5180c835a Mon Sep 17 00:00:00 2001 From: okoneva Date: Fri, 12 Oct 2018 17:49:29 +0300 Subject: [PATCH 1/2] Add non-null ResponseBody for responses with empty body --- .../extras/retrofit/AsyncHttpClientCall.java | 2 ++ .../retrofit/AsyncHttpClientCallTest.java | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/extras/retrofit2/src/main/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCall.java b/extras/retrofit2/src/main/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCall.java index e8980fddab..927356bd65 100644 --- a/extras/retrofit2/src/main/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCall.java +++ b/extras/retrofit2/src/main/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCall.java @@ -254,6 +254,8 @@ private Response toOkhttpResponse(org.asynchttpclient.Response asyncHttpClientRe ? null : MediaType.parse(asyncHttpClientResponse.getContentType()); val okHttpBody = ResponseBody.create(contentType, asyncHttpClientResponse.getResponseBodyAsBytes()); rspBuilder.body(okHttpBody); + } else { + rspBuilder.body(ResponseBody.create(null, "")); } return rspBuilder.build(); diff --git a/extras/retrofit2/src/test/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCallTest.java b/extras/retrofit2/src/test/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCallTest.java index 90ab4b33e5..84ed4ddf47 100644 --- a/extras/retrofit2/src/test/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCallTest.java +++ b/extras/retrofit2/src/test/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCallTest.java @@ -41,6 +41,7 @@ import static org.mockito.Matchers.any; import static org.mockito.Mockito.*; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotEquals; import static org.testng.Assert.assertTrue; public class AsyncHttpClientCallTest { @@ -281,6 +282,19 @@ public void contentTypeIsProperlyParsedIfPresent() throws Exception { } + @Test + public void bodyIsNotNullInResponse() throws Exception { + AsyncHttpClient client = mock(AsyncHttpClient.class); + + givenResponseIsProduced(client, responseWithNoBody()); + + okhttp3.Response response = whenRequestIsMade(client, REQUEST); + + assertEquals(response.code(), 200); + assertEquals(response.header("Server"), "nginx"); + assertNotEquals(response.body(), null); + } + private void givenResponseIsProduced(AsyncHttpClient client, Response response) { when(client.executeRequest(any(org.asynchttpclient.Request.class), any())).thenAnswer(invocation -> { AsyncCompletionHandler handler = invocation.getArgument(1); @@ -323,6 +337,13 @@ private Response responseWithBody(String contentType, String content) { return response; } + private Response responseWithNoBody() { + Response response = aResponse(); + when(response.hasResponseBody()).thenReturn(false); + when(response.getContentType()).thenReturn(null); + return response; + } + private void doThrow(String message) { throw new RuntimeException(message); } From 00a58d81aa55392edff62b7c81c13bf90d733f2b Mon Sep 17 00:00:00 2001 From: okoneva Date: Fri, 12 Oct 2018 19:01:44 +0300 Subject: [PATCH 2/2] Introduced empty ResponseBody as a constant --- .../asynchttpclient/extras/retrofit/AsyncHttpClientCall.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/extras/retrofit2/src/main/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCall.java b/extras/retrofit2/src/main/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCall.java index 927356bd65..b9517f9fb1 100644 --- a/extras/retrofit2/src/main/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCall.java +++ b/extras/retrofit2/src/main/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCall.java @@ -45,6 +45,8 @@ class AsyncHttpClientCall implements Cloneable, okhttp3.Call { * @see #executeTimeoutMillis */ public static final long DEFAULT_EXECUTE_TIMEOUT_MILLIS = 30_000; + + private static final ResponseBody EMPTY_BODY = ResponseBody.create(null, ""); /** * Tells whether call has been executed. * @@ -255,7 +257,7 @@ private Response toOkhttpResponse(org.asynchttpclient.Response asyncHttpClientRe val okHttpBody = ResponseBody.create(contentType, asyncHttpClientResponse.getResponseBodyAsBytes()); rspBuilder.body(okHttpBody); } else { - rspBuilder.body(ResponseBody.create(null, "")); + rspBuilder.body(EMPTY_BODY); } return rspBuilder.build();