From 7573bf8284cba570eb2a959c22354c29bf394341 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Date: Mon, 20 Dec 2010 14:42:34 +0000 Subject: [PATCH] HTTPCLIENT-975: more method extraction; the body for CachingHttpClient#execute now at least fits on one screen. :) git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1051133 13f79535-47bb-0310-9956-ffa450edef68 --- .../impl/client/cache/CachingHttpClient.java | 97 +++++++++++-------- 1 file changed, 59 insertions(+), 38 deletions(-) diff --git a/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java b/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java index bf36cca4d..32d4b31eb 100644 --- a/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java +++ b/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java @@ -396,29 +396,17 @@ public class CachingHttpClient implements HttpClient { 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 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 implements HttpClient { } if (validityPolicy.isRevalidatable(entry)) { - 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); - } + return revalidateCacheEntry(target, request, context, entry, now); } - return callBackend(target, request, context); + return callBackend(target, request, context); + } + 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 variants = + getExistingCacheVariants(target, request); + if (variants != null && variants.size() > 0) { + return negotiateResponseFromVariants(target, request, context, variants); + } + + 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,