org.springframework.http.client

## Class SimpleClientHttpRequestFactory

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

- All Implemented Interfaces:
    AsyncClientHttpRequestFactory, ClientHttpRequestFactory

      public class SimpleClientHttpRequestFactory
      extends Object
      implements ClientHttpRequestFactory, AsyncClientHttpRequestFactory

  `ClientHttpRequestFactory` implementation that uses standard J2SE facilities.
  Since:
    3.0
  Author:
    Arjen Poutsma, Juergen Hoeller
  See Also:
    `HttpURLConnection`, `HttpComponentsClientHttpRequestFactory`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `SimpleClientHttpRequestFactory()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `AsyncClientHttpRequest` | `createAsyncRequest(URI uri, HttpMethod httpMethod)` Create a new asynchronous `AsyncClientHttpRequest` for the specified URI and HTTP method.
    `ClientHttpRequest` | `createRequest(URI uri, HttpMethod httpMethod)` Create a new `ClientHttpRequest` for the specified URI and HTTP method.
    `protected HttpURLConnection` | `openConnection(URL url, Proxy proxy)` Opens and returns a connection to the given URL.
    `protected void` | `prepareConnection(HttpURLConnection connection, String httpMethod)` Template method for preparing the given `HttpURLConnection`.
    `void` | `setBufferRequestBody(boolean bufferRequestBody)` Indicates whether this request factory should buffer the request body internally.
    `void` | `setChunkSize(int chunkSize)` Sets the number of bytes to write in each chunk when not buffering request bodies locally.
    `void` | `setConnectTimeout(int connectTimeout)` Set the underlying URLConnection's connect timeout (in milliseconds).
    `void` | `setOutputStreaming(boolean outputStreaming)` Set if the underlying URLConnection can be set to 'output streaming' mode.
    `void` | `setProxy(Proxy proxy)` Set the `Proxy` to use for this request factory.
    `void` | `setReadTimeout(int readTimeout)` Set the underlying URLConnection's read timeout (in milliseconds).
    `void` | `setTaskExecutor(AsyncListenableTaskExecutor taskExecutor)` Sets the task executor for this request factory.

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

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

- - ### Constructor Detail

    - #### SimpleClientHttpRequestFactory

          public SimpleClientHttpRequestFactory()

  - ### Method Detail

    - #### setProxy

          public void setProxy(Proxy proxy)

      Set the `Proxy` to use for this request factory.

    - #### setBufferRequestBody

          public 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 to `false`, so as not to run out of memory. This will result in a `ClientHttpRequest` that either streams directly to the underlying `HttpURLConnection` (if the `Content-Length` is known in advance), or that will use "Chunked transfer encoding" (if the `Content-Length` is not known in advance).

      See Also:
        `setChunkSize(int)`, `HttpURLConnection.setFixedLengthStreamingMode(int)`

    - #### setChunkSize

          public void setChunkSize(int chunkSize)

      Sets the number of bytes to write in each chunk when not buffering request bodies locally.

      Note that this parameter is only used when `bufferRequestBody` is set to `false`, and the `Content-Length` is not known in advance.

      See Also:
        `setBufferRequestBody(boolean)`

    - #### setConnectTimeout

          public void setConnectTimeout(int connectTimeout)

      Set the underlying URLConnection's connect timeout (in milliseconds). A timeout value of 0 specifies an infinite timeout.

      Default is the system's default timeout.

      See Also:
        `URLConnection.setConnectTimeout(int)`

    - #### setReadTimeout

          public void setReadTimeout(int readTimeout)

      Set the underlying URLConnection's read timeout (in milliseconds). A timeout value of 0 specifies an infinite timeout.

      Default is the system's default timeout.

      See Also:
        `URLConnection.setReadTimeout(int)`

    - #### setOutputStreaming

          public void setOutputStreaming(boolean outputStreaming)

      Set if the underlying URLConnection can be set to 'output streaming' mode. When output streaming is enabled, authentication and redirection cannot be handled automatically. If output streaming is disabled the `setFixedLengthStreamingMode` and `setChunkedStreamingMode` methods of the underlying connection will never be called.

      Default is `true`.

      Parameters:
        `outputStreaming` - if output streaming is enabled

    - #### setTaskExecutor

          public void setTaskExecutor(AsyncListenableTaskExecutor taskExecutor)

      Sets the task executor for this request factory. Setting this property is required for creating asynchronous request.
      Parameters:
        `taskExecutor` - the task executor

    - #### 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

    - #### createAsyncRequest

          public AsyncClientHttpRequest createAsyncRequest(URI uri,
                                                           HttpMethod httpMethod)
                                                    throws IOException

      Create a new asynchronous `AsyncClientHttpRequest` for the specified URI and HTTP method.

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

      Setting the `taskExecutor` property is required before calling this method.

      Specified by:
        `createAsyncRequest` in interface `AsyncClientHttpRequestFactory`
      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

    - #### openConnection

          protected HttpURLConnection openConnection(URL url,
                                                     Proxy proxy)
                                              throws IOException

      Opens and returns a connection to the given URL.

      The default implementation uses the given proxy - if any - to open a connection.

      Parameters:
        `url` - the URL to open a connection to
        `proxy` - the proxy to use, may be `null`
      Returns:
        the opened connection
      Throws:
        `IOException` - in case of I/O errors

    - #### prepareConnection

          protected void prepareConnection(HttpURLConnection connection,
                                           String httpMethod)
                                    throws IOException

      Template method for preparing the given `HttpURLConnection`.

      The default implementation prepares the connection for input and output, and sets the HTTP method.

      Parameters:
        `connection` - the connection to prepare
        `httpMethod` - the HTTP request method (`GET`, `POST`, etc.)
      Throws:
        `IOException` - in case of I/O errors