@Contract(threading=IMMUTABLE_CONDITIONAL) public class HttpAsyncRequestExecutor extends Object implements NHttpClientEventHandler
HttpAsyncRequestExecutor
is a fully asynchronous HTTP client side
protocol handler based on the NIO (non-blocking) I/O model.
HttpAsyncRequestExecutor
translates individual events fired through
the NHttpClientEventHandler
interface into logically related HTTP
message exchanges.
The caller is expected to pass an instance of
HttpAsyncClientExchangeHandler
to be used for the next series
of HTTP message exchanges through the connection context using
HTTP_HANDLER
attribute. HTTP exchange sequence is considered
complete when the HttpAsyncClientExchangeHandler.isDone()
method
returns true
. The HttpAsyncRequester
utility class can
be used to facilitate initiation of asynchronous HTTP request execution.
Individual HttpAsyncClientExchangeHandler
are expected to make use of
a HttpProcessor
to generate mandatory protocol
headers for all outgoing messages and apply common, cross-cutting message
transformations to all incoming and outgoing messages.
HttpAsyncClientExchangeHandler
s can delegate implementation of
application specific content generation and processing to
a HttpAsyncRequestProducer
and a HttpAsyncResponseConsumer
.
HttpAsyncClientExchangeHandler
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_WAIT_FOR_CONTINUE |
static String |
HTTP_HANDLER |
Constructor and Description |
---|
HttpAsyncRequestExecutor() |
HttpAsyncRequestExecutor(int waitForContinue)
Creates new instance of HttpAsyncRequestExecutor.
|
HttpAsyncRequestExecutor(int waitForContinue,
ExceptionLogger exceptionLogger)
Creates new instance of
HttpAsyncRequestExecutor . |
Modifier and Type | Method and Description |
---|---|
void |
closed(NHttpClientConnection conn)
Triggered when the connection is closed.
|
void |
connected(NHttpClientConnection conn,
Object attachment)
Triggered when a new outgoing connection is created.
|
void |
endOfInput(NHttpClientConnection conn)
Triggered when the connection is closed by the opposite end point
(half-closed).
|
void |
exception(NHttpClientConnection conn,
Exception cause)
Triggered if an error occurs during the HTTP exchange.
|
void |
inputReady(NHttpClientConnection conn,
ContentDecoder decoder)
Triggered when the underlying channel is ready for reading a
new portion of the response entity through the corresponding
content decoder.
|
void |
outputReady(NHttpClientConnection conn,
ContentEncoder encoder)
Triggered when the underlying channel is ready for writing a next portion
of the request entity through the corresponding content encoder.
|
void |
requestReady(NHttpClientConnection conn)
Triggered when the connection is ready to accept a new HTTP request.
|
void |
responseReceived(NHttpClientConnection conn)
Triggered when an HTTP response is received.
|
void |
timeout(NHttpClientConnection conn)
Triggered when no input is detected on this connection over the
maximum period of inactivity.
|
public static final int DEFAULT_WAIT_FOR_CONTINUE
public static final String HTTP_HANDLER
public HttpAsyncRequestExecutor(int waitForContinue, ExceptionLogger exceptionLogger)
HttpAsyncRequestExecutor
.waitForContinue
- wait for continue time period.exceptionLogger
- Exception logger. If null
ExceptionLogger.NO_OP
will be used. Please note that the exception
logger will be only used to log I/O exception thrown while closing
Closeable
objects (such as HttpConnection
).public HttpAsyncRequestExecutor(int waitForContinue)
public HttpAsyncRequestExecutor()
public void connected(NHttpClientConnection conn, Object attachment) throws IOException, HttpException
NHttpClientEventHandler
connected
in interface NHttpClientEventHandler
conn
- new outgoing HTTP connection.attachment
- an object that was attached to the session requestIOException
HttpException
public void closed(NHttpClientConnection conn)
NHttpClientEventHandler
closed
in interface NHttpClientEventHandler
conn
- closed HTTP connection.public void exception(NHttpClientConnection conn, Exception cause)
NHttpClientEventHandler
exception
in interface NHttpClientEventHandler
conn
- HTTP connection that caused an I/O errorcause
- exceptionpublic void requestReady(NHttpClientConnection conn) throws IOException, HttpException
NHttpClientEventHandler
requestReady
in interface NHttpClientEventHandler
conn
- HTTP connection that is ready to accept a new HTTP request.IOException
HttpException
NHttpClientConnection
public void outputReady(NHttpClientConnection conn, ContentEncoder encoder) throws IOException, HttpException
NHttpClientEventHandler
If the content producer is unable to generate outgoing content,
output event notifications can be temporarily suspended using
IOControl
interface (super interface of NHttpClientConnection
).
Please note that the NHttpClientConnection
and ContentEncoder
objects are not thread-safe and should only be used within the context of
this method call. The IOControl
object can be shared and used on other
thread to resume output event notifications when more content is made available.
outputReady
in interface NHttpClientEventHandler
conn
- HTTP connection that can accommodate a new portion
of the outgoing request content.encoder
- The content encoder to use to write content.IOException
HttpException
NHttpClientConnection
,
ContentEncoder
,
IOControl
public void responseReceived(NHttpClientConnection conn) throws HttpException, IOException
NHttpClientEventHandler
If the response received encloses a response entity this method will
be followed by a series of
NHttpClientEventHandler.inputReady(NHttpClientConnection, ContentDecoder)
calls
to transfer the response content.
responseReceived
in interface NHttpClientEventHandler
conn
- HTTP connection that contains an HTTP responseHttpException
IOException
NHttpClientConnection
public void inputReady(NHttpClientConnection conn, ContentDecoder decoder) throws IOException, HttpException
NHttpClientEventHandler
If the content consumer is unable to process incoming content,
input event notifications can be temporarily suspended using
IOControl
interface (super interface of NHttpClientConnection
).
Please note that the NHttpClientConnection
and ContentDecoder
objects are not thread-safe and should only be used within the context of
this method call. The IOControl
object can be shared and used on other
thread to resume input event notifications when the handler is capable of
processing more content.
inputReady
in interface NHttpClientEventHandler
conn
- HTTP connection that can produce a new portion of the
incoming response content.decoder
- The content decoder to use to read content.IOException
HttpException
NHttpClientConnection
,
ContentDecoder
,
IOControl
public void endOfInput(NHttpClientConnection conn) throws IOException
NHttpClientEventHandler
endOfInput
in interface NHttpClientEventHandler
conn
- half-closed HTTP connection.IOException
public void timeout(NHttpClientConnection conn) throws IOException
NHttpClientEventHandler
timeout
in interface NHttpClientEventHandler
conn
- HTTP connection that caused timeout condition.IOException
Copyright © 2010 - 2020 Adobe. All Rights Reserved