Class DeferredContentProvider

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

@Deprecated public class DeferredContentProvider extends Object implements AsyncContentProvider, org.eclipse.jetty.util.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()));
 }
 
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
    Deprecated.
     

    Nested classes/interfaces inherited from interface org.eclipse.jetty.client.AsyncContentProvider

    AsyncContentProvider.Listener

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.Callback

    org.eclipse.jetty.util.Callback.Completable, org.eclipse.jetty.util.Callback.Completing, org.eclipse.jetty.util.Callback.Nested

    Nested classes/interfaces inherited from interface org.eclipse.jetty.client.api.ContentProvider

    ContentProvider.Typed

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.thread.Invocable

    org.eclipse.jetty.util.thread.Invocable.InvocationType, org.eclipse.jetty.util.thread.Invocable.ReadyTask, org.eclipse.jetty.util.thread.Invocable.Task
  • Field Summary

    Fields inherited from interface org.eclipse.jetty.util.Callback

    NOOP

    Fields inherited from interface org.eclipse.jetty.util.thread.Invocable

    __nonBlocking
  • Constructor Summary

    Constructors
    Constructor
    Description
    Deprecated.
    Creates a new DeferredContentProvider with the given initial content
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Deprecated.
    No more content will be added to this content provider and notifies the listener that no more content is available.
    void
    failed(Throwable failure)
    Deprecated.
     
    void
    Deprecated.
     
    long
    Deprecated.
     
    boolean
    Deprecated.
     
    Deprecated.
     
    boolean
    offer(ByteBuffer buffer)
    Deprecated.
    Adds the given content buffer to this content provider and notifies the listener that content is available.
    boolean
    offer(ByteBuffer buffer, org.eclipse.jetty.util.Callback callback)
    Deprecated.
     
    void
    Deprecated.
     

    Methods inherited from class java.lang.Object

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

    Methods inherited from interface org.eclipse.jetty.util.Callback

    completeWith, succeeded

    Methods inherited from interface org.eclipse.jetty.client.api.ContentProvider

    isReproducible

    Methods inherited from interface org.eclipse.jetty.util.thread.Invocable

    getInvocationType

    Methods inherited from interface java.lang.Iterable

    forEach, spliterator
  • 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, org.eclipse.jetty.util.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.
      Specified by:
      failed in interface org.eclipse.jetty.util.Callback
    • iterator

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