You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2010/05/27 12:15:42 UTC
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/
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 <joseph.r.campbell at gmail.com>
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<String> 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<CacheEntry> 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 <T> 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<CacheEntry> {
/**
+ * 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<RequestProtocolError> 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<HeaderElement> expectElementsThatAreNot100Continue = new ArrayList<HeaderElement>();
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 <code>true</code> 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 <code>true</code> 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;