diff --git a/core/src/main/java/org/springframework/ws/transport/http/AbstractHttpSenderConnection.java b/core/src/main/java/org/springframework/ws/transport/http/AbstractHttpSenderConnection.java index d1dba63a..6b5d0902 100644 --- a/core/src/main/java/org/springframework/ws/transport/http/AbstractHttpSenderConnection.java +++ b/core/src/main/java/org/springframework/ws/transport/http/AbstractHttpSenderConnection.java @@ -61,7 +61,7 @@ public abstract class AbstractHttpSenderConnection extends AbstractSenderConnect long contentLength = getResponseContentLength(); if (contentLength < 0) { if (responseBuffer == null) { - responseBuffer = FileCopyUtils.copyToByteArray(getResponseInputStream()); + responseBuffer = FileCopyUtils.copyToByteArray(getRawResponseInputStream()); } contentLength = responseBuffer.length; } @@ -98,6 +98,7 @@ public abstract class AbstractHttpSenderConnection extends AbstractSenderConnect /** Returns the length of the response. */ protected abstract long getResponseContentLength() throws IOException; + /** Returns the raw, possibly compressed input stream to read the response from. */ protected abstract InputStream getRawResponseInputStream() throws IOException; /* diff --git a/core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderIntegrationTestCase.java b/core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderIntegrationTestCase.java index 7116df8f..20267265 100644 --- a/core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderIntegrationTestCase.java +++ b/core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderIntegrationTestCase.java @@ -133,6 +133,14 @@ public abstract class AbstractHttpWebServiceMessageSenderIntegrationTestCase ext validateResponse(servlet); } + public void testSendAndReceiveCompressedInvalidContentSize() throws Exception { + MyServlet servlet = new MyServlet(); + servlet.setResponse(true); + servlet.setGzip(true); + servlet.setContentLength(-1); + validateResponse(servlet); + } + public void testSendAndReceiveFault() throws Exception { MyServlet servlet = new MyServlet(); servlet.setResponseStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);