Menu Close

42.2. サービス実装でのコンテキストの操作

概要

コンテキスト情報は、WebServiceContext インターフェースを使用してサービス実装で利用できるようになります。WebServiceContext オブジェクトから、アプリケーションスコープの現在のリクエストのコンテキストプロパティーが反映された MessageContext オブジェクトを取得できます。プロパティーの値を操作でき、応答チェーンを介して伝播して戻されます。

注記

MessageContext インターフェースは java.util.Map インターフェースから継承されます。コンテンツは、マップインターフェースのメソッドを使用して操作できます。

コンテキストの取得

サービス実装でメッセージコンテキストを取得するには、以下を行います。

  1. WebServiceContext 型の変数を宣言します。
  2. 変数に javax.annotation.Resource アノテーションを付け、コンテキスト情報が変数に注入されていることを示します。
  3. getMessageContext() メソッドを使用して WebServiceContext オブジェクトから MessageContext オブジェクトを取得します。

    重要

    getMessageContext()は、@WebMethod アノテーションが付けられたメソッドでのみ使用できます。

例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() メソッド

VgetObjectkey

注記

この 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() メソッド

VputKkeyVvalueClassCastExceptionIllegalArgumentExceptionNullPointerException

設定中のプロパティーがメッセージコンテキストにすでに存在する場合、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 サービス実装コンテキストで使用できるプロパティー

プロパティー名説明

org.apache.cxf.message.Message

PROTOCOL_HEADERS[a]

トランスポート固有のヘッダー情報を指定します。この値は java.util.Map<String, List<String>> として保存されます。

RESPONSE_CODE

コンシューマーに返される応答コードを指定します。この値は Integer オブジェクトとして保存されます。

ENDPOINT_ADDRESS

サービスプロバイダーのアドレスを指定します。この値は String として保存されます。

HTTP_REQUEST_METHOD

リクエストで送信される HTTP 動詞を指定します。この値は String として保存されます。

PATH_INFO

リクエストされているリソースのパスを指定します。この値は String として保存されます。

パスは、URI のホスト名とクエリー文字列の間の部分です。たとえば、エンドポイントの URI が http://cxf.apache.org/demo/widgets の場合、パスは /demo/widgets になります。

QUERY_STRING

リクエストの呼び出しに使用する URI にアタッチされたクエリがある場合は、そのクエリーを指定します。この値は String として保存されます。

クエリーは、URI の最後の ? の後に表示されます。たとえば、http://cxf.apache.org/demo/widgets?color にリクエストが行われた場合、クエリーは color になります。

MTOM_ENABLED

サービスプロバイダーが SOAP アタッチメントに MTOM を使用できるかどうかを指定します。この値は Boolean として保存されます。

SCHEMA_VALIDATION_ENABLED

サービスプロバイダーがスキーマに対してメッセージを検証するかどうかを指定します。この値は Boolean として保存されます。

FAULT_STACKTRACE_ENABLED

ランタイムが、障害メッセージと共にスタックトレースを提供するかどうかを指定します。この値は Boolean として保存されます。

CONTENT_TYPE

メッセージの MIME タイプを指定します。この値は String として保存されます。

BASE_PATH

リクエストされているリソースのパスを指定します。この値は java.net.URL として保存されます。

パスは、URI のホスト名とクエリー文字列の間の部分です。たとえば、エンドポイントの URL が http://cxf.apache.org/demo/widgets の場合、ベースパスは /demo/widgets になります。

ENCODING

メッセージのエンコーディングを指定します。この値は String として保存されます。

FIXED_PARAMETER_ORDER

パラメーターを特定の順序でメッセージに表示する必要があるかどうかを指定します。この値は Boolean として保存されます。

MAINTAIN_SESSION

今後のリクエストのために、コンシューマーが現在のセッションを維持するかどうかを指定します。この値は Boolean として保存されます。

WSDL_DESCRIPTION

実装されているサービスを定義する WSDL ドキュメントを指定します。この値は org.xml.sax.InputSource オブジェクトとして保存されます。

WSDL_SERVICE

実装されているサービスを定義する wsdl:service 要素の修飾名を指定します。この値は QName として保存されます。

