Class AsyncHTTPBuilder
ThreadPoolExecutor. All request methods (including get
and post) return a Future instance, whose
get method will provide access to whatever value was
returned from the response handler closure.-
Nested Class Summary
Nested classes/interfaces inherited from class HTTPBuilder
HTTPBuilder.RequestConfigDelegate -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intDefault pool size is one is not supplied in the constructor.protected ExecutorServiceFields inherited from class HTTPBuilder
auth, autoAcceptHeader, contentEncodingHandler, defaultContentType, defaultRequestContentType, defaultRequestHeaders, defaultResponseHandlers, defaultURI, encoders, log, parsers -
Constructor Summary
ConstructorsConstructorDescriptionAsyncHTTPBuilder(Map<String, ?> args) Accepts the following named parameters: threadPoolCustomExecutorServiceinstance for running submitted requests. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidFor 'failure' responses (e.g.protected ObjectdefaultSuccessHandler(HttpResponseDecorator resp, Object parsedData) This is the defaultresponse.successhandler.protected Future<?> doRequest(HTTPBuilder.RequestConfigDelegate delegate) Submits aCallableinstance to the job pool, which in turn will callHTTPBuilder.doRequest(RequestConfigDelegate)in an asynchronous thread.private Objectprotected voidfinalize()Access the underlying threadpool to adjust things like job timeouts.intGet the timeout in for establishing an HTTP connection.protected voidinitThreadPools(int poolSize, ExecutorService threadPool) Initializes threading parameters for the HTTPClient'sThreadSafeClientConnManager, and this class' ThreadPoolExecutor.voidsetTimeout(int timeout) This timeout is used for both the time to wait for an established connection, and the time to wait for data.voidshutdown()Release any system resources held by this instance.Methods inherited from class HTTPBuilder
buildDefaultResponseHandlers, createClient, doRequest, get, get, getAuth, getClient, getContentType, getEncoder, getHandler, getHeaders, getParser, getUri, ignoreSSLIssues, isAutoAcceptHeader, parseResponse, post, post, request, request, request, setAuthConfig, setAutoAcceptHeader, setClient, setContentEncoding, setContentEncodingRegistry, setContentType, setEncoderRegistry, setHeaders, setParserRegistry, setProxy, setUri
-
Field Details
-
DEFAULT_POOL_SIZE
public static final int DEFAULT_POOL_SIZEDefault pool size is one is not supplied in the constructor.- See Also:
-
threadPool
-
-
Constructor Details
-
AsyncHTTPBuilder
Accepts the following named parameters:- threadPool
- Custom
ExecutorServiceinstance for running submitted requests. If this is an instance ofThreadPoolExecutor, the poolSize will be determined byThreadPoolExecutor.getMaximumPoolSize(). The default threadPool uses an unbounded queue to accept an unlimited number of requests. - poolSize
- Max number of concurrent requests
- uri
- Default request URI
- contentType
- Default content type for requests and responses
- timeout
- Timeout in milliseconds to wait for a connection to be established and request to complete.
- Throws:
URISyntaxException
-
-
Method Details
-
doRequest
Submits aCallableinstance to the job pool, which in turn will callHTTPBuilder.doRequest(RequestConfigDelegate)in an asynchronous thread. TheFutureinstance returned by this value (which in turn should be returned by any of the publicrequestmethods (includinggetandpost) may be used to retrieve whatever value may be returned from the executed response handler closure.- Overrides:
doRequestin classHTTPBuilder
-
doRequestSuper
- Throws:
IOException
-
initThreadPools
Initializes threading parameters for the HTTPClient'sThreadSafeClientConnManager, and this class' ThreadPoolExecutor. -
defaultSuccessHandler
protected Object defaultSuccessHandler(HttpResponseDecorator resp, Object parsedData) throws ResponseParseException This is the default
response.successhandler. It will be executed if the response is not handled by a status-code-specific handler (i.e.response.'200'= {..}) and no generic 'success' handler is given (i.e.response.success = {..}.) This handler simply returns the parsed data from the response body. In most cases you will probably want to define aresponse.success = {...}handler from the request closure, which will replace the response handler defined by this method.Note for parsers that return streaming content:
For responses parsed as
BINARYorTEXT, the parser will return streaming content -- anInputStreamorReader. In these cases, this handler will buffer the the response content before the network connection is closed.In practice, a user-supplied response handler closure is designed to handle streaming content so it can be read directly from the response stream without buffering, which will be much more efficient. Therefore, it is recommended that request method variants be used which explicitly accept a response handler closure in these cases.
- Overrides:
defaultSuccessHandlerin classHTTPBuilder- Parameters:
resp- HTTP responseparsedData- parsed data as resolved from this instance'sParserRegistry- Returns:
- the parsed data object (whatever the parser returns).
- Throws:
ResponseParseException- if there is an error buffering a streaming response.
-
defaultFailureHandler
For 'failure' responses (e.g. a 404), the exception will be wrapped in aExecutionExceptionand held by theFutureinstance. The exception is then re-thrown when callingfuture.get(). You can access the original exception (e.g. anHttpResponseException) by callingex.getCause().- Overrides:
defaultFailureHandlerin classHTTPBuilder- Parameters:
resp-- Throws:
HttpResponseException
-
setTimeout
public void setTimeout(int timeout) This timeout is used for both the time to wait for an established connection, and the time to wait for data.- Parameters:
timeout- time to wait in milliseconds.- See Also:
-
getTimeout
public int getTimeout()Get the timeout in for establishing an HTTP connection.- Returns:
- timeout in milliseconds.
-
getThreadExecutor
Access the underlying threadpool to adjust things like job timeouts.
Note that this is not the same pool used by the HttpClient's
ThreadSafeClientConnManager. Therefore, increasing themaximum pool sizewill not in turn increase the number of possible concurrent requests. It will simply cause more requests to be attempted which will then simply block while waiting for a free connection.- Returns:
- the service used to execute requests. By default this is a
ThreadPoolExecutor.
-
shutdown
public void shutdown()Release any system resources held by this instance.- Overrides:
shutdownin classHTTPBuilder- See Also:
-
finalize
-