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

概要

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

59.1. インターセプターを割り当てる場所の決定

概要

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

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

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

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

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

ファクトリー

Spring 設定を使用して、エンドポイントまたはプロキシーの作成に使用されるファクトリーにインターセプターを割り当てると、インターセプターを直接エンドポイントまたはプロキシーに割り当てることと同じ効果があります。ただし、インターセプターがプログラム的にファクトリーに割り当てられると、ファクトリーに割り当てられたインターセプターはファクトリーで作成されたすべてのエンドポイントまたはプロキシーに伝播されます。

バインディング

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

バス

インターセプターを割り当てる最も一般的な場所はバスです。インターセプターがバスに割り当てられている場合に、インターセプターはそのバスで管理される全エンドポイントに伝播されます。インターセプターをバスに割り当てると、同様のインターセプターを共有する複数のエンドポイントを作成するアプリケーションでの使用に役立ちます。

割り当てポイントの統合

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