WSDL_PORT

サービスにアクセスするのに使用するエンドポイントを定義する wsdl:port 要素の修飾名を指定します。この値は QName として保存されます。

WSDL_INTERFACE

実装されているサービスを定義する wsdl:portType 要素の修飾名を指定します。この値は QName として保存されます。

WSDL_OPERATION

コンシューマーによって呼び出される操作に対応する wsdl:operation 要素の修飾名を指定します。この値は QName として保存されます。

javax.xml.ws.handler.MessageContext

MESSAGE_OUTBOUND_PROPERTY

メッセージがアウトバウンドであるかどうかを指定します。この値は Boolean として保存されます。true は、メッセージがアウトバウンドであることを指定します。

INBOUND_MESSAGE_ATTACHMENTS

リクエストメッセージに含まれるアタッチメントを含めます。この値は java.util.Map<String, DataHandler> として保存されます。

マップのキーの値は、ヘッダーの MIME Content-ID です。

OUTBOUND_MESSAGE_ATTACHMENTS

応答メッセージのアタッチメントを含めます。この値は java.util.Map<String, DataHandler> として保存されます。

マップのキーの値は、ヘッダーの MIME Content-ID です。

WSDL_DESCRIPTION

実装されているサービスを定義する WSDL ドキュメントを指定します。この値は org.xml.sax.InputSource オブジェクトとして保存されます。

WSDL_SERVICE

実装されているサービスを定義する wsdl:service 要素の修飾名を指定します。この値は QName として保存されます。

WSDL_PORT

サービスにアクセスするのに使用するエンドポイントを定義する wsdl:port 要素の修飾名を指定します。この値は QName として保存されます。

WSDL_INTERFACE

実装されているサービスを定義する wsdl:portType 要素の修飾名を指定します。この値は QName として保存されます。

WSDL_OPERATION

コンシューマーによって呼び出される操作に対応する wsdl:operation 要素の修飾名を指定します。この値は QName として保存されます。

HTTP_RESPONSE_CODE

コンシューマーに返される応答コードを指定します。この値は Integer オブジェクトとして保存されます。

HTTP_REQUEST_HEADERS

リクエストの HTTP ヘッダーを指定します。この値は java.util.Map<String, List<String>> として保存されます。

HTTP_RESPONSE_HEADERS

応答の HTTP ヘッダーを指定します。この値は java.util.Map<String, List<String>> として保存されます。

HTTP_REQUEST_METHOD

リクエストで送信される HTTP 動詞を指定します。この値は String として保存されます。

SERVLET_REQUEST

サーブレットのリクエストオブジェクトを含めます。この値は javax.servlet.http.HttpServletRequest として保存されます。

SERVLET_RESPONSE

サーブレットの応答オブジェクトを含めます。この値は javax.servlet.http.HttpResponse として保存されます。

SERVLET_CONTEXT

サーブレットのコンテキストオブジェクトを含めます。この値は javax.servlet.ServletContext として保存されます。

PATH_INFO

リクエストされているリソースのパスを指定します。この値は String として保存されます。

パスは、URI のホスト名とクエリー文字列の間の部分です。たとえば、エンドポイントの URL が http://cxf.apache.org/demo/widgets の場合、パスは /demo/widgets になります。

QUERY_STRING

リクエストの呼び出しに使用する URI にアタッチされたクエリがある場合は、そのクエリーを指定します。この値は String として保存されます。

クエリーは、URI の最後の ? の後に表示されます。たとえば、http://cxf.apache.org/demo/widgets?color にリクエストが行われた場合、クエリー文字列は color になります。

REFERENCE_PARAMETERS

WS-Addressing の参照パラメーターを指定します。これには、wsa:IsReferenceParameter 属性が true に設定されているすべての SOAP ヘッダーが含まれます。この値は java.util.List として保存されます。

org.apache.cxf.transport.jms.JMSConstants

JMS_SERVER_HEADERS

JMS メッセージヘッダーを含めます。詳細は、「JMS メッセージプロパティーの操作」を参照してください。

[a] HTTP を使用する場合、このプロパティーは標準の JAX-WS に定義されたプロパティーと同じです。