Menu Close

第59章 インターセプターを使用するようエンドポイントを設定

概要

インターセプターは、メッセージエクスチェンジに含まれるときにエンドポイントに追加されます。エンドポイントのインターセプターチェーンは、Apache CXF ランタイムの多数のコンポーネントのインターセプターチェーンから構築されます。インターセプターは、エンドポイントの設定またはランタイムコンポーネントの 1 つの設定で指定されます。インターセプターは、設定ファイルまたはインターセプター API のいずれかを使用して追加できます。

59.1. インターセプターをアタッチする場所の決定

概要

インターセプターチェーンをホストするランタイムオブジェクトは複数あります。これらには以下が含まれます。

  • エンドポイントオブジェクト
  • サービスオブジェクト
  • プロキシーオブジェクト
  • エンドポイントまたはプロキシーの作成に使用されるファクトリーオブジェクト
  • バインディング
  • 中央 Bus オブジェクト

開発者は、独自のインターセプターをこれらのオブジェクトアタッチできます。インターセプターをアタッチする最も一般的なオブジェクトは、バスおよび個々のエンドポイントです。正しいオブジェクトを選択するには、これらのランタイムオブジェクトをどのように組み合わせて、エンドポイントを作成するのかを理解する必要があります。設計上、各 cxf 関連のバンドルには独自の cxf バスがあります。したがって、インターセプターがバスで設定され、同じ Blueprint コンテキストでサービスが別のバンドルにインポートまたは作成されると、インターセプターは処理されません。代わりに、インポートされたサービスの JAXWS クライアントまたはエンドポイントに直接インターセプターを設定できます。

エンドポイントおよびプロキシー

インターセプターをエンドポイントまたはプロキシーのいずれかにアタッチすることは、インターセプターを配置するための最も細かい方法です。エンドポイントまたはプロキシーに直接アタッチされたインターセプターは、特定のエンドポイントまたはプロキシーにのみ影響します。これは、特定のサービスに固有のインターセプターをアタッチするのに良い場所です。たとえば、開発者が単位をメートル法からヤードポンド法に変換するサービスの 1 つのインスタンスを公開する場合は、インターセプターを 1 つのエンドポイントに直接アタッチできます。

ファクトリー

Spring 設定を使用して、エンドポイントまたはプロキシーの作成に使用されるファクトリーにインターセプターをアタッチすると、インターセプターを直接エンドポイントまたはプロキシーにアタッチするのと同じ効果があります。しかし、インターセプターがプログラムでファクトリーにアタッチされると、ファクトリーにアタッチされたインターセプターは、ファクトリーによって作成されたすべてのエンドポイントまたはプロキシーに伝達されます。

バインディング

インターセプターをバインディングにアタッチすると、開発者はバインディングを使用するすべてのエンドポイントに適用されるインターセプターのセットを指定できます。たとえば、開発者が raw XML バインディングを使用するすべてのエンドポイントに特別な ID 要素が含まれるように強制する場合、要素を追加するためのインターセプターを XML バインディングにアタッチすることができます。

バス

インターセプターをアタッチする最も一般的な場所はバスです。インターセプターがバスにアタッチされた場合、インターセプターはそのバスによって管理されるすべてのエンドポイントに伝達されます。インターセプターをバスにアタッチすることは、同様のインターセプターセットを共有する複数のエンドポイントを作成するアプリケーションで便利です。

アタッチメントポイントの組み合わせ

エンドポイントのインターセプタチェーンの最後のセットは、リストされたオブジェクトによって提供されたインターセプタチェーンの結合であるため、リストされたオブジェクトのいくつかを単一のエンドポイントの設定で組み合わせることができます。たとえば、アプリケーションが検証トークンに対してチェックされたインターセプターを必要とする複数のエンドポイントを生成した場合、そのインターセプターはアプリケーションのバスにアタッチされます。これらのエンドポイントの 1 つにユーロをドルに変換するインターセプターも必要な場合、変換インターセプターは特定のエンドポイントに直接アタッチされます。