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()
を実装する必要があります。この追加のメソッドは、ハンドラーが処理できるヘッダーブロックの QName を返します。
手順
論理ハンダーを実装するには、次のようにします。
- ハンドラーに必要な 「ハンドラーの初期化」 ロジックの実装。
- 「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 は例外を理解する必要があります。