42.2. サービス実装でのコンテキストの操作
概要
コンテキスト情報は、WebServiceContext インターフェイスを使用してサービス実装で利用できるようになります。WebServiceContext オブジェクトから、アプリケーションスコープの現在のリクエストのコンテキストプロパティーが反映された MessageContext
オブジェクトを取得できます。プロパティーの値を操作することができ、それらは応答チェーンを介して伝播されます。
MessageContext インターフェイスは、java.util.Map インターフェイスを継承します。その内容は、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「サービス実装コンテキストで使用可能なプロパティー」 サービス実装オブジェクトのコンテキストを介してアクセス可能なプロパティーをリスト表示します。
プロパティー名 | 説明 |
---|---|
| |
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 定義のプロパティーと同じです。
|