From a6b8977e86da52983b70795e25e2f4a5976d3cb6 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Sat, 17 Feb 2007 13:17:45 +0000 Subject: [PATCH] fixed issue with reading response HTTP headers --- .../http/CommonsHttpTransportInputStream.java | 2 +- ...HttpUrlConnectionTransportInputStream.java | 2 +- ...ctHttpWebServiceMessageSenderTestCase.java | 25 +++++++++++++------ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/org/springframework/ws/transport/http/CommonsHttpTransportInputStream.java b/core/src/main/java/org/springframework/ws/transport/http/CommonsHttpTransportInputStream.java index 53c12caf..9e9cb131 100644 --- a/core/src/main/java/org/springframework/ws/transport/http/CommonsHttpTransportInputStream.java +++ b/core/src/main/java/org/springframework/ws/transport/http/CommonsHttpTransportInputStream.java @@ -60,7 +60,7 @@ public class CommonsHttpTransportInputStream extends TransportInputStream { } public Iterator getHeaders(String name) throws IOException { - Header[] headers = postMethod.getRequestHeaders(name); + Header[] headers = postMethod.getResponseHeaders(name); String[] names = new String[headers.length]; for (int i = 0; i < headers.length; i++) { names[i] = headers[i].getValue(); diff --git a/core/src/main/java/org/springframework/ws/transport/http/HttpUrlConnectionTransportInputStream.java b/core/src/main/java/org/springframework/ws/transport/http/HttpUrlConnectionTransportInputStream.java index 33b799dd..6805a39e 100644 --- a/core/src/main/java/org/springframework/ws/transport/http/HttpUrlConnectionTransportInputStream.java +++ b/core/src/main/java/org/springframework/ws/transport/http/HttpUrlConnectionTransportInputStream.java @@ -69,7 +69,7 @@ public class HttpUrlConnectionTransportInputStream extends TransportInputStream // Header field 0 is the status line, so we start at 1 int i = 1; while (true) { - String headerName = connection.getHeaderField(i); + String headerName = connection.getHeaderFieldKey(i); if (!StringUtils.hasLength(headerName)) { break; } diff --git a/core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderTestCase.java b/core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderTestCase.java index 34145c1d..dd9b5c9b 100644 --- a/core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderTestCase.java +++ b/core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderTestCase.java @@ -50,9 +50,13 @@ public abstract class AbstractHttpWebServiceMessageSenderTestCase extends XMLTes protected Server jettyServer; - protected static final String HEADER_NAME = "SOAPAction"; + private static final String REQUEST_HEADER_NAME = "RequestHeader"; - protected static final String HEADER_VALUE = "http://springframework.org/spring-ws"; + private static final String REQUEST_HEADER_VALUE = "RequestHeaderValue"; + + private static final String RESPONSE_HEADER_NAME = "ResponseHeader"; + + private static final String RESPONSE_HEADER_VALUE = "ResponseHeaderValue"; protected static final String URL = "http://localhost:8888"; @@ -95,16 +99,22 @@ public abstract class AbstractHttpWebServiceMessageSenderTestCase extends XMLTes public void testSendAndReceiveResponse() throws Exception { messageSender.setUrl(new URL("http://localhost:8888/response")); SOAPMessage saajRequest = messageFactory.createMessage(); - saajRequest.getMimeHeaders().addHeader(HEADER_NAME, HEADER_VALUE); + saajRequest.getMimeHeaders().addHeader(REQUEST_HEADER_NAME, REQUEST_HEADER_VALUE); transformer.transform(new StringSource(REQUEST), new DOMResult(saajRequest.getSOAPBody())); SaajSoapMessage request = new SaajSoapMessage(saajRequest); MessageContext context = new DefaultMessageContext(request, new SaajSoapMessageFactory(messageFactory)); messageSender.sendAndReceive(context); assertXMLEqual(EXPECTED_SOAP_REQUEST, receivedRequest.toString()); - assertEquals("Invalid header value received", HEADER_VALUE, receivedHeader); + assertEquals("Invalid header value received on server side", REQUEST_HEADER_VALUE, receivedHeader); assertTrue("No response", context.hasResponse()); + SaajSoapMessage response = (SaajSoapMessage) context.getResponse(); + SOAPMessage saajResponse = response.getSaajMessage(); + assertNotNull("No header value received on client side", + saajResponse.getMimeHeaders().getHeader(RESPONSE_HEADER_NAME)); + assertEquals("Invalid header value received on client side", RESPONSE_HEADER_VALUE, + saajResponse.getMimeHeaders().getHeader(RESPONSE_HEADER_NAME)[0]); ByteArrayOutputStream os = new ByteArrayOutputStream(); - context.getResponse().writeTo(os); + response.writeTo(os); assertXMLEqual(RESPONSE, os.toString("UTF-8")); } @@ -125,11 +135,12 @@ public abstract class AbstractHttpWebServiceMessageSenderTestCase extends XMLTes StringResult requestResult = new StringResult(); transformer.transform(new StreamSource(req.getInputStream()), requestResult); receivedRequest = requestResult.toString(); - receivedHeader = ((HttpServletRequest) req).getHeader(HEADER_NAME); + receivedHeader = ((HttpServletRequest) req).getHeader(REQUEST_HEADER_NAME); HttpServletResponse httpServletResponse = (HttpServletResponse) res; httpServletResponse.setStatus(HttpServletResponse.SC_OK); httpServletResponse.addHeader("Content-Type", "text/xml"); + httpServletResponse.addHeader(RESPONSE_HEADER_NAME, RESPONSE_HEADER_VALUE); FileCopyUtils.copy(RESPONSE.getBytes("UTF-8"), res.getOutputStream()); } catch (TransformerException ex) { @@ -145,7 +156,7 @@ public abstract class AbstractHttpWebServiceMessageSenderTestCase extends XMLTes StringResult requestResult = new StringResult(); transformer.transform(new StreamSource(req.getInputStream()), requestResult); receivedRequest = requestResult.toString(); - receivedHeader = ((HttpServletRequest) req).getHeader(HEADER_NAME); + receivedHeader = ((HttpServletRequest) req).getHeader(REQUEST_HEADER_NAME); HttpServletResponse httpServletResponse = (HttpServletResponse) res; httpServletResponse.setStatus(HttpServletResponse.SC_NO_CONTENT);