public class HttpComponentsHttpInvokerRequestExecutor extends AbstractHttpInvokerRequestExecutor
HttpInvokerRequestExecutor
実装。 事前に構成された HttpClient
インスタンスを使用できるようにします。認証、HTTP 接続プールなどを使用することもできます。また、特定のテンプレートメソッドを提供して、サブクラス化が容易になるように設計されています。
Spring 4.1 の時点で、このリクエスト実行者には Apache HttpComponents 4.3 以上が必要です。
SimpleHttpInvokerRequestExecutor
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
コンストラクターと説明 |
---|
HttpComponentsHttpInvokerRequestExecutor() デフォルトの org.apache.http.impl.conn.PoolingClientConnectionManager を使用するデフォルトの HttpClient を使用して、HttpComponentsHttpInvokerRequestExecutor の新しいインスタンスを作成します。 |
HttpComponentsHttpInvokerRequestExecutor(HttpClient httpClient) 指定された HttpClient インスタンスを使用して、HttpComponentsClientHttpRequestFactory の新しいインスタンスを作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
protected HttpPost | createHttpPost(HttpInvokerClientConfiguration config) 指定された構成の HttpPost を作成します。 |
protected RequestConfig | createRequestConfig(HttpInvokerClientConfiguration config) 指定された構成の RequestConfig を作成します。 |
protected RemoteInvocationResult | doExecuteRequest(HttpInvokerClientConfiguration config, ByteArrayOutputStreamSE baos) HttpClient を介して指定されたリクエストを実行します。 |
protected org.apache.http.HttpResponse | executeHttpPost(HttpInvokerClientConfiguration config, HttpClient httpClient, HttpPost httpPost) 指定された HttpPost インスタンスを実行します。 |
HttpClient | getHttpClient() このリクエストエグゼキュータが使用する HttpClient インスタンスを返します。 |
protected InputStreamSE | getResponseBody(HttpInvokerClientConfiguration config, org.apache.http.HttpResponse httpResponse) 指定された実行済みのリモート呼び出しリクエストからレスポンス本文を抽出します。 |
protected boolean | isGzipResponse(org.apache.http.HttpResponse httpResponse) 指定されたレスポンスが GZIP レスポンスを示しているかどうかを判別します。 |
void | setConnectionRequestTimeout(int connectionRequestTimeout) 基礎となる HttpClient を使用して接続マネージャーから接続をリクエストするときに使用されるタイムアウトをミリ秒単位で設定します。 |
void | setConnectTimeout(int timeout) 基になる HttpClient の接続タイムアウトを設定します。 |
void | setHttpClient(HttpClient httpClient) このリクエストエグゼキュータに使用する HttpClient インスタンスを設定します。 |
void | setReadTimeout(int timeout) 基になる HttpClient のソケット読み取りタイムアウトを設定します。 |
protected void | setRequestBody(HttpInvokerClientConfiguration config, HttpPost httpPost, ByteArrayOutputStreamSE baos) 指定された直列化されたリモート呼び出しをリクエスト本文として設定します。 |
protected void | validateResponse(HttpInvokerClientConfiguration config, org.apache.http.HttpResponse response) 指定されたレスポンスを HttpPost オブジェクトに含まれているものとして検証し、成功した HTTP レスポンスに対応していない場合は例外をスローします。 |
createObjectInputStream, decorateInputStream, decorateOutputStream, doReadRemoteInvocationResult, doWriteRemoteInvocation, executeRequest, getBeanClassLoader, getByteArrayOutputStream, getContentType, isAcceptGzipEncoding, readRemoteInvocationResult, setAcceptGzipEncoding, setBeanClassLoader, setContentType, writeRemoteInvocation
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public HttpComponentsHttpInvokerRequestExecutor()
org.apache.http.impl.conn.PoolingClientConnectionManager
を使用するデフォルトの HttpClient
を使用して、HttpComponentsHttpInvokerRequestExecutor の新しいインスタンスを作成します。public HttpComponentsHttpInvokerRequestExecutor(HttpClient httpClient)
HttpClient
インスタンスを使用して、HttpComponentsClientHttpRequestFactory の新しいインスタンスを作成します。httpClient
- このリクエストエグゼキュータに使用する HttpClient インスタンス public void setHttpClient(HttpClient httpClient)
HttpClient
インスタンスを設定します。public HttpClient getHttpClient()
HttpClient
インスタンスを返します。public void setConnectTimeout(int timeout)
カスタム HttpClient
で RequestConfig
インスタンスを指定することにより、追加のプロパティを設定できます。
timeout
- ミリ秒単位のタイムアウト値 RequestConfig.getConnectTimeout()
public void setConnectionRequestTimeout(int connectionRequestTimeout)
カスタム HttpClient
で RequestConfig
インスタンスを指定することにより、追加のプロパティを設定できます。
connectionRequestTimeout
- ミリ秒単位の接続をリクエストするタイムアウト値 RequestConfig.getConnectionRequestTimeout()
public void setReadTimeout(int timeout)
カスタム HttpClient
で RequestConfig
インスタンスを指定することにより、追加のプロパティを設定できます。
timeout
- ミリ秒単位のタイムアウト値 DEFAULT_READ_TIMEOUT_MILLISECONDS
, RequestConfig.getSocketTimeout()
protected RemoteInvocationResult doExecuteRequest(HttpInvokerClientConfiguration config, ByteArrayOutputStreamSE baos) throws IOExceptionSE, ClassNotFoundExceptionSE
このメソッドは、基本的な処理ワークフローを実装します。実際の作業は、このクラスのテンプレートメソッドで行われます。
AbstractHttpInvokerRequestExecutor
の doExecuteRequest
config
- ターゲットサービスを指定する HTTP インボーカー構成 baos
- 直列化された RemoteInvocation オブジェクトを含む ByteArrayOutputStreamIOExceptionSE
- I/O 操作によってスローされた場合 ClassNotFoundExceptionSE
- 逆直列化中にスローされた場合 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)
protected HttpPost createHttpPost(HttpInvokerClientConfiguration config) throws IOExceptionSE
デフォルトの実装では、"application/x-java-serialized-object" を "Content-Type" ヘッダーとして持つ標準の HttpPost が作成されます。
config
- ターゲットサービスを指定する HTTP インボーカー構成 IOExceptionSE
- I/O メソッドによってスローされた場合 @Nullable protected RequestConfig createRequestConfig(HttpInvokerClientConfiguration config)
RequestConfig
を作成します。null
を返して、カスタムリクエスト構成を設定せず、HttpClient
のデフォルトを使用する必要があることを示すことができます。デフォルトの実装では、クライアントのデフォルトとインスタンスのローカルカスタマイズ(ある場合)をマージしようとします。
config
- ターゲットサービスを指定する HTTP インボーカー構成 protected void setRequestBody(HttpInvokerClientConfiguration config, HttpPost httpPost, ByteArrayOutputStreamSE baos) throws IOExceptionSE
デフォルトの実装では、直列化された呼び出しを HttpPost のリクエスト本文として設定するだけです。これは、たとえば、特定のエンコーディングを記述したり、適切な HTTP リクエストヘッダーを設定したりするためにオーバーライドできます。
config
- ターゲットサービスを指定する HTTP インボーカー構成 httpPost
- リクエスト本文を設定する HttpPostbaos
- 直列化された RemoteInvocation オブジェクトを含む ByteArrayOutputStreamIOExceptionSE
- I/O メソッドによってスローされた場合 protected org.apache.http.HttpResponse executeHttpPost(HttpInvokerClientConfiguration config, HttpClient httpClient, HttpPost httpPost) throws IOExceptionSE
config
- ターゲットサービスを指定する HTTP インボーカー構成 httpClient
- 実行する HttpClienthttpPost
- 実行する HttpPostIOExceptionSE
- I/O メソッドによってスローされた場合 protected void validateResponse(HttpInvokerClientConfiguration config, org.apache.http.HttpResponse response) throws IOExceptionSE
デフォルトの実装では、2xx を超える HTTP ステータスコードはすべて拒否されます。これにより、レスポンス本文の解析や破損したストリームからの逆直列化の試行が回避されます。
config
- ターゲットサービスを指定する HTTP インボーカー構成 response
- 検証する結果の HttpResponseIOExceptionSE
- 検証に失敗した場合 protected InputStreamSE getResponseBody(HttpInvokerClientConfiguration config, org.apache.http.HttpResponse httpResponse) throws IOExceptionSE
デフォルトの実装では、単に HttpPost のレスポンス本文ストリームをフェッチします。レスポンスが GZIP レスポンスとして認識されると、InputStream は GZIPInputStream にラップされます。
config
- ターゲットサービスを指定する HTTP インボーカー構成 httpResponse
- 結果の HttpResponse からレスポンス本体を読み取る IOExceptionSE
- I/O メソッドによってスローされた場合 isGzipResponse(org.apache.http.HttpResponse)
, GZIPInputStream
SEprotected boolean isGzipResponse(org.apache.http.HttpResponse httpResponse)
デフォルトの実装では、HTTP の "Content-Encoding" ヘッダーに "gzip" が含まれているかどうかを確認します(大文字と小文字を区別)。
httpResponse
- チェックする結果の HttpResponse