Class 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 {@see LoadingCache} 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 Detail

      • 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 Detail

      • 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