This is an automated email from the ASF dual-hosted git repository. dkulp pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/master by this push: new e4da23a [CXF-7720] Bunch of issues with case senstive Set-Cookie headers e4da23a is described below commit e4da23a719581d5a657b1c4e99fa41a0aca393e5 Author: Daniel Kulp <dk...@apache.org> AuthorDate: Thu Apr 26 09:50:31 2018 -0400 [CXF-7720] Bunch of issues with case senstive Set-Cookie headers --- .../org/apache/cxf/transport/http/Headers.java | 28 ++++++++++++---------- .../org/apache/cxf/systest/jaxrs/BookStore.java | 4 ++-- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java index df11086..952cc57 100644 --- a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java @@ -28,12 +28,10 @@ import java.util.Collections; import java.util.Date; import java.util.Enumeration; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; import java.util.TimeZone; import java.util.TreeMap; import java.util.logging.Level; @@ -78,14 +76,7 @@ public class Headers { /** * Known HTTP headers whose values have to be represented as individual HTTP headers */ - private static final Set<String> HTTP_HEADERS_SINGLE_VALUE_ONLY; - private static final String USER_AGENT; - static { - HTTP_HEADERS_SINGLE_VALUE_ONLY = new HashSet<>(); - HTTP_HEADERS_SINGLE_VALUE_ONLY.add(HTTP_HEADERS_SETCOOKIE); - HTTP_HEADERS_SINGLE_VALUE_ONLY.add(HTTP_HEADERS_LINK); - USER_AGENT = initUserAgent(); - } + private static final String USER_AGENT = initUserAgent(); private final Message message; private final Map<String, List<String>> headers; @@ -294,7 +285,16 @@ public class Headers { headers.clear(); for (Entry<String, List<String>> entry : origHeaders.entrySet()) { if (entry.getKey() != null) { - headers.put(HttpHeaderHelper.getHeaderKey(entry.getKey()), entry.getValue()); + String key = HttpHeaderHelper.getHeaderKey(entry.getKey()); + List<String> old = headers.get(key); + if (old != null) { + List<String> nl = new ArrayList<>(old.size() + entry.getValue().size()); + nl.addAll(old); + nl.addAll(entry.getValue()); + headers.put(key, nl); + } else { + headers.put(key, entry.getValue()); + } } } } @@ -495,6 +495,10 @@ public class Headers { return true; } + private boolean isSingleHeader(String header) { + return HTTP_HEADERS_SETCOOKIE.equalsIgnoreCase(header) || HTTP_HEADERS_LINK.equalsIgnoreCase(header); + } + /** * Copy the response headers into the response. * @@ -514,7 +518,7 @@ public class Headers { String header = entry.getKey(); List<?> headerList = entry.getValue(); - if (addHeaders || HTTP_HEADERS_SINGLE_VALUE_ONLY.contains(header)) { + if (addHeaders || isSingleHeader(header)) { for (int i = 0; i < headerList.size(); i++) { Object headerObject = headerList.get(i); if (headerObject != null) { diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java index 1749179..fd218c4 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java @@ -525,8 +525,8 @@ public class BookStore { @Path("setmanycookies") public Response setTwoCookies() { return Response.ok().header("Set-Cookie", "JSESSIONID=0475F7F30A26E5B0C15D69; Path=/") - .header("Set-Cookie", "COOKIETWO=dummy; Expires=Sat, 20-Nov-2010 19:11:32 GMT; Path=/") - .header("Set-Cookie", "COOKIETWO=dummy2; expires=Sat, 20-Nov-2010 19:11:32 GMT; Path=/") + .header("Set-cookie", "COOKIETWO=dummy; Expires=Sat, 20-Nov-2010 19:11:32 GMT; Path=/") + .header("set-cookie", "COOKIETWO=dummy2; expires=Sat, 20-Nov-2010 19:11:32 GMT; Path=/") .build(); } -- To stop receiving notification emails like this one, please contact dk...@apache.org.