13.5.2. JAX-WS 共通 API の参考資料


一部の JAX-WS 開発概念は Web サービスエンドポイントとクライアントの間で共有されます。これには、ハンドラーフレームワーク、メッセージコンテキスト、フォルトハンドリングなどが含まれます。
ハンドラーフレームワーク

ハンドラーフレームワークは JAX-WS プロトコルバインディングにより、サーバーコンポーネントであるクライアントおよびエンドポイントのランタイムに実装されます。プロキシおよび Dispatch のインスタンスは、バインディングプロバイダー と総称されており、それぞれがプロトコルバインディングを使用して抽象機能を特定のプロトコルにバインドします。

クライアントおよびサーバー側のハンドラーはハンドラーチェーンという順序付きリストにまとめられます。ハンドラーチェーン内のハンドラーは、メッセージが送受信されるごとに呼び出されます。受信メッセージは、バインディングプロバイダーが処理する前にハンドラーによって処理されます。送信メッセージはバインディングプロバイダーが処理した後にハンドラーによって処理されます。
ハンドラーはメッセージコンテキストとともに呼び出されます。これは、受信メッセージと送信メッセージにアクセスして変更し、プロパティーセットを管理するメソッドを提供します。メッセージコンテキストのプロパティーは個々のハンドラー間およびハンドラー/クライアント/サービス実装間における通信を円滑化します。ハンドラーのタイプによって、一緒に呼び出されるメッセージコンテキストのタイプが異なります。

メッセージハンドラーのタイプ

論理ハンドラー
論理ハンドラーはメッセージコンテキストプロパティーおよびメッセージペイロードでのみ動作します。論理ハンドラーはプロトコルに依存しないため、メッセージのプロトコル固有の部分は影響を受けません。論理ハンドラーはインターフェース javax.xml.ws.handler.LogicalHandler を実装します。
プロトコルハンドラー
プロトコルハンドラーはメッセージコンテキストおよびプロトコル固有のメッセージでのみ動作します。プロトコルハンドラーは特定のプロトコルに固有で、プロトコル固有のメッセージアスペクトにアクセスし、変更することが可能です。 プロトコルハンドラーは javax.xml.ws.handler.Handler except javax.xml.ws.handler.LogicalHandler から派生する任意のインターフェースを実装します。
サービスエンドポイントハンドラー
サービスエンドポイントでは、ハンドラーは @HandlerChain アノテーションを使用して定義されます。ハンドラーチェーンファイルの場所は、externalForm 内の絶対 java.net.URL、あるいはソースファイルまたはクラスファイルからの相対パスで指定できます。

例13.30 サービスエンドポイントハンドラーの例

@WebService
@HandlerChain(file = "jaxws-server-source-handlers.xml")
public class SOAPEndpointSourceImpl
{
   ...
}

サービスクライアントハンドラー
JAX-WS クライアントでは、ハンドラーは サービスエンドポイント同様に @HandlerChain アノテーションを使用するか、動的に JAX-WS API を使用して定義します。

例13.31 API を使用したサービスクライアントハンドラーの定義

Service service = Service.create(wsdlURL, serviceName);
Endpoint port = (Endpoint)service.getPort(Endpoint.class);
     
BindingProvider bindingProvider = (BindingProvider)port;
List<Handler> handlerChain = new ArrayList<Handler>();
handlerChain.add(new LogHandler());
handlerChain.add(new AuthorizationHandler());
handlerChain.add(new RoutingHandler());
bindingProvider.getBinding().setHandlerChain(handlerChain);
setHandlerChain メソッドへの呼び出しが必要です。
メッセージコンテキスト

MessageContext インターフェースは、全 JAX-WS メッセージコンテキスト用のスーパーインターフェースです。追加のメソッドと定数を使用して Map<String,Object> を拡張し、ハンドラーチェーン内のハンドラーが処理関連の状態を共有できるようにするプロパティーセットを管理します。たとえば、ハンドラーは put メソッドを使用してメッセージコンテキストにプロパティーを挿入することができます。その後、ハンドラーチェーン内の単一または複数のハンドラーは、get メソッドでメッセージを取得できるようになります。

プロパティーは、APPLICATION または HANDLER としてスコープ指定されます。特定のエンドポイントのメッセージ交換パターン (MEP) のインスタンスに対するハンドラーには、すべてのプロパティーを使用できます。たとえば、論理ハンドラーがメッセージコンテキストにプロパティーを追加すると、MET インスタンスの実行中にチェーンの任意のプロトコルハンドラーもそのプロパティーを使用できます。

注記

非同期メッセージ交換パターン (MEP) により、HTTP 接続レベルでのメッセージの非同期的な送受信が可能となります。これは、要求コンテキストに追加のプロパティーを設定することによって有効にできます。
APPLICATION レベルにスコープ指定されているプロパティーは、クライアントアプリケーションとサービスエンドポイントの実装でも使用できます。プロパティーの defaultscopeHANDLER です。
論理メッセージと SOAP メッセージでは使用するコンテキストが異なります。
論理メッセージコンテキスト
論理ハンドラーが呼び出されると、タイプ LogicalMessageContext のメッセージコンテキストを受信します。LogicalMessageContext は、メッセージペイロードを取得および変更するメソッドを使用して MessageContext を拡張します。これは、メッセージのプロトコル固有の部分へのアクセスは提供しません。プロトコルバインディングは、論理メッセージコンテキストを介して使用可能なメッセージコンポーネントを定義します。SOAP バインディングにデプロイされている論理ハンドラーは、SOAP ボディーのコンテンツにアクセス可能ですが、SOAP ヘッダーにはアクセスできません。一方、XML/HTTP バインディングは論理ハンドラーがメッセージの XML ペイロード全体にアクセスできることを定義します。
SOAP メッセージコンテキスト
SOAP ハンドラーが呼び出されると、SOAPMessageContext を受信します。 SOAPMessageContext は SOAP メッセージペイロードを取得および変更するメソッドを使用して MessageContext を拡張します。
フォールトハンドリング

アプリケーションは、SOAPFaultException またはアプリケーション固有のユーザー例外をスローすることがあります。アプリケーション固有のユーザー例外がスローされ、必要なフォールトラッパー (fault wrapper) Bean がデプロイメントの一部となっていない場合は、起動時に生成されます。

例13.32 フォールトハンドリングの例

public void throwSoapFaultException()
{
   SOAPFactory factory = SOAPFactory.newInstance();
   SOAPFault fault = factory.createFault("this is a fault string!", new QName("http://foo", "FooCode"));
   fault.setFaultActor("mr.actor");
   fault.addDetail().addChildElement("test");
   throw new SOAPFaultException(fault);
}
public void throwApplicationException() throws UserException
{
   throw new UserException("validation", 123, "Some validation error");
}
JAX-WS アノテーション

JAX-WS API で使用可能なアノテーションは JSR-224 で定義されています。この定義は http://www.jcp.org/en/jsr/detail?id=224 に記載されています。これらのアノテーションは javax.xml.ws パッケージに含まれています。

JWS API で使用できるアノテーションは、JSR-181 で定義されています。この定義は http://www.jcp.org/en/jsr/detail?id=181 に記載されています。これらのアノテーションは javax.jws パッケージに含まれています。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る