Class InputStreamResponseListener

java.lang.Object
org.eclipse.jetty.client.api.Response.Listener.Adapter
org.eclipse.jetty.client.util.InputStreamResponseListener
All Implemented Interfaces:
EventListener, Response.AsyncContentListener, Response.BeginListener, Response.CompleteListener, Response.ContentListener, Response.DemandedContentListener, Response.FailureListener, Response.HeaderListener, Response.HeadersListener, Response.Listener, Response.ResponseListener, Response.SuccessListener

public class InputStreamResponseListener extends Response.Listener.Adapter
Implementation of Response.Listener that produces an InputStream that allows applications to read the response content.

Typical usage is:

 InputStreamResponseListener listener = new InputStreamResponseListener();
 client.newRequest(...).send(listener);

 // Wait for the response headers to arrive
 Response response = listener.get(5, TimeUnit.SECONDS);
 if (response.getStatus() == 200)
 {
     // Obtain the input stream on the response content
     try (InputStream input = listener.getInputStream())
     {
         // Read the response content
     }
 }
 

The HttpClient implementation (the producer) will feed the input stream asynchronously while the application (the consumer) is reading from it.

If the consumer is faster than the producer, then the consumer will block with the typical InputStream.read() semantic. If the consumer is slower than the producer, then the producer will block until the client consumes.

  • Constructor Details

    • InputStreamResponseListener

      public InputStreamResponseListener()
  • Method Details

    • onHeaders

      public void onHeaders(Response response)
      Description copied from interface: Response.HeadersListener
      Callback method invoked when all the response headers have been received and parsed.
      Parameters:
      response - the response containing the response line data and the headers
    • onContent

      public void onContent(Response response, ByteBuffer content, Callback callback)
      Description copied from interface: Response.AsyncContentListener
      Callback method invoked when the response content has been received, parsed and there is demand. The callback object should be succeeded to signal that the content buffer has been consumed and to demand more content.
      Parameters:
      response - the response containing the response line data and the headers
      content - the content bytes received
      callback - the callback to call when the content is consumed and to demand more content
    • onSuccess

      public void onSuccess(Response response)
      Description copied from interface: Response.SuccessListener
      Callback method invoked when the whole response has been successfully received.
      Parameters:
      response - the response containing the response line data and the headers
    • onFailure

      public void onFailure(Response response, Throwable failure)
      Description copied from interface: Response.FailureListener
      Callback method invoked when the response has failed in the process of being received
      Parameters:
      response - the response containing data up to the point the failure happened
      failure - the failure happened
    • onComplete

      public void onComplete(Result result)
      Description copied from interface: Response.CompleteListener
      Callback method invoked when the request and the response have been processed, either successfully or not.

      The result parameter contains the request, the response, and eventual failures.

      Requests may complete after response, for example in case of big uploads that are discarded or read asynchronously by the server. This method is always invoked after Response.SuccessListener.onSuccess(Response) or Response.FailureListener.onFailure(Response, Throwable), and only when request indicates that it is completed.

      Parameters:
      result - the result of the request / response exchange
    • get

      public Response get(long timeout, TimeUnit unit) throws InterruptedException, TimeoutException, ExecutionException
      Waits for the given timeout for the response to be available, then returns it.

      The wait ends as soon as all the HTTP headers have been received, without waiting for the content. To wait for the whole content, see await(long, TimeUnit).

      Parameters:
      timeout - the time to wait
      unit - the timeout unit
      Returns:
      the response
      Throws:
      InterruptedException - if the thread is interrupted
      TimeoutException - if the timeout expires
      ExecutionException - if a failure happened
    • await

      public Result await(long timeout, TimeUnit unit) throws InterruptedException, TimeoutException
      Waits for the given timeout for the whole request/response cycle to be finished, then returns the corresponding result.

      Parameters:
      timeout - the time to wait
      unit - the timeout unit
      Returns:
      the result
      Throws:
      InterruptedException - if the thread is interrupted
      TimeoutException - if the timeout expires
      See Also:
    • getInputStream

      public InputStream getInputStream()
      Returns an InputStream providing the response content bytes.

      The method may be invoked only once; subsequent invocations will return a closed InputStream.

      Returns:
      an input stream providing the response content