Author: olegk Date: Sun Apr 30 05:39:51 2006 New Revision: 398327 URL: http://svn.apache.org/viewcvs?rev=398327&view=rev Log: Refactored handling of the 'Discard', 'Comment', and 'CommentURL' cookie attributes
Modified: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2965Spec.java jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/test/org/apache/commons/httpclient/cookie/TestCookieRFC2965Spec.java Modified: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2965Spec.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2965Spec.java?rev=398327&r1=398326&r2=398327&view=diff ============================================================================== --- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2965Spec.java (original) +++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2965Spec.java Sun Apr 30 05:39:51 2006 @@ -95,6 +95,9 @@ registerAttribHandler(Cookie2.PORT, new Cookie2PortAttributeHandler()); registerAttribHandler(Cookie2.MAXAGE, new Cookie2MaxageAttributeHandler()); registerAttribHandler(Cookie2.SECURE, new CookieSecureAttributeHandler()); + registerAttribHandler(Cookie2.COMMENT, new CookieCommentAttributeHandler()); + registerAttribHandler(Cookie2.COMMENTURL, new CookieCommentUrlAttributeHandler()); + registerAttribHandler(Cookie2.DISCARD, new CookieDiscardAttributeHandler()); registerAttribHandler(Cookie2.VERSION, new Cookie2VersionAttributeHandler()); } @@ -279,11 +282,11 @@ * * @param attribute [EMAIL PROTECTED] org.apache.commons.httpclient.NameValuePair} cookie attribute from the * <tt>Set-Cookie2</tt> header. - * @param cookieParam [EMAIL PROTECTED] org.apache.commons.httpclient.Cookie} to be updated + * @param cookie [EMAIL PROTECTED] org.apache.commons.httpclient.Cookie} to be updated * @throws MalformedCookieException if an exception occurs during parsing */ public void parseAttribute( - final NameValuePair attribute, final Cookie cookieParam) + final NameValuePair attribute, final Cookie cookie) throws MalformedCookieException { if (attribute == null) { throw new IllegalArgumentException("Attribute may not be null."); @@ -291,35 +294,20 @@ if (attribute.getName() == null) { throw new IllegalArgumentException("Attribute Name may not be null."); } - if (cookieParam == null) { + if (cookie == null) { throw new IllegalArgumentException("Cookie may not be null."); } - if (!(cookieParam instanceof Cookie2)) { - throw new IllegalArgumentException("Expected Cookie2 cookies."); - } - Cookie2 cookie = (Cookie2) cookieParam; final String paramName = attribute.getName().toLowerCase(); final String paramValue = attribute.getValue(); CookieAttributeHandler handler = findAttribHandler(paramName); - if (handler != null) { - handler.parse(cookie, paramValue); - } - - // handle other cookie attributes - if (paramName.equals(Cookie2.COMMENT)) { - if (cookie.getComment() == null) - cookie.setComment(paramValue); - } else if (paramName.equals(Cookie2.COMMENTURL)) { - if (cookie.getCommentURL() == null) - cookie.setCommentURL(paramValue); - } else if (paramName.equals(Cookie2.DISCARD)) { - cookie.setDiscard(true); - } else { + if (handler == null) { // ignore unknown attribute-value pairs if (LOG.isDebugEnabled()) LOG.debug("Unrecognized cookie attribute: " + attribute.toString()); + } else { + handler.parse(cookie, paramValue); } } @@ -331,7 +319,7 @@ * @param path the path from which the [EMAIL PROTECTED] org.apache.commons.httpclient.Cookie} was received * @param secure <tt>true</tt> when the [EMAIL PROTECTED] org.apache.commons.httpclient.Cookie} was received using a * secure connection - * @param cookieParam The cookie to validate + * @param cookie The cookie to validate * @throws MalformedCookieException if an exception occurs during * validation */ @@ -367,7 +355,6 @@ * @param port the port to which the request is being submitted (ignored) * @param path the path to which the request is being submitted * @param secure <tt>true</tt> if the request is using a secure connection - * @param cookieParam [EMAIL PROTECTED] Cookie} to be matched * @return true if the cookie matches the criterium */ public boolean match(String host, int port, String path, @@ -428,26 +415,26 @@ /** * Return a string suitable for sending in a <tt>"Cookie"</tt> header as * defined in RFC 2965 - * @param cookieParam a [EMAIL PROTECTED] org.apache.commons.httpclient.Cookie} to be formatted as string + * @param cookie a [EMAIL PROTECTED] org.apache.commons.httpclient.Cookie} to be formatted as string * @return a string suitable for sending in a <tt>"Cookie"</tt> header. */ - public String formatCookie(Cookie cookieParam) { + public String formatCookie(final Cookie cookie) { LOG.trace("enter RFC2965Spec.formatCookie(Cookie)"); - if (cookieParam == null) { + if (cookie == null) { throw new IllegalArgumentException("Cookie may not be null"); } - if (cookieParam instanceof Cookie2) { + if (cookie instanceof Cookie2) { /* format cookie2 cookie */ - Cookie2 cookie = (Cookie2) cookieParam; + Cookie2 cookie2 = (Cookie2) cookie; final StringBuffer buffer = new StringBuffer(); this.formatter.format(buffer, new NameValuePair("$Version", "1")); buffer.append("; "); - doFormatCookie2(cookie, buffer); + doFormatCookie2(cookie2, buffer); return buffer.toString(); } else { // old-style cookies are formatted according to the old rules - return this.rfc2109.formatCookie(cookieParam); + return this.rfc2109.formatCookie(cookie); } } @@ -937,13 +924,13 @@ /** * validate cookie max-age attribute. */ - public void validate(final Cookie cookieParam, final CookieOrigin origin) { + public void validate(final Cookie cookie, final CookieOrigin origin) { } /** * @see CookieAttributeHandler#match(org.apache.commons.httpclient.Cookie, String) */ - public boolean match(final Cookie cookieParam, final CookieOrigin origin) { + public boolean match(final Cookie cookie, final CookieOrigin origin) { return true; } @@ -976,7 +963,76 @@ } - /** + /** + * <tt>"Commant"</tt> cookie attribute handler for RFC 2965 cookie spec. + */ + private class CookieCommentAttributeHandler + implements CookieAttributeHandler { + + public void parse(final Cookie cookie, final String comment) + throws MalformedCookieException { + cookie.setComment(comment); + } + + public void validate(final Cookie cookie, final CookieOrigin origin) + throws MalformedCookieException { + } + + public boolean match(final Cookie cookie, final CookieOrigin origin) { + return true; + } + + } + + /** + * <tt>"CommantURL"</tt> cookie attribute handler for RFC 2965 cookie spec. + */ + private class CookieCommentUrlAttributeHandler + implements CookieAttributeHandler { + + public void parse(final Cookie cookie, final String commenturl) + throws MalformedCookieException { + if (cookie instanceof Cookie2) { + Cookie2 cookie2 = (Cookie2) cookie; + cookie2.setCommentURL(commenturl); + } + } + + public void validate(final Cookie cookie, final CookieOrigin origin) + throws MalformedCookieException { + } + + public boolean match(final Cookie cookie, final CookieOrigin origin) { + return true; + } + + } + + /** + * <tt>"Discard"</tt> cookie attribute handler for RFC 2965 cookie spec. + */ + private class CookieDiscardAttributeHandler + implements CookieAttributeHandler { + + public void parse(final Cookie cookie, final String commenturl) + throws MalformedCookieException { + if (cookie instanceof Cookie2) { + Cookie2 cookie2 = (Cookie2) cookie; + cookie2.setDiscard(true); + } + } + + public void validate(final Cookie cookie, final CookieOrigin origin) + throws MalformedCookieException { + } + + public boolean match(final Cookie cookie, final CookieOrigin origin) { + return true; + } + + } + + /** * <tt>"Version"</tt> cookie attribute handler for RFC 2965 cookie spec. */ private class Cookie2VersionAttributeHandler @@ -1035,7 +1091,7 @@ } } - public boolean match(final Cookie cookieParam, final CookieOrigin origin) { + public boolean match(final Cookie cookie, final CookieOrigin origin) { return true; } Modified: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/test/org/apache/commons/httpclient/cookie/TestCookieRFC2965Spec.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/test/org/apache/commons/httpclient/cookie/TestCookieRFC2965Spec.java?rev=398327&r1=398326&r2=398327&view=diff ============================================================================== --- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/test/org/apache/commons/httpclient/cookie/TestCookieRFC2965Spec.java (original) +++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/test/org/apache/commons/httpclient/cookie/TestCookieRFC2965Spec.java Sun Apr 30 05:39:51 2006 @@ -400,10 +400,12 @@ assertFalse(cookie.isPersistent()); // Discard is OPTIONAL, default behavior is dictated by max-age - header = new Header("Set-Cookie2", "name=value;Version=1"); + header = new Header("Set-Cookie2", "name=value;Max-age=36000;Version=1"); parsed = cookiespec.parse("www.domain.com", 80, "/", false, header); assertNotNull(parsed); assertEquals(1, parsed.length); + cookie = (Cookie2) parsed[0]; + assertTrue(cookie.isPersistent()); } /** --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]