public class SimpleHttpInvokerRequestExecutor extends AbstractHttpInvokerRequestExecutor
HttpInvokerRequestExecutor
実装。HTTP 認証や高度な構成オプションはサポートされていません。 特定のテンプレートメソッドをカスタマイズして、簡単にサブクラス化できるように設計されています。ただし、より高度なニーズについては HttpComponentsHttpInvokerRequestExecutor
を検討してください。標準の HttpURLConnection
クラスは、その機能がかなり制限されています。
HttpURLConnection
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
コンストラクターと説明 |
---|
SimpleHttpInvokerRequestExecutor() |
修飾子と型 | メソッドと説明 |
---|---|
protected RemoteInvocationResult | doExecuteRequest(HttpInvokerClientConfiguration config, java.io.ByteArrayOutputStream baos) 標準の HttpURLConnection を介して指定されたリクエストを実行します。 |
protected boolean | isGzipResponse(java.net.HttpURLConnection con) 指定されたレスポンスが GZIP レスポンスかどうかを判別します。 |
protected java.net.HttpURLConnection | openConnection(HttpInvokerClientConfiguration config) 指定されたリモート呼び出しリクエストの HttpURLConnection を開きます。 |
protected void | prepareConnection(java.net.HttpURLConnection connection, int contentLength) 指定された HTTP 接続を準備します。 |
protected java.io.InputStream | readResponseBody(HttpInvokerClientConfiguration config, java.net.HttpURLConnection con) 指定された実行済みのリモート呼び出しリクエストからレスポンス本文を抽出します。 |
void | setConnectTimeout(int connectTimeout) 基礎となる URLConnection の接続タイムアウトを設定します(ミリ秒単位)。 |
void | setReadTimeout(int readTimeout) 基礎となる URLConnection の読み取りタイムアウトを設定します(ミリ秒単位)。 |
protected void | validateResponse(HttpInvokerClientConfiguration config, java.net.HttpURLConnection con) 指定されたレスポンスを HttpURLConnection オブジェクトに含まれているものとして検証し、成功した HTTP レスポンスに対応していない場合は例外をスローします。 |
protected void | writeRequestBody(HttpInvokerClientConfiguration config, java.net.HttpURLConnection con, java.io.ByteArrayOutputStream baos) 指定された直列化されたリモート呼び出しをリクエスト本文として設定します。 |
createObjectInputStream, decorateInputStream, decorateOutputStream, doReadRemoteInvocationResult, doWriteRemoteInvocation, executeRequest, getBeanClassLoader, getByteArrayOutputStream, getContentType, isAcceptGzipEncoding, readRemoteInvocationResult, setAcceptGzipEncoding, setBeanClassLoader, setContentType, writeRemoteInvocation
public void setConnectTimeout(int connectTimeout)
デフォルトは、システムのデフォルトのタイムアウトです。
URLConnection.setConnectTimeout(int)
public void setReadTimeout(int readTimeout)
デフォルトは、システムのデフォルトのタイムアウトです。
URLConnection.setReadTimeout(int)
protected RemoteInvocationResult doExecuteRequest(HttpInvokerClientConfiguration config, java.io.ByteArrayOutputStream baos) throws java.io.IOException, java.lang.ClassNotFoundException
HttpURLConnection
を介して指定されたリクエストを実行します。このメソッドは、基本的な処理ワークフローを実装します。実際の作業は、このクラスのテンプレートメソッドで行われます。
AbstractHttpInvokerRequestExecutor
の doExecuteRequest
config
- ターゲットサービスを指定する HTTP インボーカー構成 baos
- 直列化された RemoteInvocation オブジェクトを含む ByteArrayOutputStreamjava.io.IOException
- I/O 操作によってスローされた場合 java.lang.ClassNotFoundException
- 逆直列化中にスローされた場合 openConnection(org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration)
, prepareConnection(java.net.HttpURLConnection, int)
, writeRequestBody(org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration, java.net.HttpURLConnection, java.io.ByteArrayOutputStream)
, validateResponse(org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration, java.net.HttpURLConnection)
, readResponseBody(org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration, java.net.HttpURLConnection)
protected java.net.HttpURLConnection openConnection(HttpInvokerClientConfiguration config) throws java.io.IOException
HttpURLConnection
を開きます。config
- ターゲットサービスを指定する HTTP インボーカー構成 java.io.IOException
- I/O メソッドによってスローされた場合 URL.openConnection()
protected void prepareConnection(java.net.HttpURLConnection connection, int contentLength) throws java.io.IOException
デフォルトの実装では、POST をメソッドとして、"application/x-java-serialized-object" を "Content-Type" ヘッダーとして、指定されたコンテンツの長さを "Content-Length" ヘッダーとして指定しています。
connection
- 準備する HTTP 接続 contentLength
- 送信するコンテンツの長さ java.io.IOException
- HttpURLConnection メソッドによってスローされた場合 HttpURLConnection.setRequestMethod(java.lang.String)
, URLConnection.setRequestProperty(java.lang.String, java.lang.String)
protected void writeRequestBody(HttpInvokerClientConfiguration config, java.net.HttpURLConnection con, java.io.ByteArrayOutputStream baos) throws java.io.IOException
デフォルトの実装では、シリアライズされた呼び出しを HttpURLConnection の OutputStream に書き込むだけです。これをオーバーライドして、たとえば、特定のエンコーディングを記述し、適切な HTTP リクエストヘッダーを設定することができます。
config
- ターゲットサービスを指定する HTTP インボーカー構成 con
- リクエストの本文を書き込む HttpURLConnectionbaos
- 直列化された RemoteInvocation オブジェクトを含む ByteArrayOutputStreamjava.io.IOException
- I/O メソッドによってスローされた場合 URLConnection.getOutputStream()
, URLConnection.setRequestProperty(java.lang.String, java.lang.String)
protected void validateResponse(HttpInvokerClientConfiguration config, java.net.HttpURLConnection con) throws java.io.IOException
HttpURLConnection
オブジェクトに含まれているものとして検証し、成功した HTTP レスポンスに対応していない場合は例外をスローします。デフォルトの実装では、2xx を超える HTTP ステータスコードはすべて拒否されます。これにより、レスポンス本文の解析や破損したストリームからの逆直列化の試行が回避されます。
config
- ターゲットサービスを指定する HTTP インボーカー構成 con
- 検証する HttpURLConnectionjava.io.IOException
- 検証に失敗した場合 HttpURLConnection.getResponseCode()
protected java.io.InputStream readResponseBody(HttpInvokerClientConfiguration config, java.net.HttpURLConnection con) throws java.io.IOException
デフォルトの実装は、HttpURLConnection の InputStream から直列化された呼び出しを読み取るだけです。レスポンスが GZIP レスポンスとして認識されると、InputStream は GZIPInputStream にラップされます。
config
- ターゲットサービスを指定する HTTP インボーカー構成 con
- レスポンス本文を読み取る HttpURLConnectionjava.io.IOException
- I/O メソッドによってスローされた場合 isGzipResponse(java.net.HttpURLConnection)
, GZIPInputStream
、URLConnection.getInputStream()
、HttpURLConnection.getHeaderField(int)
、HttpURLConnection.getHeaderFieldKey(int)
protected boolean isGzipResponse(java.net.HttpURLConnection con)
デフォルトの実装では、HTTP の "Content-Encoding" ヘッダーに "gzip" が含まれているかどうかを確認します(大文字と小文字の区別なく)。
con
- チェックする HttpURLConnection