@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.
HttpAsyncClientExchangeHandlers 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.
|
protected void |
log(Exception ex)
This method can be used to log I/O exception thrown while closing
Closeable objects (such as
HttpConnection}). |
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
NHttpClientEventHandlerconnected in interface NHttpClientEventHandlerconn - new outgoing HTTP connection.attachment - an object that was attached to the session requestIOExceptionHttpExceptionpublic void closed(NHttpClientConnection conn)
NHttpClientEventHandlerclosed in interface NHttpClientEventHandlerconn - closed HTTP connection.public void exception(NHttpClientConnection conn, Exception cause)
NHttpClientEventHandlerexception in interface NHttpClientEventHandlerconn - HTTP connection that caused an I/O errorcause - exceptionpublic void requestReady(NHttpClientConnection conn) throws IOException, HttpException
NHttpClientEventHandlerrequestReady in interface NHttpClientEventHandlerconn - HTTP connection that is ready to accept a new HTTP request.IOExceptionHttpExceptionNHttpClientConnectionpublic 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 NHttpClientEventHandlerconn - HTTP connection that can accommodate a new portion
of the outgoing request content.encoder - The content encoder to use to write content.IOExceptionHttpExceptionNHttpClientConnection,
ContentEncoder,
IOControlpublic 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 NHttpClientEventHandlerconn - HTTP connection that contains an HTTP responseHttpExceptionIOExceptionNHttpClientConnectionpublic 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 NHttpClientEventHandlerconn - HTTP connection that can produce a new portion of the
incoming response content.decoder - The content decoder to use to read content.IOExceptionHttpExceptionNHttpClientConnection,
ContentDecoder,
IOControlpublic void endOfInput(NHttpClientConnection conn) throws IOException
NHttpClientEventHandlerendOfInput in interface NHttpClientEventHandlerconn - half-closed HTTP connection.IOExceptionpublic void timeout(NHttpClientConnection conn) throws IOException
NHttpClientEventHandlertimeout in interface NHttpClientEventHandlerconn - HTTP connection that caused timeout condition.IOExceptionprotected void log(Exception ex)
Closeable objects (such as
HttpConnection}).ex - I/O exception thrown by Closeable.close()Copyright © 2005–2022 The Apache Software Foundation. All rights reserved.