Class HttpComponentsClientHttpRequestFactory
- All Implemented Interfaces:
- Closeable,- AutoCloseable,- DisposableBean,- ClientHttpRequestFactory
ClientHttpRequestFactory implementation that
 uses Apache HttpComponents
 HttpClient to create requests.
 Allows to use a pre-configured HttpClient instance -
 potentially with authentication, HTTP connection pooling, etc.
 
NOTE: Requires Apache HttpComponents 5.1 or higher, as of Spring 6.0.
- Since:
- 3.1
- Author:
- Oleg Kalnichevski, Arjen Poutsma, Stephane Nicoll, Juergen Hoeller
- 
Constructor SummaryConstructorsConstructorDescriptionCreate a new instance of theHttpComponentsClientHttpRequestFactorywith a defaultHttpClientbased on system properties.HttpComponentsClientHttpRequestFactory(HttpClient httpClient) Create a new instance of theHttpComponentsClientHttpRequestFactorywith the givenHttpClientinstance.
- 
Method SummaryModifier and TypeMethodDescriptionvoidclose()protected org.apache.hc.core5.http.protocol.HttpContextcreateHttpContext(HttpMethod httpMethod, URI uri) Template methods that creates aHttpContextfor the given HTTP method and URI.protected org.apache.hc.core5.http.ClassicHttpRequestcreateHttpUriRequest(HttpMethod httpMethod, URI uri) Create a Commons HttpMethodBase object for the given HTTP method and URI specification.createRequest(URI uri, HttpMethod httpMethod) Create a newClientHttpRequestfor the specified URI and HTTP method.protected RequestConfigcreateRequestConfig(Object client) Create a defaultRequestConfigto use with the given client.voiddestroy()Shutdown hook that closes the underlyingClientConnectionManager's connection pool, if any.Return theHttpClientused for synchronous execution.protected RequestConfigmergeRequestConfig(RequestConfig clientConfig) Merge the givenHttpClient-levelRequestConfigwith the factory-level configuration, if necessary.protected voidpostProcessHttpRequest(org.apache.hc.core5.http.ClassicHttpRequest request) Template method that allows for manipulating theClassicHttpRequestbefore it is returned as part of aHttpComponentsClientHttpRequest.voidsetBufferRequestBody(boolean bufferRequestBody) Indicates whether this request factory should buffer the request body internally.voidsetConnectionRequestTimeout(int connectionRequestTimeout) Set the timeout in milliseconds used when requesting a connection from the connection manager using the underlyingRequestConfig.voidsetConnectTimeout(int connectTimeout) Set the connection timeout for the underlyingRequestConfig.voidsetHttpClient(HttpClient httpClient) Set theHttpClientused for synchronous execution.voidsetHttpContextFactory(BiFunction<HttpMethod, URI, org.apache.hc.core5.http.protocol.HttpContext> httpContextFactory) Configure a factory to pre-create theHttpContextfor each request.voidsetReadTimeout(int timeout) Deprecated, for removal: This API element is subject to removal in a future version.
- 
Constructor Details- 
HttpComponentsClientHttpRequestFactorypublic HttpComponentsClientHttpRequestFactory()Create a new instance of theHttpComponentsClientHttpRequestFactorywith a defaultHttpClientbased on system properties.
- 
HttpComponentsClientHttpRequestFactoryCreate a new instance of theHttpComponentsClientHttpRequestFactorywith the givenHttpClientinstance.- Parameters:
- httpClient- the HttpClient instance to use for this request factory
 
 
- 
- 
Method Details- 
setHttpClientSet theHttpClientused for synchronous execution.
- 
getHttpClientReturn theHttpClientused for synchronous execution.
- 
setConnectTimeoutpublic void setConnectTimeout(int connectTimeout) Set the connection timeout for the underlyingRequestConfig. A timeout value of 0 specifies an infinite timeout.Additional properties can be configured by specifying a RequestConfiginstance on a customHttpClient.This options does not affect connection timeouts for SSL handshakes or CONNECT requests; for that, it is required to use the SocketConfigon theHttpClientitself.- Parameters:
- connectTimeout- the timeout value in milliseconds
- See Also:
- 
- RequestConfig.getConnectTimeout()
- SocketConfig.getSoTimeout()
 
 
- 
setConnectionRequestTimeoutpublic void setConnectionRequestTimeout(int connectionRequestTimeout) Set the timeout in milliseconds used when requesting a connection from the connection manager using the underlyingRequestConfig. A timeout value of 0 specifies an infinite timeout.Additional properties can be configured by specifying a RequestConfiginstance on a customHttpClient.- Parameters:
- connectionRequestTimeout- the timeout value to request a connection in milliseconds
- See Also:
 
