You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by jo...@apache.org on 2010/12/20 15:42:34 UTC
svn commit: r1051133 -
/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java
Author: jonm
Date: Mon Dec 20 14:42:34 2010
New Revision: 1051133
URL: http://svn.apache.org/viewvc?rev=1051133&view=rev
Log:
HTTPCLIENT-975: more method extraction; the body for
CachingHttpClient#execute now at least fits on one screen. :)
Modified:
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java
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=1051133&r1=1051132&r2=1051133&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 Mon Dec 20 14:42:34 2010
@@ -396,29 +396,17 @@ public class CachingHttpClient implement
return callBackend(target, request, context);
}
- HttpCacheEntry entry = null;
- try {
- entry = responseCache.getCacheEntry(target, request);
- } catch (IOException ioe) {
- log.warn("Unable to retrieve entries from cache", ioe);
- }
+ HttpCacheEntry entry = satisfyFromCache(target, request);
if (entry == null) {
- recordCacheMiss(target, request);
-
- if (!mayCallBackend(request)) {
- return new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_GATEWAY_TIMEOUT,
- "Gateway Timeout");
- }
-
- Map<String, Variant> variants =
- getExistingCacheVariants(target, request);
- if (variants != null && variants.size() > 0) {
- return negotiateResponseFromVariants(target, request, context, variants);
- }
-
- return callBackend(target, request, context);
+ return handleCacheMiss(target, request, context);
}
+ return handleCacheHit(target, request, context, entry);
+ }
+
+ private HttpResponse handleCacheHit(HttpHost target, HttpRequest request,
+ HttpContext context, HttpCacheEntry entry)
+ throws ClientProtocolException, IOException {
recordCacheHit(target, request);
Date now = getCurrentDate();
@@ -431,26 +419,59 @@ public class CachingHttpClient implement
}
if (validityPolicy.isRevalidatable(entry)) {
- log.debug("Revalidating the cache entry");
+ return revalidateCacheEntry(target, request, context, entry, now);
+ }
+ return callBackend(target, request, context);
+ }
- try {
- if (asynchRevalidator != null && validityPolicy.mayReturnStaleWhileRevalidating(entry, now)) {
- final HttpResponse resp = responseGenerator.generateResponse(entry);
- resp.addHeader(HeaderConstants.WARNING, "110 localhost \"Response is stale\"");
-
- asynchRevalidator.revalidateCacheEntry(target, request, context, entry);
-
- return resp;
- }
- return revalidateCacheEntry(target, request, context, entry);
- } catch (IOException ioex) {
- return handleRevalidationFailure(request, context, entry, now);
- } catch (ProtocolException e) {
- throw new ClientProtocolException(e);
+ private HttpResponse revalidateCacheEntry(HttpHost target,
+ HttpRequest request, HttpContext context, HttpCacheEntry entry,
+ Date now) throws ClientProtocolException {
+ log.debug("Revalidating the cache entry");
+
+ try {
+ if (asynchRevalidator != null && validityPolicy.mayReturnStaleWhileRevalidating(entry, now)) {
+ final HttpResponse resp = responseGenerator.generateResponse(entry);
+ resp.addHeader(HeaderConstants.WARNING, "110 localhost \"Response is stale\"");
+
+ asynchRevalidator.revalidateCacheEntry(target, request, context, entry);
+
+ return resp;
}
+ return revalidateCacheEntry(target, request, context, entry);
+ } catch (IOException ioex) {
+ return handleRevalidationFailure(request, context, entry, now);
+ } catch (ProtocolException e) {
+ throw new ClientProtocolException(e);
+ }
+ }
+
+ private HttpResponse handleCacheMiss(HttpHost target, HttpRequest request,
+ HttpContext context) throws IOException {
+ recordCacheMiss(target, request);
+
+ if (!mayCallBackend(request)) {
+ return new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_GATEWAY_TIMEOUT,
+ "Gateway Timeout");
+ }
+
+ Map<String, Variant> variants =
+ getExistingCacheVariants(target, request);
+ if (variants != null && variants.size() > 0) {
+ return negotiateResponseFromVariants(target, request, context, variants);
}
- return callBackend(target, request, context);
+ return callBackend(target, request, context);
+ }
+
+ private HttpCacheEntry satisfyFromCache(HttpHost target, HttpRequest request) {
+ HttpCacheEntry entry = null;
+ try {
+ entry = responseCache.getCacheEntry(target, request);
+ } catch (IOException ioe) {
+ log.warn("Unable to retrieve entries from cache", ioe);
+ }
+ return entry;
}
private HttpResponse getFatallyNoncompliantResponse(HttpRequest request,