このトピックでは、受信または送信 Web サービス メッセージに処理層を追加するためにサービス コントロールにハンドラを登録する方法について説明します。サービス コントロール ハンドラは通常、メッセージまたはログ情報を調査または変更する際に使用されます。
ハンドラを使用して SOAP ヘッダで mustUnderstand 属性を処理する方法については、「メッセージ ハンドラを使用した SOAP ヘッダの処理」を参照してください。
Workshop サービス コントロールでは、JAX-RPC handler API をサポートしています。
サービス コントロールにハンドラを登録する主な方法では、@ServiceControl.Handler アノテーションを次のように使用します。
... @ControlExtension @ServiceControl.Handler(operation={"client.ClientHandler"}) public interface TargetServiceControl extends ServiceControl { ...
この operation 属性は、サービス コントロールがメッセージを送受信する際に呼び出されるハンドラのクラス名を指定する文字列配列である点に注意してください。この配列は、file 属性で指定されるハンドラ コンフィグレーション ファイルで定義されている <handler-chain> の名前、またはハンドラ クラスの名前をスペースで区切ったリストにすることができます。ハンドラ クラスはすべて javax.xml.rpc.handler.Handler インタフェースを実装する必要があります。(簡単に実装するには、GenericHandler をサブクラス化します)。
ハンドラ チェーンのコンフィグレーション ファイルは、次に示すように file 属性を使用して指定できます。
@ServiceControl.Handler(file={"handlerConfig.xml"})
ハンドラ コンフィグレーション ファイルは、ハンドラ、ハンドラ チェーン、およびハンドラ初期化データを定義する XML ファイルです。ハンドラ コンフィグレーション XML ファイルは、ハンドラ チェーン コンフィグレーション ファイルのスキーマに準拠する必要があります。このスキーマについては、『JSR-181: Web Services Metadata for the Java Platform』の「Appendix B」を参照してください。
ハンドラ コンフィグレーション ファイルは、Workshop ハンドラ コンフィグレーション スキーマに準拠する XML ファイルです。次に、ハンドラ コンフィグレーション ファイルの例を示します。
<?xml version="1.0" encoding="UTF-8"?> <handler-config xmlns="http://www.bea.com/xml/ns/jws" xmlns:j2ee="http://java.sun.com/xml/ns/j2ee"> <handler-chain> <handler-chain-name>HandlerChain</handler-chain-name> <handler> <j2ee:handler-name>handler1</j2ee:handler-name> <j2ee:handler-class>service.MyHandler</j2ee:handler-class> </handler> </handler-chain> </handler-config>
各 <handler> 要素の handler-class 属性は、javax.xml.rpc.handler.Handler インタフェースを実装するハンドラ クラスを参照する必要があります。
指定した <handler> 要素に記述されている任意の <init-param> 要素は、ハンドラの初期化時にハンドラの init() メソッドに渡されます。