Class CachingWire

java.lang.Object
com.jcabi.http.wire.CachingWire
All Implemented Interfaces:
Wire

@Immutable public final class CachingWire extends Object implements Wire
Wire that caches GET requests.

This decorator can be used when you want to avoid duplicate GET requests to load-sensitive resources, for example:

 String html = new JdkRequest("http://goggle.com")
   .through(CachingWire.class)
   .header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN)
   .fetch()
   .body();

Since 1.5, you can also configure it to flush the entire cache on certain request URI's, for example:

new JdkRequest(uri)
   .through(CachingWire.class, "GET /save/.*")
   .uri().path("/save/123").back()
   .fetch();

Since 1.17.3, you can pass a alongside the wire.


 final LoadingCache<Callable<Response>, Response> cache = ...;
 new JdkRequest(uri)
   .through(CachingWire.class, cache)
   .uri().path("/save/123").back()
   .fetch();
  

The regular expression provided will be used against a string constructed as an HTTP method, space, path of the URI together with query part.

The class is immutable and thread-safe.

Since:
1.0
To do:
#179:30m This implementation depends on Guava. Investigate for a possible shared interface between this class and other implementations for caching. If this shared interface is possible replace this task with a task for implementing it.
  • Constructor Details

    • CachingWire

      public CachingWire(Wire wire)
      Public ctor.
      Parameters:
      wire - Original wire
    • CachingWire

      public CachingWire(Wire wire, String flsh)
      Public ctor.
      Parameters:
      wire - Original wire
      flsh - Flushing regular expression
      Since:
      1.5
    • CachingWire

      public CachingWire(Wire wire, com.google.common.cache.LoadingCache<Callable<Response>,Response> storage)
      Public ctor.
      Parameters:
      wire - Original wire
      storage - Cache
      Since:
      1.17.4
    • CachingWire

      public CachingWire(Wire wire, String flsh, com.google.common.cache.LoadingCache<Callable<Response>,Response> storage)
      Public ctor.
      Parameters:
      wire - Original wire
      flsh - Flushing regular expression
      storage - Cache
      Since:
      1.17.4
  • Method Details

    • send

      public Response send(Request req, String home, String method, Collection<Map.Entry<String,String>> headers, InputStream content, int connect, int read) throws IOException
      Description copied from interface: Wire
      Send request and return response.
      Specified by:
      send in interface Wire
      Parameters:
      req - Request
      home - URI to fetch
      method - HTTP method
      headers - Headers
      content - HTTP body
      connect - The connect timeout
      read - The read timeout
      Returns:
      Response obtained
      Throws:
      IOException - if fails
    • invalidate

      public static void invalidate()
      Invalidate the entire cache.
      Since:
      1.15