From 218e25c6c1165b5be7feafbce90936f7550e1e57 Mon Sep 17 00:00:00 2001 From: Greg Turnquist Date: Mon, 4 Apr 2016 21:28:56 -0500 Subject: [PATCH] SWS-950 Support RFC 7230 for HTTP headers Make HTTP headers handle case insensitivity. --- .../ws/transport/http/HttpUrlConnection.java | 18 ++++++++++++++---- ...erviceMessageSenderIntegrationTestCase.java | 7 ++++--- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/HttpUrlConnection.java b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/HttpUrlConnection.java index f461b2e6..3c70524c 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/HttpUrlConnection.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/HttpUrlConnection.java @@ -23,6 +23,7 @@ import java.net.HttpURLConnection; import java.net.URI; import java.net.URISyntaxException; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -39,6 +40,7 @@ import org.springframework.ws.transport.WebServiceConnection; * * @author Arjen Poutsma * @author Greg Turnquist + * @author Oddgeir Gitlestad * @since 1.0.0 */ public class HttpUrlConnection extends AbstractHttpSenderConnection { @@ -119,12 +121,20 @@ public class HttpUrlConnection extends AbstractHttpSenderConnection { @Override public Iterator getResponseHeaders(String name) throws IOException { - Map> mapHeader = connection.getHeaderFields(); - List listHeaderValues = mapHeader.get(name); - if (listHeaderValues == null) { + Map> headersListMappedByLowerCaseName = new HashMap<>(); + + for (String key : connection.getHeaderFields().keySet()) { + if (key != null) { + headersListMappedByLowerCaseName.put(key.toLowerCase(), connection.getHeaderFields().get(key)); + } + } + + List headerValues = headersListMappedByLowerCaseName.get(name.toLowerCase()); + + if (headerValues == null) { return Collections.emptyList().iterator(); } else { - return listHeaderValues.iterator(); + return headerValues.iterator(); } } diff --git a/spring-ws-core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderIntegrationTestCase.java b/spring-ws-core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderIntegrationTestCase.java index 0baa5c3e..15cbaa03 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderIntegrationTestCase.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderIntegrationTestCase.java @@ -36,11 +36,9 @@ import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; -import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; import org.custommonkey.xmlunit.XMLUnit; import org.junit.After; import org.junit.Assert; -import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; import org.mortbay.jetty.Server; @@ -59,6 +57,9 @@ import org.springframework.ws.transport.support.FreePortScanner; import org.springframework.xml.transform.StringResult; import org.springframework.xml.transform.StringSource; +import static org.custommonkey.xmlunit.XMLAssert.*; +import static org.junit.Assert.assertEquals; + public abstract class AbstractHttpWebServiceMessageSenderIntegrationTestCase { private Server jettyServer; @@ -283,7 +284,7 @@ public abstract class AbstractHttpWebServiceMessageSenderIntegrationTestCase { httpServletResponse.setStatus(responseStatus); if (response) { - httpServletResponse.setContentType("text/xml"); + httpServletResponse.addHeader("content-type", "text/xml"); if (contentLength != null) { httpServletResponse.setContentLength(contentLength); }