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 を返します。

手順

論理ハンダーを実装するには、次のようにします。

  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 は例外を理解する必要があります。