Overview | Package | Class | Tree | Deprecated | Index | Help
| Spring Framework
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.springframework.remoting.httpinvoker
Class HttpComponentsHttpInvokerRequestExecutor

    java.lang.Object
      org.springframework.remoting.httpinvoker.AbstractHttpInvokerRequestExecutor
          org.springframework.remoting.httpinvoker.HttpComponentsHttpInvokerRequestExecutor

All Implemented Interfaces:
  Aware, BeanClassLoaderAware, HttpInvokerRequestExecutor

    public class HttpComponentsHttpInvokerRequestExecutor

extends AbstractHttpInvokerRequestExecutor

`HttpInvokerRequestExecutor` implementation that uses Apache HttpComponents HttpClient to execute POST requests.

Allows to use a pre-configured `HttpClient` instance, potentially with authentication, HTTP connection pooling, etc. Also designed for easy subclassing, providing specific template methods.

Since:
  3.1
Author:
  Juergen Hoeller
See Also:
  `SimpleHttpInvokerRequestExecutor`

Field Summary

Fields inherited from class org.springframework.remoting.httpinvoker.AbstractHttpInvokerRequestExecutor
`CONTENT_TYPE_SERIALIZED_OBJECT, ENCODING_GZIP, HTTP_HEADER_ACCEPT_ENCODING, HTTP_HEADER_ACCEPT_LANGUAGE, HTTP_HEADER_CONTENT_ENCODING, HTTP_HEADER_CONTENT_LENGTH, HTTP_HEADER_CONTENT_TYPE, HTTP_METHOD_POST, logger`

Constructor Summary
`HttpComponentsHttpInvokerRequestExecutor()` Create a new instance of the HttpComponentsHttpInvokerRequestExecutor with a default `HttpClient` that uses a default `ThreadSafeClientConnManager`.
`HttpComponentsHttpInvokerRequestExecutor(org.apache.http.client.HttpClient httpClient)` Create a new instance of the HttpComponentsClientHttpRequestFactory with the given `HttpClient` instance.

Method Summary
`protected org.apache.http.client.methods.HttpPost` | `createHttpPost(HttpInvokerClientConfiguration config)` Create a HttpPost for the given configuration.
`protected RemoteInvocationResult` | `doExecuteRequest(HttpInvokerClientConfiguration config, java.io.ByteArrayOutputStream baos)` Execute the given request through the HttpClient.
`protected org.apache.http.HttpResponse` | `executeHttpPost(HttpInvokerClientConfiguration config, org.apache.http.client.HttpClient httpClient, org.apache.http.client.methods.HttpPost httpPost)` Execute the given HttpPost instance.
`org.apache.http.client.HttpClient` | `getHttpClient()` Return the `HttpClient` instance that this request executor uses.
`protected java.io.InputStream` | `getResponseBody(HttpInvokerClientConfiguration config, org.apache.http.HttpResponse httpResponse)` Extract the response body from the given executed remote invocation request.
`protected boolean` | `isGzipResponse(org.apache.http.HttpResponse httpResponse)` Determine whether the given response indicates a GZIP response.
`void` | `setConnectTimeout(int timeout)` Set the connection timeout for the underlying HttpClient.
`void` | `setHttpClient(org.apache.http.client.HttpClient httpClient)` Set the `HttpClient` instance to use for this request executor.
`void` | `setReadTimeout(int timeout)` Set the socket read timeout for the underlying HttpClient.
`protected void` | `setRequestBody(HttpInvokerClientConfiguration config, org.apache.http.client.methods.HttpPost httpPost, java.io.ByteArrayOutputStream baos)` Set the given serialized remote invocation as request body.
`protected void` | `validateResponse(HttpInvokerClientConfiguration config, org.apache.http.HttpResponse response)` Validate the given response as contained in the HttpPost object, throwing an exception if it does not correspond to a successful HTTP response.

Methods inherited from class org.springframework.remoting.httpinvoker.AbstractHttpInvokerRequestExecutor
`createObjectInputStream, decorateInputStream, decorateOutputStream, doReadRemoteInvocationResult, doWriteRemoteInvocation, executeRequest, getBeanClassLoader, getByteArrayOutputStream, getContentType, isAcceptGzipEncoding, readRemoteInvocationResult, setAcceptGzipEncoding, setBeanClassLoader, setContentType, writeRemoteInvocation`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### HttpComponentsHttpInvokerRequestExecutor

    public HttpComponentsHttpInvokerRequestExecutor()

  Create a new instance of the HttpComponentsHttpInvokerRequestExecutor with a default `HttpClient` that uses a default `ThreadSafeClientConnManager`.

### HttpComponentsHttpInvokerRequestExecutor

    public HttpComponentsHttpInvokerRequestExecutor(org.apache.http.client.HttpClient httpClient)

  Create a new instance of the HttpComponentsClientHttpRequestFactory with the given `HttpClient` instance.

  Parameters:
    `httpClient` - the HttpClient instance to use for this request executor

Method Detail

### setHttpClient

    public void setHttpClient(org.apache.http.client.HttpClient httpClient)

  Set the `HttpClient` instance to use for this request executor.

