org.springframework.http.client

## Class HttpComponentsClientHttpRequestFactory

- java.lang.Object
- - org.springframework.http.client.HttpComponentsClientHttpRequestFactory

- All Implemented Interfaces:
    DisposableBean, ClientHttpRequestFactory

      public class HttpComponentsClientHttpRequestFactory
      extends Object
      implements ClientHttpRequestFactory, DisposableBean

  `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.

  Since:
    3.1
  Author:
    Oleg Kalnichevski, Arjen Poutsma

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `HttpComponentsClientHttpRequestFactory()` Create a new instance of the HttpComponentsClientHttpRequestFactory with a default `HttpClient` that uses a default `PoolingClientConnectionManager`.
    `HttpComponentsClientHttpRequestFactory(HttpClient httpClient)` Create a new instance of the HttpComponentsClientHttpRequestFactory with the given `HttpClient` instance.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected org.apache.http.protocol.HttpContext` | `createHttpContext(HttpMethod httpMethod, URI uri)` Template methods that creates a `HttpContext` for the given HTTP method and URI.
    `protected HttpUriRequest` | `createHttpUriRequest(HttpMethod httpMethod, URI uri)` Create a Commons HttpMethodBase object for the given HTTP method and URI specification.
    `ClientHttpRequest` | `createRequest(URI uri, HttpMethod httpMethod)` Create a new `ClientHttpRequest` for the specified URI and HTTP method.
    `void` | `destroy()` Shutdown hook that closes the underlying `ClientConnectionManager`'s connection pool, if any.
    `HttpClient` | `getHttpClient()` Return the `HttpClient` used by this factory.
    `protected void` | `postProcessHttpRequest(HttpUriRequest request)` Template method that allows for manipulating the `HttpUriRequest` before it is returned as part of a `HttpComponentsClientHttpRequest`.
    `void` | `setConnectTimeout(int timeout)` Set the connection timeout for the underlying HttpClient.
    `void` | `setHttpClient(HttpClient httpClient)` Set the `HttpClient` used by this factory.
    `void` | `setReadTimeout(int timeout)` Set the socket read timeout for the underlying HttpClient.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### HttpComponentsClientHttpRequestFactory

          public HttpComponentsClientHttpRequestFactory()

      Create a new instance of the HttpComponentsClientHttpRequestFactory with a default `HttpClient` that uses a default `PoolingClientConnectionManager`.

    - #### HttpComponentsClientHttpRequestFactory

          public HttpComponentsClientHttpRequestFactory(HttpClient httpClient)

      Create a new instance of the HttpComponentsClientHttpRequestFactory with the given `HttpClient` instance.
      Parameters:
        `httpClient` - the HttpClient instance to use for this request factory

  - ### Method Detail

    - #### setHttpClient

          public void setHttpClient(HttpClient httpClient)

      Set the `HttpClient` used by this factory.

    - #### getHttpClient

          public HttpClient getHttpClient()

      Return the `HttpClient` used by this factory.

    - #### setConnectTimeout

          public void setConnectTimeout(int timeout)

      Set the connection timeout for the underlying HttpClient. A timeout value of 0 specifies an infinite timeout.
      Parameters:
        `timeout` - the timeout value in milliseconds

    - #### setReadTimeout

          public void setReadTimeout(int timeout)

      Set the socket read timeout for the underlying HttpClient. A timeout value of 0 specifies an infinite timeout.
      Parameters:
        `timeout` - the timeout value in milliseconds

    - #### createRequest

          public ClientHttpRequest createRequest(URI uri,
                                        HttpMethod httpMethod)
                                          throws IOException

      Description copied from interface: `ClientHttpRequestFactory`
      Create a new `ClientHttpRequest` for the specified URI and HTTP method.

      The returned request can be written to, and then executed by calling `ClientHttpRequest.execute()`.

      Specified by:
        `createRequest` in 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

    - #### createHttpUriRequest

          protected HttpUriRequest 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

    - #### postProcessHttpRequest

          protected void postProcessHttpRequest(HttpUriRequest request)

      Template method that allows for manipulating the `HttpUriRequest` before it is returned as part of a `HttpComponentsClientHttpRequest`.

      The default implementation is empty.

      Parameters:
        `request` - the request to process

    - #### createHttpContext

          protected org.apache.http.protocol.HttpContext createHttpContext(HttpMethod httpMethod,
                                                               URI uri)

      Template methods that creates a `HttpContext` for the given HTTP method and URI.

      The default implementation returns `null`.

      Parameters:
        `httpMethod` - the HTTP method
        `uri` - the URI
      Returns:
        the http context

    - #### destroy

          public void destroy()

      Shutdown hook that closes the underlying `ClientConnectionManager`'s connection pool, if any.
      Specified by:
        `destroy` in interface `DisposableBean`