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 を返します。
手順
論理ハンドラーを実装するには、以下を行います。
- ハンドラーで必要な「ハンドラーの初期化」ロジックを実装します。
- 「SOAP ハンドラーでのメッセージの処理」ロジックを実装します。
- 「障害メッセージの処理」ロジックを実装します。
-
getHeaders()
メソッドを実装します。 - 終了時にハンドラーの「ハンドラーの終了」を行うロジックを実装します。
- 破棄される前にハンドラーのリソースの「ハンドラーのリリース」を行うロジックを実装します。
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 例外をスローします。