diff --git a/org.springframework.web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java b/org.springframework.web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java index 2aea01f187b..0615f7a823a 100644 --- a/org.springframework.web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java +++ b/org.springframework.web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java @@ -17,6 +17,7 @@ package org.springframework.web.client; import java.io.IOException; +import java.io.InputStream; import java.nio.charset.Charset; import org.springframework.http.HttpStatus; @@ -82,11 +83,15 @@ public class DefaultResponseErrorHandler implements ResponseErrorHandler { private byte[] getResponseBody(ClientHttpResponse response) { try { - return FileCopyUtils.copyToByteArray(response.getBody()); + InputStream responseBody = response.getBody(); + if (responseBody != null) { + return FileCopyUtils.copyToByteArray(responseBody); + } } catch (IOException ex) { - return new byte[0]; + // ignore } + return new byte[0]; } } diff --git a/org.springframework.web/src/test/java/org/springframework/web/client/DefaultResponseErrorHandlerTests.java b/org.springframework.web/src/test/java/org/springframework/web/client/DefaultResponseErrorHandlerTests.java index 67a11a7c8de..0c9866c19be 100644 --- a/org.springframework.web/src/test/java/org/springframework/web/client/DefaultResponseErrorHandlerTests.java +++ b/org.springframework.web/src/test/java/org/springframework/web/client/DefaultResponseErrorHandlerTests.java @@ -19,16 +19,17 @@ package org.springframework.web.client; import java.io.ByteArrayInputStream; import java.io.IOException; -import org.junit.Before; -import org.junit.Test; - import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.client.ClientHttpResponse; +import org.junit.Before; +import org.junit.Test; + import static org.easymock.EasyMock.*; -import static org.junit.Assert.*; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; /** @author Arjen Poutsma */ public class DefaultResponseErrorHandlerTests { @@ -96,4 +97,21 @@ public class DefaultResponseErrorHandlerTests { verify(response); } + + @Test(expected = HttpClientErrorException.class) + public void handleErrorNullResponse() throws Exception { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.TEXT_PLAIN); + + expect(response.getStatusCode()).andReturn(HttpStatus.NOT_FOUND); + expect(response.getStatusText()).andReturn("Not Found"); + expect(response.getHeaders()).andReturn(headers); + expect(response.getBody()).andReturn(null); + + replay(response); + + handler.handleError(response); + + verify(response); + } }