package org.jboss.resteasy.util; import java.util.ArrayList; import java.util.List; import javax.ws.rs.core.Cookie; import org.jboss.resteasy.resteasy_jaxrs.i18n.Messages; public class CookieParser { public static List<Cookie> parseCookies(String cookieHeader) { if (cookieHeader == null) throw new IllegalArgumentException(Messages.MESSAGES.cookieHeaderValueNull()); try { List<Cookie> cookies = new ArrayList<Cookie>(); int version = 0; String domain = null; String path = null; String cookieName = null; String cookieValue = null; String parts[] = cookieHeader.split("[;,]"); for (String part : parts) { String nv[] = part.split("=", 2); String name = nv.length > 0 ? nv[0].trim() : ""; String value = nv.length > 1 ? nv[1].trim() : ""; if (value.startsWith("\"") && value.endsWith("\"") && value.length() > 1) value = value.substring(1, value.length() - 1); if (!name.startsWith("$")) { if (cookieName != null) { cookies.add(new Cookie(cookieName, cookieValue, path, domain, version)); cookieName = cookieValue = path = domain = null; } cookieName = name; cookieValue = value; } else if (name.equalsIgnoreCase("$Version")) { version = Integer.parseInt(value); } else if (name.equalsIgnoreCase("$Path")) { path = value; } else if (name.equalsIgnoreCase("$Domain")) { domain = value; } } if (cookieName != null) { cookies.add(new Cookie(cookieName, cookieValue, path, domain, version)); } return cookies; } catch (Exception ex) { throw new IllegalArgumentException(Messages.MESSAGES.failedToParseCookie(cookieHeader), ex); } } }