### getHttpClient

    public org.apache.http.client.HttpClient getHttpClient()

  Return the `HttpClient` instance that this request executor uses.

### 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
  See Also:
    `DEFAULT_READ_TIMEOUT_MILLISECONDS`

### doExecuteRequest

    protected RemoteInvocationResult doExecuteRequest(HttpInvokerClientConfiguration config,
                                                      java.io.ByteArrayOutputStream baos)
                                               throws java.io.IOException,
                                                      java.lang.ClassNotFoundException

  Execute the given request through the HttpClient.

  This method implements the basic processing workflow: The actual work happens in this class's template methods.

  Specified by:
    `doExecuteRequest` in class `AbstractHttpInvokerRequestExecutor`
  Parameters:
    `config` - the HTTP invoker configuration that specifies the target service
    `baos` - the ByteArrayOutputStream that contains the serialized RemoteInvocation object
  Returns:
    the RemoteInvocationResult object
  Throws:
    `java.io.IOException` - if thrown by I/O operations
    `java.lang.ClassNotFoundException` - if thrown during deserialization
  See Also:
    `createHttpPost(org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration)`, `setRequestBody(org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration, org.apache.http.client.methods.HttpPost, java.io.ByteArrayOutputStream)`, `executeHttpPost(org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration, org.apache.http.client.HttpClient, org.apache.http.client.methods.HttpPost)`, `validateResponse(org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration, org.apache.http.HttpResponse)`, `getResponseBody(org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration, org.apache.http.HttpResponse)`

### createHttpPost

    protected org.apache.http.client.methods.HttpPost createHttpPost(HttpInvokerClientConfiguration config)
                                                              throws java.io.IOException

  Create a HttpPost for the given configuration.

  The default implementation creates a standard HttpPost with "application/x-java-serialized-object" as "Content-Type" header.

  Parameters:
    `config` - the HTTP invoker configuration that specifies the target service
  Returns:
    the HttpPost instance
  Throws:
    `java.io.IOException` - if thrown by I/O methods

### setRequestBody

    protected void setRequestBody(HttpInvokerClientConfiguration config,
                                  org.apache.http.client.methods.HttpPost httpPost,
                                  java.io.ByteArrayOutputStream baos)
                           throws java.io.IOException

  Set the given serialized remote invocation as request body.

  The default implementation simply sets the serialized invocation as the HttpPost's request body. This can be overridden, for example, to write a specific encoding and to potentially set appropriate HTTP request headers.

  Parameters:
    `config` - the HTTP invoker configuration that specifies the target service
    `httpPost` - the HttpPost to set the request body on
    `baos` - the ByteArrayOutputStream that contains the serialized RemoteInvocation object
  Throws:
    `java.io.IOException` - if thrown by I/O methods

### executeHttpPost

    protected org.apache.http.HttpResponse executeHttpPost(HttpInvokerClientConfiguration config,
                                                           org.apache.http.client.HttpClient httpClient,
                                                           org.apache.http.client.methods.HttpPost httpPost)
                                                    throws java.io.IOException

  Execute the given HttpPost instance.

  Parameters:
    `config` - the HTTP invoker configuration that specifies the target service
    `httpClient` - the HttpClient to execute on
    `httpPost` - the HttpPost to execute
  Returns:
    the resulting HttpResponse
  Throws:
    `java.io.IOException` - if thrown by I/O methods

### validateResponse

    protected void validateResponse(HttpInvokerClientConfiguration config,
                                    org.apache.http.HttpResponse response)
                             throws java.io.IOException

  Validate the given response as contained in the HttpPost object, throwing an exception if it does not correspond to a successful HTTP response.

  Default implementation rejects any HTTP status code beyond 2xx, to avoid parsing the response body and trying to deserialize from a corrupted stream.

  Parameters:
    `config` - the HTTP invoker configuration that specifies the target service
    `response` - the resulting HttpResponse to validate
  Throws:
    `java.io.IOException` - if validation failed

### getResponseBody

    protected java.io.InputStream getResponseBody(HttpInvokerClientConfiguration config,
                                                  org.apache.http.HttpResponse httpResponse)
                                           throws java.io.IOException

  Extract the response body from the given executed remote invocation request.

  The default implementation simply fetches the HttpPost's response body stream. If the response is recognized as GZIP response, the InputStream will get wrapped in a GZIPInputStream.

  Parameters:
    `config` - the HTTP invoker configuration that specifies the target service
    `httpResponse` - the resulting HttpResponse to read the response body from
  Returns:
    an InputStream for the response body
  Throws:
    `java.io.IOException` - if thrown by I/O methods
  See Also:
    `isGzipResponse(org.apache.http.HttpResponse)`, `GZIPInputStream`

### isGzipResponse

    protected boolean isGzipResponse(org.apache.http.HttpResponse httpResponse)

  Determine whether the given response indicates a GZIP response.

  The default implementation checks whether the HTTP "Content-Encoding" header contains "gzip" (in any casing).

  Parameters:
    `httpResponse` - the resulting HttpResponse to check
  Returns:
    whether the given response indicates a GZIP response

Overview | Package | Class | Tree | Deprecated | Index | Help
| Spring Framework
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD