org.apache.http.impl.client.cache

## Class CachingExec

- java.lang.Object
- - org.apache.http.impl.client.cache.CachingExec

All Implemented Interfaces:
  ClientExecChain

    @Contract(threading=SAFE_CONDITIONAL)
    public class CachingExec
    extends Object
    implements ClientExecChain

Request executor in the request execution chain that is responsible for transparent client-side caching.

The current implementation is conditionally compliant with HTTP/1.1 (meaning all the MUST and MUST NOTs are obeyed), although quite a lot, though not all, of the SHOULDs and SHOULD NOTs are obeyed too.

Folks that would like to experiment with alternative storage backends should look at the `HttpCacheStorage` interface and the related package documentation there. You may also be interested in the provided `EhCache` and `memcached` storage backends.

Further responsibilities such as communication with the opposite endpoint is delegated to the next executor in the request execution chain.

Since:
  4.3

### Constructor Summary

Constructors
Constructor and Description
`CachingExec(ClientExecChain backend)`
`CachingExec(ClientExecChain backend, org.apache.http.impl.client.cache.HttpCache cache, CacheConfig config)`
`CachingExec(ClientExecChain backend, org.apache.http.impl.client.cache.HttpCache cache, CacheConfig config, org.apache.http.impl.client.cache.AsynchronousValidator asynchRevalidator)`
`CachingExec(ClientExecChain backend, ResourceFactory resourceFactory, HttpCacheStorage storage, CacheConfig config)`

### Method Summary

Methods
`CloseableHttpResponse` `execute(HttpRoute route, HttpRequestWrapper request)`
`CloseableHttpResponse` `execute(HttpRoute route, HttpRequestWrapper request, HttpClientContext context)`
`CloseableHttpResponse` `execute(HttpRoute route, HttpRequestWrapper request, HttpClientContext context, HttpExecutionAware execAware)` Executes th request either by transmitting it to the target server or by passing it onto the next executor in the request execution chain.
`long` `getCacheHits()` Reports the number of times that the cache successfully responded to an `HttpRequest` without contacting the origin server.
`long` `getCacheMisses()` Reports the number of times that the cache contacted the origin server because it had no appropriate response cached.
`long` `getCacheUpdates()` Reports the number of times that the cache was able to satisfy a response by revalidating an existing but stale cache entry.
`boolean` `supportsRangeAndContentRangeHeaders()` Reports whether this `CachingHttpClient` implementation supports byte-range requests as specified by the `Range` and `Content-Range` headers.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### CachingExec

    public CachingExec(ClientExecChain backend,
               org.apache.http.impl.client.cache.HttpCache cache,
               CacheConfig config)

#### CachingExec

    public CachingExec(ClientExecChain backend,
               org.apache.http.impl.client.cache.HttpCache cache,
               CacheConfig config,
               org.apache.http.impl.client.cache.AsynchronousValidator asynchRevalidator)

#### CachingExec

    public CachingExec(ClientExecChain backend,
               ResourceFactory resourceFactory,
               HttpCacheStorage storage,
               CacheConfig config)

#### CachingExec

    public CachingExec(ClientExecChain backend)

### Method Detail

#### getCacheHits

    public long getCacheHits()

Reports the number of times that the cache successfully responded to an `HttpRequest` without contacting the origin server.

Returns:
  the number of cache hits

#### getCacheMisses

    public long getCacheMisses()

Reports the number of times that the cache contacted the origin server because it had no appropriate response cached.

Returns:
  the number of cache misses

#### getCacheUpdates

    public long getCacheUpdates()

Reports the number of times that the cache was able to satisfy a response by revalidating an existing but stale cache entry.

Returns:
  the number of cache revalidations

#### execute

    public CloseableHttpResponse execute(HttpRoute route,
                                HttpRequestWrapper request)
                                  throws IOException,
                                         org.apache.http.HttpException

Throws:
  `IOException`
  `org.apache.http.HttpException`

#### execute

    public CloseableHttpResponse execute(HttpRoute route,
                                HttpRequestWrapper request,
                                HttpClientContext context)
                                  throws IOException,
                                         org.apache.http.HttpException

Throws:
  `IOException`
  `org.apache.http.HttpException`

#### execute

    public CloseableHttpResponse execute(HttpRoute route,
                                HttpRequestWrapper request,
                                HttpClientContext context,
                                HttpExecutionAware execAware)
                                  throws IOException,
                                         org.apache.http.HttpException

Description copied from interface: `ClientExecChain`
Executes th request either by transmitting it to the target server or by passing it onto the next executor in the request execution chain.

Specified by:
  `execute` in interface `ClientExecChain`
Parameters:
  `route` - connection route.
  `request` - current request.
  `context` - current HTTP context.
  `execAware` - receiver of notifications of blocking I/O operations.
Returns:
  HTTP response either received from the opposite endpoint or generated locally.
Throws:
  `IOException` - in case of a I/O error. (this type of exceptions are potentially recoverable).
  `org.apache.http.HttpException` - in case of an HTTP protocol error (usually this type of exceptions are non-recoverable).

#### supportsRangeAndContentRangeHeaders

    public boolean supportsRangeAndContentRangeHeaders()

Reports whether this `CachingHttpClient` implementation supports byte-range requests as specified by the `Range` and `Content-Range` headers.

Returns:
  `true` if byte-range requests are supported