Menu Close

43.4. プロトコルハンドラーの実装

概要

プロトコルハンドラーは、使用中のプロトコルに固有です。Apache CXF は JAX-WS で指定された SOAP プロトコルハンドラーを提供します。SOAP プロトコルハンドラーは、javax.xml.ws.handler.soap.SOAPHandler インターフェースを実装します。

例43.8「SOAPHandler の概要」に示されている SOAPHandler インターフェースは、メッセージへのアクセスを SOAPMessage オブジェクトとして提供する SOAP 固有のメッセージコンテキストを使用します。また、SOAP ヘッダーにアクセスすることもできます。

例43.8 SOAPHandler の概要

public interface SOAPHandler extends Handler
{
  boolean handleMessage(SOAPMessageContext context);
  boolean handleFault(SOAPMessageContext context);
  void close(SOAPMessageContext context);
  Set<QName> getHeaders()
}

SOAP 固有のメッセージコンテキストを使用する他に、SOAP プロトコルハンドラーでは追加のメソッド getHeaders() を実装する必要があります。この追加のメソッドは、ハンドラーが処理できるヘッダーブロックの QNames を返します。

手順

論理ハンドラーを実装するには、以下を行います。

  1. ハンドラーで必要な「ハンドラーの初期化」ロジックを実装します。
  2. 「SOAP ハンドラーでのメッセージの処理」ロジックを実装します。
  3. 「障害メッセージの処理」ロジックを実装します。
  4. getHeaders() メソッドを実装します。
  5. 終了時にハンドラーの「ハンドラーの終了」を行うロジックを実装します。
  6. 破棄される前にハンドラーのリソースの「ハンドラーのリリース」を行うロジックを実装します。

getHeaders() メソッドの実装

例43.9「SOAPHander.getHeaders() メソッド」で示されている getHeaders() メソッドは、ハンドラーが処理する SOAP ヘッダーを Apache CXF ランタイムに通知します。これは、ハンドラーが認識する各 SOAP ヘッダーの外部要素の QName を返します。

例43.9 SOAPHander.getHeaders() メソッド

Set<QName>getHeaders

多くの場合、null を返すだけで十分です。しかし、アプリケーションがいずれかの SOAP ヘッダーの mustUnderstand 属性を使用する場合は、アプリケーションの SOAP ハンドラーが理解するヘッダーを指定することが重要になります。ランタイムは、mustUnderstand 属性が true に設定されたヘッダーのリストから、登録されたすべてのハンドラが認識する SOAP ヘッダーのセットを確認します。フラグ付きのヘッダーのいずれかが認識されたヘッダー一覧にない場合、ランタイムはメッセージを拒否し、SOAP must understand 例外をスローします。