59.3.2. インターセプタープロバイダー API の使用


概要

インターセプターは、インターセプタープロバイダーインターフェイス に示されている InterceptorProvider インターフェイスを実装するコンポーネントであればどれでも登録できます。

インターセプタープロバイダーインターフェイス

package org.apache.cxf.interceptor;

import java.util.List;

public interface InterceptorProvider
{
    List<Interceptor<? extends Message>> getInInterceptors();

    List<Interceptor<? extends Message>> getOutInterceptors();

    List<Interceptor<? extends Message>> getInFaultInterceptors();

    List<Interceptor<? extends Message>> getOutFaultInterceptors();
}

インターフェイスの 4 つのメソッドにより、エンドポイントのインターセプターチェーンを Java List オブジェクトとして取得できます。Java List オブジェクトによって提供されるメソッドを使用することで、開発者は任意のチェーンにインターセプターを追加および削除できます。

手順

InterceptorProvider API を使用してインターセプターをランタイムコンポーネントのインターセプターチェーンに割り当てるには、以下を実行する必要があります。

  1. インターセプターが割り当てられるチェーンを使用してランタイムコンポーネントへのアクセスを取得します。

    開発者は、Apache CXF 固有の API を使用して標準の Java アプリケーションコードからランタイムコンポーネントにアクセスする必要があります。ランタイムコンポーネントは通常、JAX-WS または JAX-RS アーティファクトを基盤の Apache CXF オブジェクトにキャストすることでアクセスできます。

  2. インターセプターのインスタンスを作成します。
  3. 適切な get メソッドを使用して、目的のインターセプターチェーンを取得します。
  4. List オブジェクトの add() メソッドを使用してインターセプターをインターセプターチェーンにアタッチします。

    通常、このステップはインターセプターチェーンの取得と組み合わされます。

インターセプターをコンシューマーに取り付け

プログラムでコンシューマーにインターセプターを取り付け は、JAX-WS コンシューマーのインバウンドインターセプターチェーンにインターセプターを割り当てるコードです。

プログラムでコンシューマーにインターセプターを取り付け

package com.fusesource.demo;

import java.io.File;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import org.apache.cxf.endpoint.Client;

public class Client
{
  public static void main(String args[])
  {
    QName serviceName = new QName("http://demo.eric.org", "stockQuoteReporter");
    Service s = Service.create(serviceName);

    QName portName = new QName("http://demo.eric.org", "stockQuoteReporterPort");
    s.addPort(portName, "http://schemas.xmlsoap.org/soap/", "http://localhost:9000/EricStockQuote");

    quoteReporter proxy = s.getPort(portName, quoteReporter.class);

    Client cxfClient = (Client) proxy;

    ValidateInterceptor validInterceptor = new ValidateInterceptor();
    cxfClient.getInInterceptor().add(validInterceptor);

    ...
  }
}

プログラムでコンシューマーにインターセプターを取り付け のコードは、以下を行います。

コンシューマーの JAX-WS Service オブジェクトを作成します。

コンシューマーのターゲットアドレスを提供する Service オブジェクトにポートを追加します。

サービスプロバイダーでメソッドを呼び出すために使用されるプロキシーを作成します。

プロキシーを org.apache.cxf.endpoint.Client 型にキャストします。

インターセプターのインスタンスを作成します。

インターセプターをインバウンドインターセプターチェーンに割り当てます。

インターセプターのサービスプロバイダーへの割り当て

プログラムを使用したインターセプターのサービスプロバイダーへの割り当て は、サービスプロバイダーのアウトバウンドインターセプターチェーンにインターセプターを割り当てるコードです。

プログラムを使用したインターセプターのサービスプロバイダーへの割り当て

package com.fusesource.demo;
import java.util.*;

import org.apache.cxf.endpoint.Server;
import org.apache.cxf.frontend.ServerFactoryBean;
import org.apache.cxf.frontend.EndpointImpl;

public class stockQuoteReporter implements quoteReporter
{
  ...
  public stockQuoteReporter()
  {
    ServerFactoryBean sfb = new ServerFactoryBean();
    Server server = sfb.create();
    EndpointImpl endpt = server.getEndpoint();

    AuthTokenInterceptor authInterceptor = new AuthTokenInterceptor();

    endpt.getOutInterceptor().add(authInterceptor);
  }
}

プログラムを使用したインターセプターのサービスプロバイダーへの割り当て のコードは、以下を行います。

基盤となる Apache CXF オブジェクトへのアクセスを提供する ServerFactoryBean オブジェクトを作成します。

Apache CXF がエンドポイントを表すために使用する Server オブジェクトを取得します。

サービスプロバイダーの Apache CXF EndpointImpl オブジェクトを取得します。

インターセプターのインスタンスを作成します。

エンドポイントのアウトバウンドインターセプターチェーンにインターセプターを割り当てます。

バスへのインターセプターの取り付け

バスへのインターセプターの取り付け は、バスのインバウンドインターセプターチェーンにインターセプターを割り当てるコードです。

バスへのインターセプターの取り付け

import org.apache.cxf.BusFactory;
org.apache.cxf.Bus;

...

Bus bus = BusFactory.getDefaultBus();

WatchInterceptor watchInterceptor = new WatchInterceptor();

bus..getInInterceptor().add(watchInterceptor);

...

バスへのインターセプターの取り付け のコードは、以下を行います。

ランタイムインスタンスのデフォルトのバスを取得します。

インターセプターのインスタンスを作成します。

インターセプターをインバウンドインターセプターチェーンに割り当てます。

WatchInterceptor は、ランタイムインスタンスによって作成されるすべてのエンドポイントのインバウンドインターセプターチェーンにアタッチされます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.