Return-Path: Delivered-To: apmail-hc-commits-archive@www.apache.org Received: (qmail 2993 invoked from network); 27 May 2010 10:16:08 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 27 May 2010 10:16:08 -0000 Received: (qmail 43021 invoked by uid 500); 27 May 2010 10:16:08 -0000 Delivered-To: apmail-hc-commits-archive@hc.apache.org Received: (qmail 42977 invoked by uid 500); 27 May 2010 10:16:07 -0000 Mailing-List: contact commits-help@hc.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "HttpComponents Project" Delivered-To: mailing list commits@hc.apache.org Received: (qmail 42966 invoked by uid 99); 27 May 2010 10:16:06 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 27 May 2010 10:16:06 +0000 X-ASF-Spam-Status: No, hits=-1598.8 required=10.0 tests=ALL_TRUSTED,AWL X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 27 May 2010 10:16:03 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id C9F6D238897A; Thu, 27 May 2010 10:15:42 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r948754 - in /httpcomponents/httpclient/trunk/httpclient-cache/src: main/java/org/apache/http/impl/client/cache/ test/java/org/apache/http/impl/client/cache/ Date: Thu, 27 May 2010 10:15:42 -0000 To: commits@hc.apache.org From: olegk@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100527101542.C9F6D238897A@eris.apache.org> Author: olegk Date: Thu May 27 10:15:41 2010 New Revision: 948754 URL: http://svn.apache.org/viewvc?rev=948754&view=rev Log: HTTPCLIENT-943: CacheClient Javadoc and Constants usage cleanup Contributed by Joe Campbell Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntry.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryGenerator.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheInvalidator.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedHttpResponseGenerator.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedResponseSuitabilityChecker.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ConditionalRequestBuilder.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/DefaultCacheEntrySerializer.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/HeaderConstants.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/RequestProtocolCompliance.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ResponseCachingPolicy.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ResponseProtocolCompliance.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/SizeLimitedResponseReader.java httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/URIExtractor.java httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestDefaultCacheEntrySerializer.java Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java Thu May 27 10:15:41 2010 @@ -34,6 +34,7 @@ import java.io.Serializable; import org.apache.http.Header; import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; import org.apache.http.annotation.Immutable; import org.apache.http.message.BasicHeader; import org.apache.http.protocol.HTTP; @@ -47,27 +48,31 @@ class CacheEntity implements HttpEntity, private final String contentType; private final String contentEncoding; - public CacheEntity(final byte[] b, final String contentType, final String contentEncoding) { + public CacheEntity(final byte[] b, final HttpResponse response) { super(); this.content = b; - this.contentType = contentType; - this.contentEncoding = contentEncoding; + + Header ct = response.getFirstHeader(HTTP.CONTENT_TYPE); + Header ce = response.getFirstHeader(HTTP.CONTENT_ENCODING); + + this.contentType = ct != null ? ct.getValue() : null; + this.contentEncoding = ce != null ? ce.getValue() : null; } public Header getContentType() { - if (this.contentType != null) { - return new BasicHeader(HTTP.CONTENT_TYPE, this.contentType); - } else { + if (this.contentType == null) { return null; } + + return new BasicHeader(HTTP.CONTENT_TYPE, this.contentType); } public Header getContentEncoding() { - if (this.contentEncoding != null) { - return new BasicHeader(HTTP.CONTENT_ENCODING, this.contentEncoding); - } else { + if (this.contentEncoding == null) { return null; } + + return new BasicHeader(HTTP.CONTENT_ENCODING, this.contentEncoding); } public boolean isChunked() { Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntry.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntry.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntry.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntry.java Thu May 27 10:15:41 2010 @@ -45,6 +45,7 @@ import org.apache.http.annotation.Immuta import org.apache.http.impl.cookie.DateParseException; import org.apache.http.impl.cookie.DateUtils; import org.apache.http.message.BasicHeader; +import org.apache.http.protocol.HTTP; /** * Structure used to store an {@link HttpResponse} in a cache @@ -68,6 +69,7 @@ public class CacheEntry implements Seria private final Set variantURIs; /** + * Create a new {@link CacheEntry} * * @param requestDate * Date/time when the request was made (Used for age @@ -79,8 +81,8 @@ public class CacheEntry implements Seria * HTTP Response Version * @param responseHeaders * Header[] from original HTTP Response - * @param responseBytes - * Byte array containing the body of the response + * @param body + * HttpEntity representing the body of the response * @param status * Numeric HTTP Status Code * @param reason @@ -102,6 +104,7 @@ public class CacheEntry implements Seria /** * Constructor used to create a copy of an existing entry, while adding another variant URI to it. + * * @param toCopy CacheEntry to be duplicated * @param variantURI URI to add */ @@ -158,12 +161,8 @@ public class CacheEntry implements Seria return responseHeaders.getHeaders(name); } - /** - * - * @return Response Date header value - */ protected Date getDateValue() { - Header dateHdr = getFirstHeader(HeaderConstants.DATE); + Header dateHdr = getFirstHeader(HTTP.DATE_HEADER); if (dateHdr == null) return null; try { @@ -175,7 +174,7 @@ public class CacheEntry implements Seria } protected long getContentLengthValue() { - Header cl = getFirstHeader(HeaderConstants.CONTENT_LENGTH); + Header cl = getFirstHeader(HTTP.CONTENT_LEN); if (cl == null) return -1; @@ -196,10 +195,6 @@ public class CacheEntry implements Seria return getContentLengthValue() == body.getContentLength(); } - /** - * - * @return Apparent age of the response - */ protected long getApparentAgeSecs() { Date dateValue = getDateValue(); if (dateValue == null) @@ -210,10 +205,6 @@ public class CacheEntry implements Seria return (diff / 1000); } - /** - * - * @return Response Age header value - */ protected long getAgeValue() { long ageValue = 0; for (Header hdr : getHeaders(HeaderConstants.AGE)) { @@ -237,10 +228,6 @@ public class CacheEntry implements Seria return (apparentAge > ageValue) ? apparentAge : ageValue; } - /** - * - * @return Delay between request and response - */ protected long getResponseDelaySecs() { long diff = responseDate.getTime() - requestDate.getTime(); return (diff / 1000L); Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryGenerator.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryGenerator.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryGenerator.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryGenerator.java Thu May 27 10:15:41 2010 @@ -28,10 +28,8 @@ package org.apache.http.impl.client.cach import java.util.Date; -import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.annotation.Immutable; -import org.apache.http.protocol.HTTP; /** * Generates a {@link CacheEntry} from a {@link HttpResponse} @@ -43,12 +41,9 @@ public class CacheEntryGenerator { public CacheEntry generateEntry(Date requestDate, Date responseDate, HttpResponse response, byte[] body) { - Header ct = response.getFirstHeader(HTTP.CONTENT_TYPE); - Header ce = response.getFirstHeader(HTTP.CONTENT_ENCODING); - CacheEntity entity = new CacheEntity( - body, - ct != null ? ct.getValue() : null, - ce != null ? ce.getValue() : null); + + CacheEntity entity = new CacheEntity(body, response); + return new CacheEntry(requestDate, responseDate, response.getProtocolVersion(), Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java Thu May 27 10:15:41 2010 @@ -38,6 +38,7 @@ import org.apache.http.HttpResponse; import org.apache.http.annotation.Immutable; import org.apache.http.impl.cookie.DateParseException; import org.apache.http.impl.cookie.DateUtils; +import org.apache.http.protocol.HTTP; /** * Update a {@link CacheEntry} with new or updated information based on the latest @@ -129,9 +130,9 @@ public class CacheEntryUpdater { private boolean entryDateHeaderNewerThenResponse(CacheEntry entry, HttpResponse response) { try { - Date entryDate = DateUtils.parseDate(entry.getFirstHeader(HeaderConstants.DATE) + Date entryDate = DateUtils.parseDate(entry.getFirstHeader(HTTP.DATE_HEADER) .getValue()); - Date responseDate = DateUtils.parseDate(response.getFirstHeader(HeaderConstants.DATE) + Date responseDate = DateUtils.parseDate(response.getFirstHeader(HTTP.DATE_HEADER) .getValue()); if (!entryDate.after(responseDate)) { @@ -145,8 +146,8 @@ public class CacheEntryUpdater { } private boolean entryAndResponseHaveDateHeader(CacheEntry entry, HttpResponse response) { - if (entry.getFirstHeader(HeaderConstants.DATE) != null - && response.getFirstHeader(HeaderConstants.DATE) != null) { + if (entry.getFirstHeader(HTTP.DATE_HEADER) != null + && response.getFirstHeader(HTTP.DATE_HEADER) != null) { return true; } Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheInvalidator.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheInvalidator.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheInvalidator.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheInvalidator.java Thu May 27 10:15:41 2010 @@ -51,9 +51,11 @@ public class CacheInvalidator { private final Log log = LogFactory.getLog(getClass()); /** + * Create a new {@link CacheInvalidator} for a given {@link HttpCache} and + * {@link URIExtractor}. * - * @param uriExtractor - * @param cache + * @param uriExtractor Provides identifiers for the keys to store cache entries + * @param cache the cache to store items away in */ public CacheInvalidator(URIExtractor uriExtractor, HttpCache cache) { this.uriExtractor = uriExtractor; Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedHttpResponseGenerator.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedHttpResponseGenerator.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedHttpResponseGenerator.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedHttpResponseGenerator.java Thu May 27 10:15:41 2010 @@ -33,6 +33,7 @@ import org.apache.http.HttpStatus; import org.apache.http.annotation.Immutable; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicHttpResponse; +import org.apache.http.protocol.HTTP; /** * Rebuilds an {@link HttpResponse} from a {@link CacheEntry} @@ -43,6 +44,8 @@ import org.apache.http.message.BasicHttp public class CachedHttpResponseGenerator { /** + * If I was able to use a {@link CacheEntry} to response to the {@link org.apache.http.HttpRequest} then + * generate an {@link HttpResponse} based on the cache entry. * @param entry * {@link CacheEntry} to transform into an {@link HttpResponse} * @return {@link HttpResponse} that was constructed @@ -75,16 +78,16 @@ public class CachedHttpResponseGenerator if (transferEncodingIsPresent(response)) return; - Header contentLength = response.getFirstHeader(HeaderConstants.CONTENT_LENGTH); + Header contentLength = response.getFirstHeader(HTTP.CONTENT_LEN); if (contentLength == null) { - contentLength = new BasicHeader(HeaderConstants.CONTENT_LENGTH, Long.toString(entity + contentLength = new BasicHeader(HTTP.CONTENT_LEN, Long.toString(entity .getContentLength())); response.setHeader(contentLength); } } private boolean transferEncodingIsPresent(HttpResponse response) { - Header hdr = response.getFirstHeader(HeaderConstants.TRANSFER_ENCODING); + Header hdr = response.getFirstHeader(HTTP.TRANSFER_ENCODING); return hdr != null; } } Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedResponseSuitabilityChecker.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedResponseSuitabilityChecker.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedResponseSuitabilityChecker.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedResponseSuitabilityChecker.java Thu May 27 10:15:41 2010 @@ -46,6 +46,9 @@ public class CachedResponseSuitabilityCh private final Log log = LogFactory.getLog(getClass()); /** + * Determine if I can utilize a {@link CacheEntry} to respond to the given + * {@link HttpRequest} + * * @param host * {@link HttpHost} * @param request Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java Thu May 27 10:15:41 2010 @@ -296,7 +296,7 @@ public class CachingHttpClient implement /** * @param request the request to execute * @param responseHandler the response handler - * @param context + * @param context the http context * @param The Return Type Identified by the generic type of the {@link ResponseHandler} * @return T The response type as handled by ResponseHandler * @throws IOException Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ConditionalRequestBuilder.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ConditionalRequestBuilder.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ConditionalRequestBuilder.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ConditionalRequestBuilder.java Thu May 27 10:15:41 2010 @@ -39,11 +39,14 @@ import org.apache.http.impl.client.Reque public class ConditionalRequestBuilder { /** + * When a {@link CacheEntry} is stale but 'might' be used as a response + * to an {@link HttpRequest} we will attempt to revalidate the entry with + * the origin. Build the origin {@link HttpRequest} here and return it. * - * @param request - * @param cacheEntry + * @param request the original request from the caller + * @param cacheEntry the entry that needs to be revalidated * @return the wrapped request - * @throws ProtocolException + * @throws ProtocolException when I am unable to build a new origin request. */ public HttpRequest buildConditionalRequest(HttpRequest request, CacheEntry cacheEntry) throws ProtocolException { Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/DefaultCacheEntrySerializer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/DefaultCacheEntrySerializer.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/DefaultCacheEntrySerializer.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/DefaultCacheEntrySerializer.java Thu May 27 10:15:41 2010 @@ -47,10 +47,11 @@ import org.apache.http.client.cache.Http public class DefaultCacheEntrySerializer implements HttpCacheEntrySerializer { /** + * Write a {@link CacheEntry} to an {@link OutputStream}. * - * @param cacheEntry - * @param os - * @throws IOException + * @param cacheEntry the entry to write + * @param os the output stream to write to + * @throws IOException if problems occur writing the entry */ public void writeTo(CacheEntry cacheEntry, OutputStream os) throws IOException { @@ -84,8 +85,9 @@ public class DefaultCacheEntrySerializer } /** + * Read a {@link CacheEntry} from an {@link InputStream} * - * @param is + * @param is the input stream to read from * @return the cache entry * @throws IOException */ Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/HeaderConstants.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/HeaderConstants.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/HeaderConstants.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/HeaderConstants.java Thu May 27 10:15:41 2010 @@ -53,9 +53,8 @@ public class HeaderConstants { public static final String ETAG = "ETag"; public static final String EXPIRES = "Expires"; public static final String AGE = "Age"; - public static final String CONTENT_LENGTH = "Content-Length"; - public static final String DATE = "Date"; public static final String VARY = "Vary"; + public static final String ALLOW = "Allow"; public static final String CACHE_CONTROL = "Cache-Control"; public static final String CACHE_CONTROL_NO_STORE = "no-store"; @@ -64,10 +63,10 @@ public class HeaderConstants { public static final String CACHE_CONTROL_MAX_STALE = "max-stale"; public static final String CACHE_CONTROL_MIN_FRESH = "min-fresh"; - public static final String TRANSFER_ENCODING = "Transfer-Encoding"; public static final String WARNING = "Warning"; - public static final String EXPECT = "Expect"; public static final String RANGE = "Range"; public static final String CONTENT_RANGE = "Content-Range"; + public static final String WWW_AUTHENTICATE = "WWW-Authenticate"; + public static final String PROXY_AUTHENTICATE = "Proxy-Authenticate"; } Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/RequestProtocolCompliance.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/RequestProtocolCompliance.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/RequestProtocolCompliance.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/RequestProtocolCompliance.java Thu May 27 10:15:41 2010 @@ -43,6 +43,7 @@ import org.apache.http.impl.client.Reque import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicHttpResponse; import org.apache.http.message.BasicStatusLine; +import org.apache.http.protocol.HTTP; /** * @since 4.1 @@ -51,8 +52,10 @@ import org.apache.http.message.BasicStat public class RequestProtocolCompliance { /** + * Test to see if the {@link HttpRequest} is HTTP1.1 compliant or not + * and if not, we can not continue. * - * @param request + * @param request the HttpRequest Object * @return list of {@link RequestProtocolError} */ public List requestIsFatallyNonCompliant(HttpRequest request) { @@ -77,10 +80,12 @@ public class RequestProtocolCompliance { } /** + * If the {@link HttpRequest} is non-compliant but 'fixable' we go ahead and + * fix the request here. Returning the updated one. * - * @param request + * @param request the request to check for compliance * @return the updated request - * @throws ProtocolException + * @throws ProtocolException when we have trouble making the request compliant */ public HttpRequest makeRequestCompliant(HttpRequest request) throws ProtocolException { if (requestMustNotHaveEntity(request)) { @@ -137,7 +142,7 @@ public class RequestProtocolCompliance { private void addContentTypeHeaderIfMissing(HttpEntityEnclosingRequest request) { if (request.getEntity().getContentType() == null) { - ((AbstractHttpEntity) request.getEntity()).setContentType("application/octet-stream"); + ((AbstractHttpEntity) request.getEntity()).setContentType(HTTP.OCTET_STREAM_TYPE); } } @@ -158,12 +163,12 @@ public class RequestProtocolCompliance { private void remove100ContinueHeaderIfExists(HttpRequest request) { boolean hasHeader = false; - Header[] expectHeaders = request.getHeaders(HeaderConstants.EXPECT); + Header[] expectHeaders = request.getHeaders(HTTP.EXPECT_DIRECTIVE); List expectElementsThatAreNot100Continue = new ArrayList(); for (Header h : expectHeaders) { for (HeaderElement elt : h.getElements()) { - if (!("100-continue".equalsIgnoreCase(elt.getName()))) { + if (!(HTTP.EXPECT_CONTINUE.equalsIgnoreCase(elt.getName()))) { expectElementsThatAreNot100Continue.add(elt); } else { hasHeader = true; @@ -173,7 +178,7 @@ public class RequestProtocolCompliance { if (hasHeader) { request.removeHeader(h); for (HeaderElement elt : expectElementsThatAreNot100Continue) { - BasicHeader newHeader = new BasicHeader(HeaderConstants.EXPECT, elt.getName()); + BasicHeader newHeader = new BasicHeader(HTTP.EXPECT_DIRECTIVE, elt.getName()); request.addHeader(newHeader); } return; @@ -186,16 +191,16 @@ public class RequestProtocolCompliance { private void add100ContinueHeaderIfMissing(HttpRequest request) { boolean hasHeader = false; - for (Header h : request.getHeaders(HeaderConstants.EXPECT)) { + for (Header h : request.getHeaders(HTTP.EXPECT_DIRECTIVE)) { for (HeaderElement elt : h.getElements()) { - if ("100-continue".equalsIgnoreCase(elt.getName())) { + if (HTTP.EXPECT_CONTINUE.equalsIgnoreCase(elt.getName())) { hasHeader = true; } } } if (!hasHeader) { - request.addHeader(HeaderConstants.EXPECT, "100-continue"); + request.addHeader(HTTP.EXPECT_DIRECTIVE, HTTP.EXPECT_CONTINUE); } } @@ -232,24 +237,31 @@ public class RequestProtocolCompliance { return request.getProtocolVersion().compareToVersion(CachingHttpClient.HTTP_1_1) < 0; } + /** + * Extract error information about the {@link HttpRequest} telling the 'caller' + * that a problem occured. + * + * @param errorCheck What type of error should I get + * @return The {@link HttpResponse} that is the error generated + */ public HttpResponse getErrorForRequest(RequestProtocolError errorCheck) { switch (errorCheck) { - case BODY_BUT_NO_LENGTH_ERROR: - return new BasicHttpResponse(new BasicStatusLine(CachingHttpClient.HTTP_1_1, - HttpStatus.SC_LENGTH_REQUIRED, "")); - - case WEAK_ETAG_AND_RANGE_ERROR: - return new BasicHttpResponse(new BasicStatusLine(CachingHttpClient.HTTP_1_1, - HttpStatus.SC_BAD_REQUEST, "Weak eTag not compatible with byte range")); - - case WEAK_ETAG_ON_PUTDELETE_METHOD_ERROR: - return new BasicHttpResponse(new BasicStatusLine(CachingHttpClient.HTTP_1_1, - HttpStatus.SC_BAD_REQUEST, - "Weak eTag not compatible with PUT or DELETE requests")); - - default: - throw new IllegalStateException( - "The request was compliant, therefore no error can be generated for it."); + case BODY_BUT_NO_LENGTH_ERROR: + return new BasicHttpResponse(new BasicStatusLine(CachingHttpClient.HTTP_1_1, + HttpStatus.SC_LENGTH_REQUIRED, "")); + + case WEAK_ETAG_AND_RANGE_ERROR: + return new BasicHttpResponse(new BasicStatusLine(CachingHttpClient.HTTP_1_1, + HttpStatus.SC_BAD_REQUEST, "Weak eTag not compatible with byte range")); + + case WEAK_ETAG_ON_PUTDELETE_METHOD_ERROR: + return new BasicHttpResponse(new BasicStatusLine(CachingHttpClient.HTTP_1_1, + HttpStatus.SC_BAD_REQUEST, + "Weak eTag not compatible with PUT or DELETE requests")); + + default: + throw new IllegalStateException( + "The request was compliant, therefore no error can be generated for it."); } } @@ -311,7 +323,7 @@ public class RequestProtocolCompliance { return null; } - if (request.getFirstHeader(HeaderConstants.CONTENT_LENGTH) != null + if (request.getFirstHeader(HTTP.CONTENT_LEN) != null && ((HttpEntityEnclosingRequest) request).getEntity() != null) return null; Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ResponseCachingPolicy.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ResponseCachingPolicy.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ResponseCachingPolicy.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ResponseCachingPolicy.java Thu May 27 10:15:41 2010 @@ -36,6 +36,7 @@ import org.apache.http.HttpStatus; import org.apache.http.annotation.Immutable; import org.apache.http.impl.cookie.DateParseException; import org.apache.http.impl.cookie.DateUtils; +import org.apache.http.protocol.HTTP; /** * Determines if an HttpResponse can be cached. @@ -49,8 +50,10 @@ public class ResponseCachingPolicy { private final Log log = LogFactory.getLog(getClass()); /** + * Define a cache policy that limits the size of things that should be stored + * in the cache to a maximum of {@link HttpResponse} bytes in size. * - * @param maxObjectSizeBytes + * @param maxObjectSizeBytes the size to limit items into the cache */ public ResponseCachingPolicy(int maxObjectSizeBytes) { this.maxObjectSizeBytes = maxObjectSizeBytes; @@ -59,8 +62,8 @@ public class ResponseCachingPolicy { /** * Determines if an HttpResponse can be cached. * - * @param httpMethod - * @param response + * @param httpMethod What type of request was this, a GET, PUT, other? + * @param response The origin response * @return true if response is cacheable */ public boolean isResponseCacheable(String httpMethod, HttpResponse response) { @@ -94,7 +97,7 @@ public class ResponseCachingPolicy { return cacheable; } - Header contentLength = response.getFirstHeader(HeaderConstants.CONTENT_LENGTH); + Header contentLength = response.getFirstHeader(HTTP.CONTENT_LEN); if (contentLength != null) { int contentLengthValue = Integer.parseInt(contentLength.getValue()); if (contentLengthValue > this.maxObjectSizeBytes) @@ -111,7 +114,7 @@ public class ResponseCachingPolicy { if (expiresHeaders.length > 1) return false; - Header[] dateHeaders = response.getHeaders(HeaderConstants.DATE); + Header[] dateHeaders = response.getHeaders(HTTP.DATE_HEADER); if (dateHeaders.length != 1) return false; @@ -168,9 +171,11 @@ public class ResponseCachingPolicy { } /** + * Determine if the {@link HttpResponse} gotten from the origin is a + * cacheable response. * - * @param request - * @param response + * @param request the {@link HttpRequest} that generated an origin hit + * @param response the {@link HttpResponse} from the origin * @return true if response is cacheable */ public boolean isResponseCacheable(HttpRequest request, HttpResponse response) { Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ResponseProtocolCompliance.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ResponseProtocolCompliance.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ResponseProtocolCompliance.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ResponseProtocolCompliance.java Thu May 27 10:15:41 2010 @@ -37,6 +37,7 @@ import org.apache.http.annotation.Immuta import org.apache.http.client.ClientProtocolException; import org.apache.http.impl.client.RequestWrapper; import org.apache.http.impl.cookie.DateUtils; +import org.apache.http.protocol.HTTP; /** * @since 4.1 @@ -45,10 +46,13 @@ import org.apache.http.impl.cookie.DateU public class ResponseProtocolCompliance { /** + * When we get a response from a down stream server (Origin Server) + * we attempt to see if it is HTTP 1.1 Compliant and if not, attempt to + * make it so. * - * @param request - * @param response - * @throws ClientProtocolException + * @param request The {@link HttpRequest} that generated an origin hit and response + * @param response The {@link HttpResponse} from the origin server + * @throws ClientProtocolException when we are unable to 'convert' the response to a compliant one */ public void ensureProtocolCompliance(HttpRequest request, HttpResponse response) throws ClientProtocolException { @@ -78,7 +82,7 @@ public class ResponseProtocolCompliance if (response.getStatusLine().getStatusCode() != HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED) return; - if (response.getFirstHeader("Proxy-Authenticate") == null) + if (response.getFirstHeader(HeaderConstants.PROXY_AUTHENTICATE) == null) throw new ClientProtocolException( "407 Response did not contain a Proxy-Authentication header"); } @@ -88,7 +92,7 @@ public class ResponseProtocolCompliance if (response.getStatusLine().getStatusCode() != HttpStatus.SC_METHOD_NOT_ALLOWED) return; - if (response.getFirstHeader("Allow") == null) + if (response.getFirstHeader(HeaderConstants.ALLOW) == null) throw new ClientProtocolException("405 Response did not contain an Allow header."); } @@ -97,15 +101,15 @@ public class ResponseProtocolCompliance if (response.getStatusLine().getStatusCode() != HttpStatus.SC_UNAUTHORIZED) return; - if (response.getFirstHeader("WWW-Authenticate") == null) { + if (response.getFirstHeader(HeaderConstants.WWW_AUTHENTICATE) == null) { throw new ClientProtocolException( "401 Response did not contain required WWW-Authenticate challenge header"); } } private void ensure206ContainsDateHeader(HttpResponse response) { - if (response.getFirstHeader(HeaderConstants.DATE) == null) { - response.addHeader(HeaderConstants.DATE, DateUtils.formatDate(new Date())); + if (response.getFirstHeader(HTTP.DATE_HEADER) == null) { + response.addHeader(HTTP.DATE_HEADER, DateUtils.formatDate(new Date())); } } @@ -132,8 +136,8 @@ public class ResponseProtocolCompliance return; } - if (response.getFirstHeader(HeaderConstants.CONTENT_LENGTH) == null) { - response.addHeader(HeaderConstants.CONTENT_LENGTH, "0"); + if (response.getFirstHeader(HTTP.CONTENT_LEN) == null) { + response.addHeader(HTTP.CONTENT_LEN, "0"); } } @@ -183,7 +187,7 @@ public class ResponseProtocolCompliance private void removeResponseTransferEncoding(HttpResponse response) { response.removeHeaders("TE"); - response.removeHeaders(HeaderConstants.TRANSFER_ENCODING); + response.removeHeaders(HTTP.TRANSFER_ENCODING); } private boolean originalRequestDidNotExpectContinue(RequestWrapper request) { Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/SizeLimitedResponseReader.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/SizeLimitedResponseReader.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/SizeLimitedResponseReader.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/SizeLimitedResponseReader.java Thu May 27 10:15:41 2010 @@ -53,9 +53,14 @@ public class SizeLimitedResponseReader { private boolean outputStreamConsumed; /** + * Create an {@link HttpResponse} that is limited in size, this allows for checking + * the size of objects that will be stored in the cache. * * @param maxResponseSizeBytes + * Maximum size that a response can be to be eligible for cache inclusion + * * @param response + * The {@link HttpResponse} */ public SizeLimitedResponseReader(int maxResponseSizeBytes, HttpResponse response) { this.maxResponseSizeBytes = maxResponseSizeBytes; Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/URIExtractor.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/URIExtractor.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/URIExtractor.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/URIExtractor.java Thu May 27 10:15:41 2010 @@ -37,6 +37,7 @@ import org.apache.http.HeaderElement; import org.apache.http.HttpHost; import org.apache.http.HttpRequest; import org.apache.http.annotation.Immutable; +import org.apache.http.protocol.HTTP; /** * @since 4.1 @@ -44,6 +45,14 @@ import org.apache.http.annotation.Immuta @Immutable public class URIExtractor { + /** + * For a given {@link HttpHost} and {@link HttpRequest} get a URI from the + * pair that I can use as an identifier KEY into my HttpCache + * + * @param host The host for this request + * @param req the {@link HttpRequest} + * @return String the extracted URI + */ public String getURI(HttpHost host, HttpRequest req) { return String.format("%s%s", host.toString(), req.getRequestLine().getUri()); } @@ -65,6 +74,16 @@ public class URIExtractor { return buf.toString(); } + /** + * For a given {@link HttpHost} and {@link HttpRequest} if the request has a + * VARY header - I need to get an additional URI from the pair of host and + * request so that I can also store the variant into my HttpCache. + * + * @param host The host for this request + * @param req the {@link HttpRequest} + * @param entry the parent entry used to track the varients + * @return String the extracted variant URI + */ public String getVariantURI(HttpHost host, HttpRequest req, CacheEntry entry) { Header[] varyHdrs = entry.getHeaders(HeaderConstants.VARY); if (varyHdrs == null || varyHdrs.length == 0) { @@ -86,10 +105,10 @@ public class URIExtractor { if (!first) { buf.append("&"); } - buf.append(URLEncoder.encode(headerName, "UTF-8")); + buf.append(URLEncoder.encode(headerName, HTTP.UTF_8)); buf.append("="); buf.append(URLEncoder.encode(getFullHeaderValue(req.getHeaders(headerName)), - "UTF-8")); + HTTP.UTF_8)); first = false; } buf.append("}"); Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestDefaultCacheEntrySerializer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestDefaultCacheEntrySerializer.java?rev=948754&r1=948753&r2=948754&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestDefaultCacheEntrySerializer.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestDefaultCacheEntrySerializer.java Thu May 27 10:15:41 2010 @@ -31,6 +31,7 @@ import org.apache.http.HttpVersion; import org.apache.http.ProtocolVersion; import org.apache.http.client.cache.HttpCacheEntrySerializer; import org.apache.http.message.BasicHeader; +import org.apache.http.message.BasicHttpResponse; import org.junit.Assert; import org.junit.Test; @@ -71,9 +72,10 @@ public class TestDefaultCacheEntrySerial } ProtocolVersion version = new HttpVersion(1, 1); String body = "Lorem ipsum dolor sit amet"; + BasicHttpResponse response = new BasicHttpResponse(version, 200, "OK"); CacheEntry cacheEntry = new CacheEntry(new Date(), new Date(), version, headers, - new CacheEntity(body.getBytes("US-ASCII"), null, null), 200, "OK"); + new CacheEntity(body.getBytes("US-ASCII"), response), 200, "OK"); return cacheEntry;