- 
setReadTimeoutDeprecated, for removal: This API element is subject to removal in a future version.as of 6.0, in favor ofSocketConfig.Builder.setSoTimeout(Timeout), see above.As of version 6.0, setting this property has no effect. To change the socket read timeout, useSocketConfig.Builder.setSoTimeout(Timeout), supply the resultingSocketConfigtoPoolingHttpClientConnectionManagerBuilder.setDefaultSocketConfig(SocketConfig), use the resulting connection manager forHttpClientBuilder.setConnectionManager(HttpClientConnectionManager), and supply the builtHttpClienttoHttpComponentsClientHttpRequestFactory(HttpClient).
- 
setBufferRequestBodypublic void setBufferRequestBody(boolean bufferRequestBody) Indicates whether this request factory should buffer the request body internally.Default is true. When sending large amounts of data via POST or PUT, it is recommended to change this property tofalse, so as not to run out of memory.- Since:
- 4.0
 
- 
setHttpContextFactorypublic void setHttpContextFactory(BiFunction<HttpMethod, URI, org.apache.hc.core5.http.protocol.HttpContext> httpContextFactory) Configure a factory to pre-create theHttpContextfor each request.This may be useful for example in mutual TLS authentication where a different RestTemplatefor each client certificate such that all calls made through a givenRestTemplateinstance as associated for the same client identity.HttpClientContext.setUserToken(Object)can be used to specify a fixed user token for all requests.- Parameters:
- httpContextFactory- the context factory to use
- Since:
- 5.2.7
 
- 
createRequestDescription copied from interface:ClientHttpRequestFactoryCreate a newClientHttpRequestfor the specified URI and HTTP method.The returned request can be written to, and then executed by calling ClientHttpRequest.execute().- Specified by:
- createRequestin interface- ClientHttpRequestFactory
- Parameters:
- uri- the URI to create a request for
- httpMethod- the HTTP method to execute
- Returns:
- the created request
- Throws:
- IOException- in case of I/O errors
 
- 
createRequestConfigCreate a defaultRequestConfigto use with the given client. Can returnnullto indicate that no custom request config should be set and the defaults of theHttpClientshould be used.The default implementation tries to merge the defaults of the client with the local customizations of this factory instance, if any. - Parameters:
- client- the- HttpClient(or- HttpAsyncClient) to check
- Returns:
- the actual RequestConfig to use (may be null)
- Since:
- 4.2
- See Also:
 
- 
mergeRequestConfigMerge the givenHttpClient-levelRequestConfigwith the factory-level configuration, if necessary.- Parameters:
- clientConfig- the config held by the current
- Returns:
- the merged request config
- Since:
- 4.2
 
- 
createHttpUriRequestprotected org.apache.hc.core5.http.ClassicHttpRequest createHttpUriRequest(HttpMethod httpMethod, URI uri) Create a Commons HttpMethodBase object for the given HTTP method and URI specification.- Parameters:
- httpMethod- the HTTP method
- uri- the URI
- Returns:
- the Commons HttpMethodBase object
 
- 
postProcessHttpRequestprotected void postProcessHttpRequest(org.apache.hc.core5.http.ClassicHttpRequest request) Template method that allows for manipulating theClassicHttpRequestbefore it is returned as part of aHttpComponentsClientHttpRequest.The default implementation is empty. - Parameters:
- request- the request to process
 
- 
createHttpContext@Nullable protected org.apache.hc.core5.http.protocol.HttpContext createHttpContext(HttpMethod httpMethod, URI uri) Template methods that creates aHttpContextfor the given HTTP method and URI.The default implementation returns null.- Parameters:
- httpMethod- the HTTP method
- uri- the URI
- Returns:
- the http context
 
- 
destroyShutdown hook that closes the underlyingClientConnectionManager's connection pool, if any.- Specified by:
- destroyin interface- DisposableBean
- Throws:
- Exception- in case of shutdown errors. Exceptions will get logged but not rethrown to allow other beans to release their resources as well.
 
- 
close- Specified by:
- closein interface- AutoCloseable
- Specified by:
- closein interface- ClientHttpRequestFactory
- Specified by:
- closein interface- Closeable
- Throws:
- IOException
 
 
- 
SocketConfig.Builder.setSoTimeout(Timeout), see above.