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