59.3. プログラムによるインターセプターの追加
59.3.1. インターセプターの追加方法 リンクのコピーリンクがクリップボードにコピーされました!
インターセプターは、以下のいずれかの方法を使用してプログラム的にエンドポイントに割り当てることができます。
- InterceptorProvider API
- Java アノテーション
InterceptorProvider API を使用すると、開発者はインターセプターチェーンを持つ任意のランタイムコンポーネントにインターセプターを割り当てることができますが、基礎となる Apache CXF クラスを使用する必要があります。Java アノテーションはサービスインターフェイスまたはサービス実装にのみ追加できますが、開発者は JAX-WS API または JAX-RS API 内だけで作業を行えるようにできます。
59.3.2. インターセプタープロバイダー API の使用 リンクのコピーリンクがクリップボードにコピーされました!
概要 リンクのコピーリンクがクリップボードにコピーされました!
インターセプターは、インターセプタープロバイダーインターフェイス に示されている InterceptorProvider インターフェイスを実装するコンポーネントであればどれでも登録できます。
インターセプタープロバイダーインターフェイス
インターフェイスの 4 つのメソッドにより、エンドポイントのインターセプターチェーンを Java List
オブジェクトとして取得できます。Java List
オブジェクトによって提供されるメソッドを使用することで、開発者は任意のチェーンにインターセプターを追加および削除できます。
手順 リンクのコピーリンクがクリップボードにコピーされました!
InterceptorProvider API を使用してインターセプターをランタイムコンポーネントのインターセプターチェーンに割り当てるには、以下を実行する必要があります。
インターセプターが割り当てられるチェーンを使用してランタイムコンポーネントへのアクセスを取得します。
開発者は、Apache CXF 固有の API を使用して標準の Java アプリケーションコードからランタイムコンポーネントにアクセスする必要があります。ランタイムコンポーネントは通常、JAX-WS または JAX-RS アーティファクトを基盤の Apache CXF オブジェクトにキャストすることでアクセスできます。
- インターセプターのインスタンスを作成します。
- 適切な get メソッドを使用して、目的のインターセプターチェーンを取得します。
List
オブジェクトのadd()
メソッドを使用してインターセプターをインターセプターチェーンにアタッチします。通常、このステップはインターセプターチェーンの取得と組み合わされます。
インターセプターをコンシューマーに取り付け リンクのコピーリンクがクリップボードにコピーされました!
プログラムでコンシューマーにインターセプターを取り付け は、JAX-WS コンシューマーのインバウンドインターセプターチェーンにインターセプターを割り当てるコードです。
プログラムでコンシューマーにインターセプターを取り付け
プログラムでコンシューマーにインターセプターを取り付け のコードは、以下を行います。
コンシューマーの JAX-WS Service
オブジェクトを作成します。
コンシューマーのターゲットアドレスを提供する Service
オブジェクトにポートを追加します。
サービスプロバイダーでメソッドを呼び出すために使用されるプロキシーを作成します。
プロキシーを org.apache.cxf.endpoint.Client
型にキャストします。
インターセプターのインスタンスを作成します。
インターセプターをインバウンドインターセプターチェーンに割り当てます。
インターセプターのサービスプロバイダーへの割り当て リンクのコピーリンクがクリップボードにコピーされました!
プログラムを使用したインターセプターのサービスプロバイダーへの割り当て は、サービスプロバイダーのアウトバウンドインターセプターチェーンにインターセプターを割り当てるコードです。
プログラムを使用したインターセプターのサービスプロバイダーへの割り当て
プログラムを使用したインターセプターのサービスプロバイダーへの割り当て のコードは、以下を行います。
基盤となる Apache CXF オブジェクトへのアクセスを提供する ServerFactoryBean
オブジェクトを作成します。
Apache CXF がエンドポイントを表すために使用する Server
オブジェクトを取得します。
サービスプロバイダーの Apache CXF EndpointImpl
オブジェクトを取得します。
インターセプターのインスタンスを作成します。
エンドポイントのアウトバウンドインターセプターチェーンにインターセプターを割り当てます。
バスへのインターセプターの取り付け リンクのコピーリンクがクリップボードにコピーされました!
バスへのインターセプターの取り付け は、バスのインバウンドインターセプターチェーンにインターセプターを割り当てるコードです。
バスへのインターセプターの取り付け
バスへのインターセプターの取り付け のコードは、以下を行います。
ランタイムインスタンスのデフォルトのバスを取得します。
インターセプターのインスタンスを作成します。
インターセプターをインバウンドインターセプターチェーンに割り当てます。
WatchInterceptor
は、ランタイムインスタンスによって作成されるすべてのエンドポイントのインバウンドインターセプターチェーンにアタッチされます。
59.3.3. Java アノテーションの使用 リンクのコピーリンクがクリップボードにコピーされました!
概要 リンクのコピーリンクがクリップボードにコピーされました!
Apache CXF は、開発者がエンドポイントによって使用されるインターセプターチェーンを指定できるように、4 つの Java アノテーションを提供します。インターセプターをエンドポイントに割り当てる他の手段とは異なり、アノテーションはアプリケーションレベルのアーティファクトに割り当てられます。使用するアーティファクトにより、アノテーションの影響範囲が決まります。
アノテーションを配置する場所 リンクのコピーリンクがクリップボードにコピーされました!
アノテーションは以下のアーティファクトに配置できます。
エンドポイントを定義するサービスエンドポイントインターフェイス (SEI)
アノテーションが SEI に配置されると、インターフェイスを実装するサービスプロバイダーすべてと、プロキシーの作成に SEI を使用するコンシューマーすべてに影響があります。
サービス実装クラス
アノテーションが実装クラスに配置されると、実装クラスを使用するすべてのサービスプロバイダーが影響を受けます。
アノテーション リンクのコピーリンクがクリップボードにコピーされました!
アノテーションはすべて org.apache.cxf.interceptor パッケージにあり、表59.2「インターセプターチェーンアノテーション」 で説明されています。
インターセプターのリスト表示 リンクのコピーリンクがクリップボードにコピーされました!
インターセプターのリストは、チェーンアノテーションでインターセプターをリスト表示する構文 に記載されている構文を使用して、完全修飾クラス名のリストとして指定されます。
チェーンアノテーションでインターセプターをリスト表示する構文
interceptors={"interceptor1", "interceptor2", ..., "interceptorN"}
interceptors={"interceptor1", "interceptor2", ..., "interceptorN"}
例 リンクのコピーリンクがクリップボードにコピーされました!
サービス実装へのインターセプターの割り当て は、SayHiImpl
によって提供されるロジックを使用するエンドポイントのインバウンドインターセプターチェーンに 2 つのインターセプターをアタッチするアノテーションを示しています。
サービス実装へのインターセプターの割り当て