List of usage examples for org.apache.http.impl.client.cache Proxies enhanceResponse
public static CloseableHttpResponse enhanceResponse(final HttpResponse original)
From source file:org.apache.http.impl.client.cache.CachingExec.java
public CloseableHttpResponse execute(final HttpRoute route, final HttpRequestWrapper request, final HttpClientContext context, final HttpExecutionAware execAware) throws IOException, HttpException { final HttpHost target = context.getTargetHost(); final String via = generateViaHeader(request.getOriginal()); // default response context setResponseStatus(context, CacheResponseStatus.CACHE_MISS); if (clientRequestsOurOptions(request)) { setResponseStatus(context, CacheResponseStatus.CACHE_MODULE_RESPONSE); return Proxies.enhanceResponse(new OptionsHttp11Response()); }/* w ww . ja va2 s . c o m*/ final HttpResponse fatalErrorResponse = getFatallyNoncompliantResponse(request, context); if (fatalErrorResponse != null) { return Proxies.enhanceResponse(fatalErrorResponse); } requestCompliance.makeRequestCompliant(request); request.addHeader("Via", via); flushEntriesInvalidatedByRequest(context.getTargetHost(), request); if (!cacheableRequestPolicy.isServableFromCache(request)) { log.debug("Request is not servable from cache"); return callBackend(route, request, context, execAware); } final HttpCacheEntry entry = satisfyFromCache(target, request); if (entry == null) { log.debug("Cache miss"); return handleCacheMiss(route, request, context, execAware); } else { return handleCacheHit(route, request, context, execAware, entry); } }
From source file:org.apache.http.impl.client.cache.CachingExec.java
private CloseableHttpResponse handleCacheMiss(final HttpRoute route, final HttpRequestWrapper request, final HttpClientContext context, final HttpExecutionAware execAware) throws IOException, HttpException { final HttpHost target = context.getTargetHost(); recordCacheMiss(target, request);/*from w ww . java 2s . c om*/ if (!mayCallBackend(request)) { return Proxies.enhanceResponse( new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_GATEWAY_TIMEOUT, "Gateway Timeout")); } final Map<String, Variant> variants = getExistingCacheVariants(target, request); if (variants != null && variants.size() > 0) { return negotiateResponseFromVariants(route, request, context, execAware, variants); } return callBackend(route, request, context, execAware); }
From source file:org.apache.http.impl.client.cache.CachingExec.java
private CloseableHttpResponse generateGatewayTimeout(final HttpContext context) { setResponseStatus(context, CacheResponseStatus.CACHE_MODULE_RESPONSE); return Proxies.enhanceResponse( new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_GATEWAY_TIMEOUT, "Gateway Timeout")); }
From source file:org.apache.http.impl.client.cache.CachingHttpAsyncClient.java
void callBackend(final BasicFuture<HttpResponse> future, final HttpHost target, final HttpRequestWrapper request, final HttpCacheContext clientContext) { final Date requestDate = getCurrentDate(); this.log.trace("Calling the backend"); final ChainedFutureCallback<HttpResponse> chainedFutureCallback = new ChainedFutureCallback<HttpResponse>( future) {// w w w .jav a 2 s. com @Override public void completed(final HttpResponse httpResponse) { httpResponse.addHeader(HeaderConstants.VIA, generateViaHeader(httpResponse)); try { final CloseableHttpResponse backendResponse = handleBackendResponse(target, request, requestDate, getCurrentDate(), Proxies.enhanceResponse(httpResponse)); super.completed(backendResponse); } catch (final IOException e) { super.failed(e); } } }; this.backend.execute(target, request, clientContext, chainedFutureCallback); }
From source file:org.apache.http.impl.client.cache.CachingHttpAsyncClient.java
void negotiateResponseFromVariants(final BasicFuture<HttpResponse> future, final HttpHost target, final HttpRequestWrapper request, final HttpCacheContext clientContext, final Map<String, Variant> variants) { final HttpRequest conditionalRequest = this.conditionalRequestBuilder .buildConditionalRequestFromVariants(request, variants); final Date requestDate = getCurrentDate(); final ChainedFutureCallback<HttpResponse> chainedFutureCallback = new ChainedFutureCallback<HttpResponse>( future) {//from w w w . j av a 2s . c o m @Override public void completed(final HttpResponse httpResponse) { final Date responseDate = getCurrentDate(); httpResponse.addHeader(HeaderConstants.VIA, generateViaHeader(httpResponse)); if (httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_NOT_MODIFIED) { try { future.completed(handleBackendResponse(target, request, requestDate, responseDate, Proxies.enhanceResponse(httpResponse))); return; } catch (final IOException e) { future.failed(e); return; } } final Header resultEtagHeader = httpResponse.getFirstHeader(HeaderConstants.ETAG); if (resultEtagHeader == null) { CachingHttpAsyncClient.this.log.warn("304 response did not contain ETag"); callBackend(future, target, request, clientContext); return; } final String resultEtag = resultEtagHeader.getValue(); final Variant matchingVariant = variants.get(resultEtag); if (matchingVariant == null) { CachingHttpAsyncClient.this.log .debug("304 response did not contain ETag matching one sent in If-None-Match"); callBackend(future, target, request, clientContext); } final HttpCacheEntry matchedEntry = matchingVariant.getEntry(); if (revalidationResponseIsTooOld(httpResponse, matchedEntry)) { EntityUtils.consumeQuietly(httpResponse.getEntity()); retryRequestUnconditionally(future, target, request, clientContext, matchedEntry); return; } recordCacheUpdate(clientContext); final HttpCacheEntry responseEntry = getUpdatedVariantEntry(target, conditionalRequest, requestDate, responseDate, httpResponse, matchingVariant, matchedEntry); final HttpResponse resp = CachingHttpAsyncClient.this.responseGenerator.generateResponse(request, responseEntry); tryToUpdateVariantMap(target, request, matchingVariant); if (shouldSendNotModifiedResponse(request, responseEntry)) { future.completed(CachingHttpAsyncClient.this.responseGenerator .generateNotModifiedResponse(responseEntry)); return; } future.completed(resp); } }; this.backend.execute(target, conditionalRequest, clientContext, chainedFutureCallback); }
From source file:org.apache.http.impl.client.cache.CachingHttpAsyncClient.java
private void revalidateCacheEntryCompleted(final BasicFuture<HttpResponse> future, final HttpHost target, final HttpRequestWrapper request, final HttpCacheContext clientContext, final HttpCacheEntry cacheEntry, final HttpRequestWrapper conditionalRequest, final Date requestDate, final HttpResponse httpResponse, final Date responseDate) { httpResponse.addHeader(HeaderConstants.VIA, generateViaHeader(httpResponse)); final int statusCode = httpResponse.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_NOT_MODIFIED || statusCode == HttpStatus.SC_OK) { recordCacheUpdate(clientContext); }//w w w . j a v a 2 s. c om if (statusCode == HttpStatus.SC_NOT_MODIFIED) { final HttpCacheEntry updatedEntry; try { updatedEntry = CachingHttpAsyncClient.this.responseCache.updateCacheEntry(target, request, cacheEntry, httpResponse, requestDate, responseDate); } catch (final IOException e) { future.failed(e); return; } if (CachingHttpAsyncClient.this.suitabilityChecker.isConditional(request) && CachingHttpAsyncClient.this.suitabilityChecker.allConditionalsMatch(request, updatedEntry, new Date())) { future.completed( CachingHttpAsyncClient.this.responseGenerator.generateNotModifiedResponse(updatedEntry)); return; } future.completed(CachingHttpAsyncClient.this.responseGenerator.generateResponse(request, updatedEntry)); return; } if (staleIfErrorAppliesTo(statusCode) && !staleResponseNotAllowed(request, cacheEntry, getCurrentDate()) && CachingHttpAsyncClient.this.validityPolicy.mayReturnStaleIfError(request, cacheEntry, responseDate)) { final HttpResponse cachedResponse = CachingHttpAsyncClient.this.responseGenerator .generateResponse(request, cacheEntry); cachedResponse.addHeader(HeaderConstants.WARNING, "110 localhost \"Response is stale\""); future.completed(cachedResponse); return; } try { final CloseableHttpResponse backendResponse = handleBackendResponse(target, conditionalRequest, requestDate, responseDate, Proxies.enhanceResponse(httpResponse)); future.completed(backendResponse); } catch (final IOException e) { future.failed(e); } }