Class InputStreamResponseListener
- java.lang.Object
-
- org.eclipse.jetty.client.api.Response.Listener.Adapter
-
- org.eclipse.jetty.client.util.InputStreamResponseListener
-
- All Implemented Interfaces:
java.util.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 ofResponse.Listener
that produces anInputStream
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.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.client.api.Response.Listener
Response.Listener.Adapter
-
-
Constructor Summary
Constructors Constructor Description InputStreamResponseListener()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Result
await(long timeout, java.util.concurrent.TimeUnit unit)
Waits for the given timeout for the whole request/response cycle to be finished, then returns the corresponding result.Response
get(long timeout, java.util.concurrent.TimeUnit unit)
Waits for the given timeout for the response to be available, then returns it.java.io.InputStream
getInputStream()
Returns anInputStream
providing the response content bytes.void
onComplete(Result result)
Callback method invoked when the request and the response have been processed, either successfully or not.void
onContent(Response response, java.nio.ByteBuffer content, Callback callback)
Callback method invoked when the response content has been received, parsed and there is demand.void
onFailure(Response response, java.lang.Throwable failure)
Callback method invoked when the response has failed in the process of being receivedvoid
onHeaders(Response response)
Callback method invoked when all the response headers have been received and parsed.void
onSuccess(Response response)
Callback method invoked when the whole response has been successfully received.-
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.client.api.Response.AsyncContentListener
onContent
-
Methods inherited from interface org.eclipse.jetty.client.api.Response.DemandedContentListener
onBeforeContent
-
Methods inherited from interface org.eclipse.jetty.client.api.Response.Listener
onBegin, onContent, onHeader
-
-
-
-
Method Detail
-
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, java.nio.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. Thecallback
object should be succeeded to signal that thecontent
buffer has been consumed and to demand more content.- Parameters:
response
- the response containing the response line data and the headerscontent
- the content bytes receivedcallback
- 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, java.lang.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 happenedfailure
- 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)
orResponse.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, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException, java.util.concurrent.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 waitunit
- the timeout unit- Returns:
- the response
- Throws:
java.lang.InterruptedException
- if the thread is interruptedjava.util.concurrent.TimeoutException
- if the timeout expiresjava.util.concurrent.ExecutionException
- if a failure happened
-
await
public Result await(long timeout, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedException, java.util.concurrent.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 waitunit
- the timeout unit- Returns:
- the result
- Throws:
java.lang.InterruptedException
- if the thread is interruptedjava.util.concurrent.TimeoutException
- if the timeout expires- See Also:
get(long, TimeUnit)
-
getInputStream
public java.io.InputStream getInputStream()
Returns anInputStream
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
-
-