Description
org.apache.wink.server.internal.contexts.HttpHeadersImpl.getCookies() iterates over cookie headers but does not iterate over cookies within the header that are split by a semicolon.
As a result, only 1 cookie is ever returned. This affects using the javax.ws.rs.core.HttpHeaders interface, as well as the javax.ws.rs.CookieParam annotation.
The fix would be to split the cookie header on the semicolon character, as per RFC 2965. A fix implementation would be:
public Map<String, Cookie> getCookies() { if (cookies == null) { cookies = new HashMap<String, Cookie>(); List<String> cookiesHeaders = headers.get(HttpHeaders.COOKIE); if (cookiesHeaders != null) { for (String cookieHeader : cookiesHeaders) { if (cookieHeader != null){ for (String cookieText : split(cookieHeader, ';')){ Cookie cookie = Cookie.valueOf(cookieText); if (cookie != null){ cookies.put(cookie.getName(), cookie); } } } } } } return cookies; }
(using org.apache.commons.lang.StringUtils.split() )