olegk 2003/10/20 15:17:12 Modified: httpclient/src/examples CookieDemoApp.java FormLoginDemo.java httpclient/src/java/org/apache/commons/httpclient Cookie.java HttpMethodBase.java HttpState.java httpclient/src/java/org/apache/commons/httpclient/cookie CookiePolicy.java httpclient/src/java/org/apache/commons/httpclient/params DefaultHttpParamsFactory.java HttpMethodParams.java httpclient/src/test/org/apache/commons/httpclient TestCookie.java TestWebappCookie.java Log: PR# 21151 (Customizable Cookie Policy) The patch extends CookiePolicy class with a custom cookie specification plug-in mechanism. Contributed by Oleg Kalnichevski Reviewed by Michael Becke Revision Changes Path 1.12 +12 -10 jakarta-commons/httpclient/src/examples/CookieDemoApp.java Index: CookieDemoApp.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/examples/CookieDemoApp.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- CookieDemoApp.java 3 Oct 2003 20:57:35 -0000 1.11 +++ CookieDemoApp.java 20 Oct 2003 22:17:11 -0000 1.12 @@ -108,24 +108,26 @@ Cookie mycookie = new Cookie(".foobar.com", "mycookie", "stuff", "/", null, false); // and then added to your HTTP state instance initialState.addCookie(mycookie); + + // Get HTTP client instance + HttpClient httpclient = new HttpClient(); + httpclient.getParams().setConnectionTimeout(30000); + httpclient.setState(initialState); + // RFC 2101 cookie management spec is used per default // to parse, validate, format & match cookies - initialState.setCookiePolicy(CookiePolicy.RFC2109); + httpclient.getParams().setCookiePolicy(CookiePolicy.RFC_2109); // A different cookie management spec can be selected // when desired -// initialState.setCookiePolicy(CookiePolicy.NETSCAPE_DRAFT); + //httpclient.getParams().setCookiePolicy(CookiePolicy.NETSCAPE); // Netscape Cookie Draft spec is provided for completeness // You would hardly want to use this spec in real life situations -// initialState.setCookiePolicy(CookiePolicy.COMPATIBILITY); + //httppclient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); // Compatibility policy is provided in order to mimic cookie // management of popular web browsers that is in some areas // not 100% standards compliant - // Get HTTP client instance - HttpClient httpclient = new HttpClient(); - httpclient.getParams().setConnectionTimeout(30000); - httpclient.setState(initialState); // Get HTTP GET method GetMethod httpget = new GetMethod(strURL); // Execute HTTP GET 1.3 +1 -1 jakarta-commons/httpclient/src/examples/FormLoginDemo.java Index: FormLoginDemo.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/examples/FormLoginDemo.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- FormLoginDemo.java 17 Jul 2003 21:57:42 -0000 1.2 +++ FormLoginDemo.java 20 Oct 2003 22:17:11 -0000 1.3 @@ -84,7 +84,7 @@ HttpClient client = new HttpClient(); client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT, "http"); - client.getState().setCookiePolicy(CookiePolicy.COMPATIBILITY); + client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); // 'developer.java.sun.com' has cookie compliance problems // Their session cookie's domain attribute is in violation of the RFC2109 // We have to resort to using compatibility cookie policy 1.40 +11 -6 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Cookie.java Index: Cookie.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Cookie.java,v retrieving revision 1.39 retrieving revision 1.40 diff -u -r1.39 -r1.40 --- Cookie.java 5 Jul 2003 22:31:20 -0000 1.39 +++ Cookie.java 20 Oct 2003 22:17:11 -0000 1.40 @@ -468,8 +468,13 @@ * @return a string suitable for sending in a Cookie header. */ public String toExternalForm() { - return CookiePolicy.getSpecByVersion( - getVersion()).formatCookie(this); + CookieSpec spec = null; + if (getVersion() > 0) { + spec = CookiePolicy.getDefaultSpec(); + } else { + spec = CookiePolicy.getCookieSpec(CookiePolicy.NETSCAPE); + } + return spec.formatCookie(this); } /** 1.184 +6 -6 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java Index: HttpMethodBase.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v retrieving revision 1.183 retrieving revision 1.184 diff -u -r1.183 -r1.184 --- HttpMethodBase.java 19 Oct 2003 18:46:02 -0000 1.183 +++ HttpMethodBase.java 20 Oct 2003 22:17:12 -0000 1.184 @@ -1156,7 +1156,7 @@ // Clean up the cookie headers removeRequestHeader("cookie"); - CookieSpec matcher = CookiePolicy.getSpecByPolicy(state.getCookiePolicy()); + CookieSpec matcher = CookiePolicy.getCookieSpec(this.params.getCookiePolicy()); Cookie[] cookies = matcher.match(conn.getHost(), conn.getPort(), getPath(), conn.isSecure(), state.getCookies()); if ((cookies != null) && (cookies.length > 0)) { @@ -1487,7 +1487,7 @@ headers = getResponseHeaderGroup().getHeaders("set-cookie"); } - CookieSpec parser = CookiePolicy.getSpecByPolicy(state.getCookiePolicy()); + CookieSpec parser = CookiePolicy.getCookieSpec(this.params.getCookiePolicy()); for (int i = 0; i < headers.length; i++) { Header header = headers[i]; Cookie[] cookies = null; 1.28 +15 -15 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpState.java Index: HttpState.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpState.java,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- HttpState.java 16 Sep 2003 21:29:45 -0000 1.27 +++ HttpState.java 20 Oct 2003 22:17:12 -0000 1.28 @@ -124,15 +124,11 @@ * Array of [EMAIL PROTECTED] Cookie cookies} that this HTTP state contains. */ private ArrayList cookies = new ArrayList(); - /** - * Cookie policy that applies to this HTTP state. Default is - * [EMAIL PROTECTED] CookiePolicy#RFC2109} - */ - private int cookiePolicy = CookiePolicy.RFC2109; private boolean preemptive = false; - // -------------------------------------------------------- Class Variables + private int cookiePolicy = 0; + // -------------------------------------------------------- Class Variables /** Log object for this class. */ private static final Log LOG = LogFactory.getLog(HttpState.class); @@ -141,11 +137,7 @@ * Default constructor. */ public HttpState() { - super(); - - this.cookiePolicy = CookiePolicy.getDefaultPolicy(); - } // ------------------------------------------------------------- Properties @@ -290,10 +282,14 @@ * HTTP state. * * @return The [EMAIL PROTECTED] CookiePolicy cookie policy}. + * + * @deprecated Use + * [EMAIL PROTECTED] org.apache.commons.httpclient.params.HttpMethodParams#getCookiePolicy()}, + * [EMAIL PROTECTED] HttpMethod#getParams()}. */ public int getCookiePolicy() { - return this.cookiePolicy; + return CookiePolicy.getDefaultPolicy(); } @@ -338,6 +334,10 @@ * [EMAIL PROTECTED] CookiePolicy#RFC2109}. * * @param policy new [EMAIL PROTECTED] CookiePolicy cookie policy} + * + * @deprecated + * Use [EMAIL PROTECTED] org.apache.commons.httpclient.params.HttpMethodParams#setCookiePolicy(String)}, + * [EMAIL PROTECTED] HttpMethod#getParams()}. */ public void setCookiePolicy(int policy) { 1.9 +133 -41 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/cookie/CookiePolicy.java Index: CookiePolicy.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/cookie/CookiePolicy.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- CookiePolicy.java 11 Oct 2003 19:46:51 -0000 1.8 +++ CookiePolicy.java 20 Oct 2003 22:17:12 -0000 1.9 @@ -63,6 +63,10 @@ package org.apache.commons.httpclient.cookie; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -73,14 +77,11 @@ * can be chosen when appropriate or set default when desired * <p>The following specifications are provided: * <ul> - * <li><tt>COMPATIBILITY</tt>: compatible with the common cookie management - * practices * (even if they are not 100% standards compliant) - * <li><tt>NETSCAPE_DRAFT</tt>: Netscape cookie draft compliant - * <li><tt>RFC2109</tt>: RFC2109 compliant (default) + * <li><tt>BROWSER_COMPATIBILITY</tt>: compatible with the common cookie + * management practices (even if they are not 100% standards compliant) + * <li><tt>NETSCAPE</tt>: Netscape cookie draft compliant + * <li><tt>RFC_2109</tt>: RFC2109 compliant (default) * </ul> - * <p>Default policy can be set on JVM start-up through the system property - * <tt>"apache.commons.httpclient.cookiespec"</tt>. Recognized values: - * <tt>COMPATIBILITY</tt>, <tt>NETSCAPE_DRAFT</tt>, <tt>RFC2109</tt>. * * @author <a href="mailto:[EMAIL PROTECTED]">Oleg Kalnichevski</a> * @author <a href="mailto:[EMAIL PROTECTED]">Mike Bowler</a> @@ -89,52 +90,125 @@ */ public abstract class CookiePolicy { - /** cookiespec system property. */ - private static final String SYSTEM_PROPERTY = - "apache.commons.httpclient.cookiespec"; + private static Map SPECS = Collections.synchronizedMap(new HashMap()); + + /** + * The policy that provides high degree of compatibilty + * with common cookie management of popular HTTP agents. + */ + public static final String BROWSER_COMPATIBILITY = "compatibility"; + + /** + * The Netscape cookie draft compliant policy. + */ + public static final String NETSCAPE = "netscape"; + /** + * The RFC 2109 compliant policy. + */ + public static final String RFC_2109 = "rfc2109"; + + /** + * The default cookie policy. + */ + public static final String DEFAULT = "default"; + + static { + CookiePolicy.registerCookieSpec(DEFAULT, new RFC2109Spec()); + CookiePolicy.registerCookieSpec(RFC_2109, new RFC2109Spec()); + CookiePolicy.registerCookieSpec(BROWSER_COMPATIBILITY, new CookieSpecBase()); + CookiePolicy.registerCookieSpec(NETSCAPE, new NetscapeDraftSpec()); + } + /** * The <tt>COMPATIBILITY</tt> policy provides high compatibilty * with common cookie management of popular HTTP agents. + * + * @deprecated Use [EMAIL PROTECTED] #BROWSER_COMPATIBILITY} */ public static final int COMPATIBILITY = 0; - /** The <tt>NETSCAPE_DRAFT</tt> Netscape draft compliant policy. */ + /** + * The <tt>NETSCAPE_DRAFT</tt> Netscape draft compliant policy. + * + * @deprecated Use [EMAIL PROTECTED] #NETSCAPE} + */ public static final int NETSCAPE_DRAFT = 1; - /** The <tt>RFC2109</tt> RFC 2109 compliant policy. */ + /** + * The <tt>RFC2109</tt> RFC 2109 compliant policy. + * + * @deprecated Use [EMAIL PROTECTED] #RFC_2109} + */ public static final int RFC2109 = 2; - /** The default cookie policy. */ + /** + * The default cookie policy. + * + * @deprecated Use [EMAIL PROTECTED] #DEFAULT} + */ private static int defaultPolicy = RFC2109; /** Log object. */ protected static final Log LOG = LogFactory.getLog(CookiePolicy.class); - static { - String s = null; - try { - s = System.getProperty(SYSTEM_PROPERTY); - } catch (SecurityException ignore) { - } - if ("COMPATIBILITY".equalsIgnoreCase(s)) { - setDefaultPolicy(COMPATIBILITY); - } else if ("NETSCAPE_DRAFT".equalsIgnoreCase(s)) { - setDefaultPolicy(NETSCAPE_DRAFT); - } else if ("RFC2109".equalsIgnoreCase(s)) { - setDefaultPolicy(RFC2109); - } else { - if (s != null) { - LOG.warn("Unrecognized cookiespec property '" + s - + "' - using default"); - } - setDefaultPolicy(defaultPolicy); + /** + * Registers a new [EMAIL PROTECTED] CookieSpec cookie specification} with the given identifier. + * If a specification with the given ID already exists it will be overridden. + * This ID is the same one used to retrieve the [EMAIL PROTECTED] CookieSpec cookie specification} + * from [EMAIL PROTECTED] #getCookieSpec(String)}. + * + * @param id the identifier for this specification + * @param spec the [EMAIL PROTECTED] CookieSpec cookie specification} to register + * + * @see #getCookieSpec(String) + */ + public static void registerCookieSpec(final String id, final CookieSpec spec) { + if (id == null) { + throw new IllegalArgumentException("Id may not be null"); + } + if (spec == null) { + throw new IllegalArgumentException("Cookie spec may not be null"); } + SPECS.put(id, spec); + } + + /** + * Unregisters the [EMAIL PROTECTED] CookieSpec cookie specification} with the given ID. + * + * @param id the ID of the [EMAIL PROTECTED] CookieSpec cookie specification} to unregister + */ + public static void unregisterCookieSpec(final String id) { + if (id == null) { + throw new IllegalArgumentException("Id may not be null"); + } + SPECS.remove(id); } /** + * Gets the [EMAIL PROTECTED] CookieSpec cookie specification} with the given ID. + * + * @param id the [EMAIL PROTECTED] CookieSpec cookie specification} ID + * + * @return [EMAIL PROTECTED] CookieSpec cookie specification} + * + * @throws IllegalStateException if a policy with the ID cannot be found + */ + public static CookieSpec getCookieSpec(final String id) + throws IllegalStateException { + + if (id == null) { + throw new IllegalArgumentException("Id may not be null"); + } + return (CookieSpec)SPECS.get(id); + } + + /** * @return default cookie policy * <tt>(COMPATIBILITY | NETSCAPE_DRAFT | RFC2109)</tt> + * + * @deprecated Use [EMAIL PROTECTED] CookiePolicy#getCookieSpec(String)} + * @see #DEFAULT */ public static int getDefaultPolicy() { return defaultPolicy; @@ -144,16 +218,19 @@ /** * @param policy new default cookie policy * <tt>(COMPATIBILITY | NETSCAPE_DRAFT | RFC2109)</tt> + * + * @deprecated Use [EMAIL PROTECTED] CookiePolicy#registerCookieSpec(String, CookieSpec)} */ public static void setDefaultPolicy(int policy) { defaultPolicy = policy; } - /** * @param policy cookie policy to get the CookieSpec for * @return cookie specification interface for the given policy * <tt>(COMPATIBILITY | NETSCAPE_DRAFT | RFC2109)</tt> + * + * @deprecated Use [EMAIL PROTECTED] CookiePolicy#getCookieSpec(String)} */ public static CookieSpec getSpecByPolicy(int policy) { switch(policy) { @@ -164,16 +241,27 @@ case RFC2109: return new RFC2109Spec(); default: - return getSpecByPolicy(defaultPolicy); + return getDefaultSpec(); } } /** - * @return default cookie specification interface + * Returns [EMAIL PROTECTED] CookieSpec cookie specification} registered as [EMAIL PROTECTED] #DEFAULT}. + * If no default [EMAIL PROTECTED] CookieSpec cookie specification} has been registered, + * [EMAIL PROTECTED] RFC2109Spec RFC2109 specification} is returned. + * + * @return default [EMAIL PROTECTED] CookieSpec cookie specification} + * + * @see #DEFAULT */ public static CookieSpec getDefaultSpec() { - return getSpecByPolicy(defaultPolicy); + try { + return getCookieSpec(DEFAULT); + } catch (IllegalStateException e) { + LOG.warn("Default cookie policy is not registered"); + return new RFC2109Spec(); + } } @@ -182,14 +270,16 @@ * * <p>Supported versions: * <ul> - * <li><tt>version 0</tt> corresponds to the NETSCAPE_DRAFT - * <li><tt>version 1</tt> corresponds to the RFC2109 + * <li><tt>version 0</tt> corresponds to the Netscape draft + * <li><tt>version 1</tt> corresponds to the RFC 2109 * <li>Any other cookie value coresponds to the default spec * <ul> * * @param ver the cookie version to get the spec for * @return cookie specification interface intended for processing - * cookies with the given version + * cookies with the given version + * + * @deprecated Use [EMAIL PROTECTED] CookiePolicy#getCookieSpec(String)} */ public static CookieSpec getSpecByVersion(int ver) { switch(ver) { @@ -205,6 +295,8 @@ /** * @return cookie specification interface that provides high compatibilty * with common cookie management of popular HTTP agents + * + * @deprecated Use [EMAIL PROTECTED] CookiePolicy#getCookieSpec(String)} */ public static CookieSpec getCompatibilitySpec() { return getSpecByPolicy(COMPATIBILITY); 1.4 +21 -3 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/params/DefaultHttpParamsFactory.java Index: DefaultHttpParamsFactory.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/params/DefaultHttpParamsFactory.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- DefaultHttpParamsFactory.java 11 Oct 2003 19:46:51 -0000 1.3 +++ DefaultHttpParamsFactory.java 20 Oct 2003 22:17:12 -0000 1.4 @@ -68,6 +68,7 @@ import org.apache.commons.httpclient.HttpVersion; import org.apache.commons.httpclient.SimpleHttpConnectionManager; +import org.apache.commons.httpclient.cookie.CookiePolicy; import org.apache.commons.httpclient.util.DateParser; @@ -100,6 +101,7 @@ params.setParameter(HttpMethodParams.USER_AGENT, "Jakarta Commons-HttpClient/2.1m1"); params.setVersion(HttpVersion.HTTP_1_1); params.setConnectionManagerClass(SimpleHttpConnectionManager.class); + params.setCookiePolicy(CookiePolicy.RFC_2109); ArrayList datePatterns = new ArrayList(); datePatterns.addAll( @@ -149,6 +151,22 @@ } } + // TODO: To be removed. Provided for backward compatibility + String defaultCookiePolicy = null; + try { + defaultCookiePolicy = System.getProperty("apache.commons.httpclient.cookiespec"); + } catch (SecurityException ignore) { + } + if (defaultCookiePolicy != null) { + if ("COMPATIBILITY".equalsIgnoreCase(defaultCookiePolicy)) { + params.setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); + } else if ("NETSCAPE_DRAFT".equalsIgnoreCase(defaultCookiePolicy)) { + params.setCookiePolicy(CookiePolicy.NETSCAPE); + } else if ("RFC2109".equalsIgnoreCase(defaultCookiePolicy)) { + params.setCookiePolicy(CookiePolicy.RFC_2109); + } + } + return params; } 1.4 +54 -4 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/params/HttpMethodParams.java Index: HttpMethodParams.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/params/HttpMethodParams.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- HttpMethodParams.java 3 Oct 2003 20:57:36 -0000 1.3 +++ HttpMethodParams.java 20 Oct 2003 22:17:12 -0000 1.4 @@ -64,6 +64,7 @@ package org.apache.commons.httpclient.params; import org.apache.commons.httpclient.HttpVersion; +import org.apache.commons.httpclient.cookie.CookiePolicy; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -86,7 +87,9 @@ /** * Defines the content of the <tt>User-Agent</tt> header used by * [EMAIL PROTECTED] org.apache.commons.httpclient.HttpMethod HTTP methods}. + * <p> * This parameter expects a value of type [EMAIL PROTECTED] String}. + * </p> */ public static final String USER_AGENT = "http.useragent"; @@ -94,35 +97,45 @@ * Defines the [EMAIL PROTECTED] HttpVersion HTTP protocol version} used by * [EMAIL PROTECTED] org.apache.commons.httpclient.HttpMethod HTTP methods} per * default. + * <p> * This parameter expects a value of type [EMAIL PROTECTED] HttpVersion}. + * </p> */ public static final String PROTOCOL_VERSION = "http.protocol.version"; /** * Defines whether [EMAIL PROTECTED] org.apache.commons.httpclient.HttpMethod HTTP methods} should * reject ambiguous [EMAIL PROTECTED] org.apache.commons.httpclient.StatusLine HTTP status line}. + * <p> * This parameter expects a value of type [EMAIL PROTECTED] Boolean}. + * </p> */ public static final String UNAMBIGUOUS_STATUS_LINE = "http.protocol.unambiguous-statusline"; /** * Defines whether [EMAIL PROTECTED] org.apache.commons.httpclient.Cookie cookies} should be put on * a single [EMAIL PROTECTED] org.apache.commons.httpclient.Header response header}. + * <p> * This parameter expects a value of type [EMAIL PROTECTED] Boolean}. + * </p> */ public static final String SINGLE_COOKIE_HEADER = "http.protocol.single-cookie-header"; /** * Defines whether responses with an invalid <tt>Transfer-Encoding</tt> header should be * rejected. + * <p> * This parameter expects a value of type [EMAIL PROTECTED] Boolean}. + * </p> */ public static final String STRICT_TRANSFER_ENCODING = "http.protocol.strict-transfer-encoding"; /** * Defines whether the content body sent in response to * [EMAIL PROTECTED] org.apache.commons.httpclient.methods.HeadMethod} should be rejected. + * <p> * This parameter expects a value of type [EMAIL PROTECTED] Boolean}. + * </p> */ public static final String REJECT_HEAD_BODY = "http.protocol.reject-head-body"; @@ -131,7 +144,9 @@ * [EMAIL PROTECTED] org.apache.commons.httpclient.methods.HeadMethod HEAD method} from a * non-compliant server. If the parameter is not set or set to <tt>-1</tt> non-compliant * response body check is disabled. + * <p> * This parameter expects a value of type [EMAIL PROTECTED] Integer}. + * </p> */ public static final String HEAD_BODY_CHECK_TIMEOUT = "http.protocol.head-body-timeout"; @@ -164,6 +179,14 @@ public static final String USE_EXPECT_CONTINUE = "http.protocol.expect-continue"; /** + * Defines [EMAIL PROTECTED] CookiePolicy cookie policy} to be used for cookie management. + * <p> + * This parameter expects a value of type [EMAIL PROTECTED] String}. + * </p> + */ + public static final String COOKIE_POLICY = "http.protocol.cookie-policy"; + + /** * Creates a new collection of parameters with the collection returned * by [EMAIL PROTECTED] #getDefaultParams()} as a parent. The collection will defer * to its parent for a default value if a particular parameter is not @@ -214,6 +237,33 @@ */ public void setVersion(HttpVersion version) { setParameter(PROTOCOL_VERSION, version); + } + + + /** + * Returns [EMAIL PROTECTED] CookiePolicy cookie policy} to be used by the + * [EMAIL PROTECTED] org.apache.commons.httpclient.HttpMethod HTTP methods} + * this collection of parameters applies to. + * + * @return [EMAIL PROTECTED] CookiePolicy cookie policy} + */ + public String getCookiePolicy() { + Object param = getParameter(COOKIE_POLICY); + if (param == null) { + return CookiePolicy.DEFAULT; + } + return (String)param; + } + + /** + * Assigns the [EMAIL PROTECTED] CookiePolicy cookie policy} to be used by the + * [EMAIL PROTECTED] org.apache.commons.httpclient.HttpMethod HTTP methods} + * this collection of parameters applies to. + * + * @param policy the [EMAIL PROTECTED] CookiePolicy cookie policy} + */ + public void setCookiePolicy(String policy) { + setParameter(COOKIE_POLICY, policy); } 1.24 +23 -23 jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestCookie.java Index: TestCookie.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestCookie.java,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- TestCookie.java 19 Jul 2003 08:46:59 -0000 1.23 +++ TestCookie.java 20 Oct 2003 22:17:12 -0000 1.24 @@ -120,10 +120,10 @@ // ------------------------------------------------------- Helper Methods - private static Cookie[] cookieParse(int policy, String host, String path, boolean isSecure, Header setHeader) + private static Cookie[] cookieParse(String policy, String host, String path, boolean isSecure, Header setHeader) throws MalformedCookieException { - CookieSpec parser = CookiePolicy.getSpecByPolicy(policy); + CookieSpec parser = CookiePolicy.getCookieSpec(policy); Cookie[] cookies = parser.parse(host, DEFAULT_PORT, path, isSecure, setHeader); if (cookies != null) { @@ -139,27 +139,27 @@ private static Cookie[] cookieParse(String host, String path, boolean isSecure, Header setHeader) throws MalformedCookieException { - return cookieParse(CookiePolicy.RFC2109, host, path, isSecure, setHeader); + return cookieParse(CookiePolicy.RFC_2109, host, path, isSecure, setHeader); } private static Cookie[] cookieParse(String host, String path, Header setHeader) throws MalformedCookieException { - return cookieParse(CookiePolicy.RFC2109, host, path, false, setHeader); + return cookieParse(CookiePolicy.RFC_2109, host, path, false, setHeader); } private static Cookie[] netscapeCcookieParse(String host, String path, Header setHeader) throws MalformedCookieException { - return cookieParse(CookiePolicy.NETSCAPE_DRAFT, host, path, false, setHeader); + return cookieParse(CookiePolicy.NETSCAPE, host, path, false, setHeader); } - public static Header cookieCreateHeader(int policy, String domain, int port, String path, boolean secure, Cookie[] cookies) + public static Header cookieCreateHeader(String policy, String domain, int port, String path, boolean secure, Cookie[] cookies) { - CookieSpec matcher = CookiePolicy.getSpecByPolicy(policy); + CookieSpec matcher = CookiePolicy.getCookieSpec(policy); cookies = matcher.match(domain, port, path, secure, cookies); if ((cookies != null) && (cookies.length > 0)) { @@ -173,20 +173,20 @@ public static Header cookieCreateHeader(String domain, int port, String path, boolean secure, Cookie[] cookies) { - return cookieCreateHeader(CookiePolicy.RFC2109, domain, port, path, secure, cookies); + return cookieCreateHeader(CookiePolicy.RFC_2109, domain, port, path, secure, cookies); } - public boolean cookieMatch(int policy, String domain, int port, String path, boolean secure, Cookie cookie) + public boolean cookieMatch(String policy, String domain, int port, String path, boolean secure, Cookie cookie) { - CookieSpec matcher = CookiePolicy.getSpecByPolicy(policy); + CookieSpec matcher = CookiePolicy.getCookieSpec(policy); return matcher.match(domain, port, path, secure, cookie); } public boolean cookieMatch(String domain, int port, String path, boolean secure, Cookie cookie) { - return cookieMatch(CookiePolicy.RFC2109, domain, port, path, secure, cookie); + return cookieMatch(CookiePolicy.RFC_2109, domain, port, path, secure, cookie); } // ------------------------------------------------------------ Parse1 Test @@ -886,7 +886,7 @@ Header setCookie = new Header( "Set-Cookie", "name=value; path=/; domain=.mydomain.com"); try { - CookieSpec parser = CookiePolicy.getSpecByPolicy(CookiePolicy.COMPATIBILITY); + CookieSpec parser = CookiePolicy.getCookieSpec(CookiePolicy.BROWSER_COMPATIBILITY); Cookie[] cookies = parser.parse("myhost.mydomain.com", 80, "/", false, setCookie ); parser.validate("myhost.mydomain.com", 80, "/", false, cookies[0]); String s = parser.formatCookie(cookies[0]); @@ -906,7 +906,7 @@ Header setCookie = new Header( "Set-Cookie", "name=value; path=/; domain=.mydomain.com"); try { - CookieSpec parser = CookiePolicy.getSpecByPolicy(CookiePolicy.NETSCAPE_DRAFT); + CookieSpec parser = CookiePolicy.getCookieSpec(CookiePolicy.NETSCAPE); Cookie[] cookies = parser.parse("myhost.mydomain.com", 80, "/", false, setCookie ); parser.validate("myhost.mydomain.com", 80, "/", false, cookies[0]); String s = parser.formatCookie(cookies[0]); @@ -924,7 +924,7 @@ */ public void testRFC2109CookieFormatting() { - CookieSpec parser = CookiePolicy.getSpecByPolicy(CookiePolicy.RFC2109); + CookieSpec parser = CookiePolicy.getCookieSpec(CookiePolicy.RFC_2109); Header setCookie = null; Cookie[] cookies = null; try { @@ -954,7 +954,7 @@ */ public void testNetscapeCookieExpireAttribute() { - CookieSpec parser = CookiePolicy.getSpecByPolicy(CookiePolicy.NETSCAPE_DRAFT); + CookieSpec parser = CookiePolicy.getCookieSpec(CookiePolicy.NETSCAPE); Header setCookie = null; Cookie[] cookies = null; try { @@ -991,11 +991,11 @@ CookieSpec parser = null; String s = null; - parser = CookiePolicy.getSpecByPolicy(CookiePolicy.COMPATIBILITY); + parser = CookiePolicy.getCookieSpec(CookiePolicy.BROWSER_COMPATIBILITY); s = parser.formatCookie(cookie); assertEquals("name=", s); - parser = CookiePolicy.getSpecByPolicy(CookiePolicy.RFC2109); + parser = CookiePolicy.getCookieSpec(CookiePolicy.RFC_2109); s = parser.formatCookie(cookie); assertEquals("$Version=0; name=; $Domain=.whatever.com; $Path=/", s); } @@ -1009,7 +1009,7 @@ Cookie[] cookies = null; Header header = new Header("Set-Cookie", "a=b,c"); - parser = CookiePolicy.getSpecByPolicy(CookiePolicy.RFC2109); + parser = CookiePolicy.getCookieSpec(CookiePolicy.RFC_2109); cookies = parser.parse("localhost", 80, "/", false, header); assertEquals("number of cookies", 2, cookies.length); assertEquals("a", cookies[0].getName()); @@ -1017,7 +1017,7 @@ assertEquals("c", cookies[1].getName()); assertEquals(null, cookies[1].getValue()); - parser = CookiePolicy.getSpecByPolicy(CookiePolicy.NETSCAPE_DRAFT); + parser = CookiePolicy.getCookieSpec(CookiePolicy.NETSCAPE); cookies = parser.parse("localhost", 80, "/", false, header); assertEquals("number of cookies", 1, cookies.length); assertEquals("a", cookies[0].getName()); 1.13 +7 -6 jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestWebappCookie.java Index: TestWebappCookie.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestWebappCookie.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- TestWebappCookie.java 3 Oct 2003 20:57:36 -0000 1.12 +++ TestWebappCookie.java 20 Oct 2003 22:17:12 -0000 1.13 @@ -716,8 +716,8 @@ { - client.getState().setCookiePolicy(CookiePolicy.RFC2109); GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write"); + method.getParams().setCookiePolicy(CookiePolicy.RFC_2109); method.setQueryString("simple=set"); try { @@ -749,8 +749,8 @@ } { - client.getState().setCookiePolicy(CookiePolicy.COMPATIBILITY); GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write"); + method.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); method.setQueryString("simple=set"); try { @@ -767,6 +767,7 @@ assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue()); GetMethod method2 = new GetMethod("/" + getWebappContext() + "/cookie/read"); + method2.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); try { client.executeMethod(method2);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]