Class DeferredContentProvider

java.lang.Object
org.eclipse.jetty.client.util.DeferredContentProvider
All Implemented Interfaces:
Closeable, AutoCloseable, Iterable<ByteBuffer>, ContentProvider, AsyncContentProvider, Callback, Invocable

@Deprecated public class DeferredContentProvider extends Object implements AsyncContentProvider, Callback, Closeable
Deprecated.
use AsyncRequestContent instead.
A ContentProvider that allows to add content after Request.send(Response.CompleteListener) has been called, therefore providing the request content at a later time.

DeferredContentProvider can only be used in conjunction with Request.send(Response.CompleteListener) (and not with its blocking counterpart Request.send()) because it provides content asynchronously.

The deferred content is provided once and then fully consumed. Invocations to the iterator() method after the first will return an "empty" iterator because the stream has been consumed on the first invocation. However, it is possible for subclasses to override offer(ByteBuffer) and close() to copy the content to another location (for example a file) and be able to support multiple invocations of of iterator() returning the iterator provided by this class on the first invocation, and an iterator on the bytes copied to the other location for subsequent invocations.

Typical usage of DeferredContentProvider is in asynchronous proxies, where HTTP headers arrive separately from HTTP content chunks.

The deferred content must be provided through offer(ByteBuffer), which can be invoked multiple times, and when all content has been provided it must be signaled with a call to close().

Example usage:

 HttpClient httpClient = ...;

 // Use try-with-resources to autoclose DeferredContentProvider
 try (DeferredContentProvider content = new DeferredContentProvider())
 {
     httpClient.newRequest("localhost", 8080)
             .content(content)
             .send(new Response.CompleteListener()
             {
                 @Override
                 public void onComplete(Result result)
                 {
                     // Your logic here
                 }
             });

     // At a later time...
     content.offer(ByteBuffer.wrap("some content".getBytes()));
 }
 
  • Constructor Details

    • DeferredContentProvider

      public DeferredContentProvider(ByteBuffer... buffers)
      Deprecated.
      Creates a new DeferredContentProvider with the given initial content
      Parameters:
      buffers - the initial content
  • Method Details

    • setListener

      public void setListener(AsyncContentProvider.Listener listener)
      Deprecated.
      Specified by:
      setListener in interface AsyncContentProvider
      Parameters:
      listener - the listener to be notified of content availability
    • getLength

      public long getLength()
      Deprecated.
      Specified by:
      getLength in interface ContentProvider
      Returns:
      the content length, if known, or -1 if the content length is unknown
    • offer

      public boolean offer(ByteBuffer buffer)
      Deprecated.
      Adds the given content buffer to this content provider and notifies the listener that content is available.
      Parameters:
      buffer - the content to add
      Returns:
      true if the content was added, false otherwise
    • offer

      public boolean offer(ByteBuffer buffer, Callback callback)
      Deprecated.
    • flush

      public void flush() throws IOException
      Deprecated.
      Throws:
      IOException
    • close

      public void close()
      Deprecated.
      No more content will be added to this content provider and notifies the listener that no more content is available.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
    • isClosed

      public boolean isClosed()
      Deprecated.
    • failed

      public void failed(Throwable failure)
      Deprecated.
      Description copied from interface: Callback

      Callback invoked when the operation fails.

      Specified by:
      failed in interface Callback
      Parameters:
      failure - the reason for the operation failure
    • iterator

      public Iterator<ByteBuffer> iterator()
      Deprecated.
      Specified by:
      iterator in interface Iterable<ByteBuffer>