Menu Close
42.2. サービス実装でのコンテキストの操作
概要
コンテキスト情報は、WebServiceContext インターフェースを使用してサービス実装で利用できるようになります。WebServiceContext オブジェクトから、アプリケーションスコープの現在のリクエストのコンテキストプロパティーが反映された MessageContext
オブジェクトを取得できます。プロパティーの値を操作でき、応答チェーンを介して伝播して戻されます。
MessageContext インターフェースは java.util.Map インターフェースから継承されます。コンテンツは、マップインターフェースのメソッドを使用して操作できます。
コンテキストの取得
サービス実装でメッセージコンテキストを取得するには、以下を行います。
例42.2「サービス実装でのコンテキストオブジェクトの取得」に、コンテキストオブジェクトを取得するためのコードを示します。
例42.2 サービス実装でのコンテキストオブジェクトの取得
import javax.xml.ws.*; import javax.xml.ws.handler.*; import javax.annotation.*; @WebServiceProvider public class WidgetServiceImpl { @Resource WebServiceContext wsc; @WebMethod public String getColor(String itemNum) { MessageContext context = wsc.getMessageContext(); } ... }
コンテキストからのプロパティーの読み取り
実装に MessageContext オブジェクトを取得したら、例42.3「MessageContext.get()
メソッド」に記載されている get()
メソッドを使用して、そこに保存されているプロパティーにアクセスできます。
例42.3 MessageContext.get()
メソッド
V
get
Object
key
この get()
は、マップインターフェースから継承されます。
key
パラメーターは、コンテキストから取得するプロパティーを表す文字列です。get()
は、プロパティーの適切な型にキャストする必要があるオブジェクトを返します。表42.1「サービス実装コンテキストで使用できるプロパティー」に、サービス実装のコンテキストで利用可能な多数のプロパティーの一覧を示します。
コンテキストから返されるオブジェクトの値を変更すると、コンテキスト内のプロパティーの値も変更されます。
例42.4「サービスのメッセージコンテキストからのプロパティーの取得」に、呼び出された操作を表す WSDL operation
要素の名前を取得するコードを表示します。
例42.4 サービスのメッセージコンテキストからのプロパティーの取得
import javax.xml.ws.handler.MessageContext; import org.apache.cxf.message.Message; ... // MessageContext context retrieved in a previous example QName wsdl_operation = (QName)context.get(Message.WSDL_OPERATION);
コンテキストでのプロパティーの設定
実装に MessageContext オブジェクトを取得したら、例42.5「MessageContext.put()
メソッド」に記載されている put()
メソッドを使用して、プロパティーを設定し、既存のプロパティーを変更できます。
例42.5 MessageContext.put()
メソッド
V
put
K
key
V
value
ClassCastExceptionIllegalArgumentExceptionNullPointerException
設定中のプロパティーがメッセージコンテキストにすでに存在する場合、put()
メソッドは既存の値を新しい値に置き換え、古い値を返します。プロパティーがメッセージコンテキストにまだ存在しない場合は、put()
メソッドはプロパティーを設定し、null
を返します。
例42.6「サービスのメッセージコンテキストでのプロパティーの取得」に、HTTP リクエストの応答コードを設定するコードを示します。
例42.6 サービスのメッセージコンテキストでのプロパティーの取得
import javax.xml.ws.handler.MessageContext; import org.apache.cxf.message.Message; ... // MessageContext context retrieved in a previous example context.put(Message.RESPONSE_CODE, new Integer(404));
サポートされるコンテキスト
表42.1「サービス実装コンテキストで使用できるプロパティー」に、サービス実装オブジェクトでコンテキストを通じてアクセス可能なプロパティーの一覧を表示します。
表42.1 サービス実装コンテキストで使用できるプロパティー
プロパティー名 | 説明 |
---|---|
| |
PROTOCOL_HEADERS[a] |
トランスポート固有のヘッダー情報を指定します。この値は |
RESPONSE_CODE |
コンシューマーに返される応答コードを指定します。この値は |
ENDPOINT_ADDRESS |
サービスプロバイダーのアドレスを指定します。この値は |
HTTP_REQUEST_METHOD |
リクエストで送信される HTTP 動詞を指定します。この値は |
PATH_INFO |
リクエストされているリソースのパスを指定します。この値は
パスは、URI のホスト名とクエリー文字列の間の部分です。たとえば、エンドポイントの URI が http://cxf.apache.org/demo/widgets の場合、パスは |
QUERY_STRING |
リクエストの呼び出しに使用する URI にアタッチされたクエリがある場合は、そのクエリーを指定します。この値は
クエリーは、URI の最後の |
MTOM_ENABLED |
サービスプロバイダーが SOAP アタッチメントに MTOM を使用できるかどうかを指定します。この値は |
SCHEMA_VALIDATION_ENABLED |
サービスプロバイダーがスキーマに対してメッセージを検証するかどうかを指定します。この値は |
FAULT_STACKTRACE_ENABLED |
ランタイムが、障害メッセージと共にスタックトレースを提供するかどうかを指定します。この値は |
CONTENT_TYPE |
メッセージの MIME タイプを指定します。この値は |
BASE_PATH |
リクエストされているリソースのパスを指定します。この値は
パスは、URI のホスト名とクエリー文字列の間の部分です。たとえば、エンドポイントの URL が http://cxf.apache.org/demo/widgets の場合、ベースパスは |
ENCODING |
メッセージのエンコーディングを指定します。この値は |
FIXED_PARAMETER_ORDER |
パラメーターを特定の順序でメッセージに表示する必要があるかどうかを指定します。この値は |
MAINTAIN_SESSION |
今後のリクエストのために、コンシューマーが現在のセッションを維持するかどうかを指定します。この値は |
WSDL_DESCRIPTION |
実装されているサービスを定義する WSDL ドキュメントを指定します。この値は |
WSDL_SERVICE |
実装されているサービスを定義する |
WSDL_PORT |
サービスにアクセスするのに使用するエンドポイントを定義する |
WSDL_INTERFACE |
実装されているサービスを定義する |
WSDL_OPERATION |
コンシューマーによって呼び出される操作に対応する |
| |
MESSAGE_OUTBOUND_PROPERTY |
メッセージがアウトバウンドであるかどうかを指定します。この値は |
INBOUND_MESSAGE_ATTACHMENTS |
リクエストメッセージに含まれるアタッチメントを含めます。この値は マップのキーの値は、ヘッダーの MIME Content-ID です。 |
OUTBOUND_MESSAGE_ATTACHMENTS |
応答メッセージのアタッチメントを含めます。この値は マップのキーの値は、ヘッダーの MIME Content-ID です。 |
WSDL_DESCRIPTION |
実装されているサービスを定義する WSDL ドキュメントを指定します。この値は |
WSDL_SERVICE |
実装されているサービスを定義する |
WSDL_PORT |
サービスにアクセスするのに使用するエンドポイントを定義する |
WSDL_INTERFACE |
実装されているサービスを定義する |
WSDL_OPERATION |
コンシューマーによって呼び出される操作に対応する |
HTTP_RESPONSE_CODE |
コンシューマーに返される応答コードを指定します。この値は |
HTTP_REQUEST_HEADERS |
リクエストの HTTP ヘッダーを指定します。この値は |
HTTP_RESPONSE_HEADERS |
応答の HTTP ヘッダーを指定します。この値は |
HTTP_REQUEST_METHOD |
リクエストで送信される HTTP 動詞を指定します。この値は |
SERVLET_REQUEST |
サーブレットのリクエストオブジェクトを含めます。この値は |
SERVLET_RESPONSE |
サーブレットの応答オブジェクトを含めます。この値は |
SERVLET_CONTEXT |
サーブレットのコンテキストオブジェクトを含めます。この値は |
PATH_INFO |
リクエストされているリソースのパスを指定します。この値は
パスは、URI のホスト名とクエリー文字列の間の部分です。たとえば、エンドポイントの URL が http://cxf.apache.org/demo/widgets の場合、パスは |
QUERY_STRING |
リクエストの呼び出しに使用する URI にアタッチされたクエリがある場合は、そのクエリーを指定します。この値は
クエリーは、URI の最後の |
REFERENCE_PARAMETERS |
WS-Addressing の参照パラメーターを指定します。これには、 |
| |
JMS_SERVER_HEADERS | JMS メッセージヘッダーを含めます。詳細は、「JMS メッセージプロパティーの操作」を参照してください。 |
[a]
HTTP を使用する場合、このプロパティーは標準の JAX-WS に定義されたプロパティーと同じです。
|