Menu Close

21.3. WS-RM の有効化

概要

信頼性の高いメッセージングを有効にするには、インバウンドおよびアウトバウンド両方のメッセージおよび障害について、WS-RM インターセプターをインターセプターチェーンに追加する必要があります。WS-RM インターセプターは WS-Addressing を使用するため、WS-Addressing インターセプターもインターセプターチェーンに存在している必要があります。

これらのインターセプターは、以下のいずれかの方法で存在させることができます。

  • 明示的に: Spring Bean を使用してディスパッチチェーンに追加する。
  • 暗黙的に: WS-Policy アサーションを使用することで、Apache CXF ランタイムにインターセプターを透過的に追加させる。

Spring Bean: インターセプターの明示的な追加

WS-RM を有効にするには、Spring Bean 設定を使用して、WS-RM および WS-Addressing インターセプターを Apache CXF バスに追加するか、コンシューマーまたはサービスエンドポイントに追加します。これは、InstallDir/samples/ws_rm ディレクトリーにある WS-RM のサンプルにおけるアプローチです。設定ファイル ws-rm.cxf では、WS-RM と WS-Addressing インターセプターが Spring Bean として 1 つずつ追加されています (例21.1「Spring Beans を使用した WS-RM の有効化」を参照)。

例21.1 Spring Beans を使用した WS-RM の有効化

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/
   beans http://www.springframework.org/schema/beans/spring-beans.xsd">
   <bean id="mapAggregator" class="org.apache.cxf.ws.addressing.MAPAggregator"/>
   <bean id="mapCodec" class="org.apache.cxf.ws.addressing.soap.MAPCodec"/>
   <bean id="rmLogicalOut" class="org.apache.cxf.ws.rm.RMOutInterceptor">
        <property name="bus" ref="cxf"/>
   </bean>
   <bean id="rmLogicalIn" class="org.apache.cxf.ws.rm.RMInInterceptor">
        <property name="bus" ref="cxf"/>
   </bean>
   <bean id="rmCodec" class="org.apache.cxf.ws.rm.soap.RMSoapInterceptor"/>
   <bean id="cxf" class="org.apache.cxf.bus.CXFBusImpl">
        <property name="inInterceptors">
            <list>
                <ref bean="mapAggregator"/>
                <ref bean="mapCodec"/>
                <ref bean="rmLogicalIn"/>
                <ref bean="rmCodec"/>
            </list>
        </property>
        <property name="inFaultInterceptors">
            <list>
                <ref bean="mapAggregator"/>
                <ref bean="mapCodec"/>
                <ref bean="rmLogicalIn"/>
                <ref bean="rmCodec"/>
            </list>
        </property>
        <property name="outInterceptors">
            <list>
                <ref bean="mapAggregator"/>
                <ref bean="mapCodec"/>
                <ref bean="rmLogicalOut"/>
                <ref bean="rmCodec"/>
            </list>
        </property>
        <property name="outFaultInterceptors">
            <list>
                <ref bean="mapAggregator">
                <ref bean="mapCodec"/>
                <ref bean="rmLogicalOut"/>
                <ref bean="rmCodec"/>
            </list>
        </property>
    </bean>
</beans>

例21.1「Spring Beans を使用した WS-RM の有効化」に表示されているコードは、以下のように記述できます。

Apache CXF 設定ファイルは Spring XML ファイルです。beans 要素によってカプセル化される子要素の namespace およびスキーマファイルを宣言するオープニング Spring beans 要素を含める必要があります。

各 WS-Addressing インターセプター (MAPAggregator および MAPCodec) を設定します。WS-Addressing の詳細は、「20章WS-Addressing のデプロイ」を参照してください。

各 WS-RM インターセプター (RMOutInterceptorRMInInterceptor、および RMSoapInterceptor) を設定します。

WS-Addressing および WS-RM インターセプターをインバウンドメッセージのインターセプターチェーンに追加します。

WS-Addressing および WS-RM インターセプターをインバウンド障害のインターセプターチェーンに追加します。

WS-Addressing および WS-RM インターセプターをアウトバウンドメッセージのインターセプターチェーンに追加します。

WS-Addressing および WS-RM インターセプターをアウトバウンド障害のインターセプターチェーンに追加します。

WS-Policy フレームワーク: インターセプターの暗黙的な追加

WS-Policy フレームワークは、WS-Policy の使用を可能にするインフラストラクチャーおよび API を提供します。Web Services Policy 1.5 - Framework および Web Services Policy 1.5 - Attachment 仕様の 2006 年 11 月ドラフト公開版に準拠しています。

Apache CXF WS-Policy フレームワークを使用して WS-RM を有効にするには、以下を実行します。

  1. クライアントおよびサーバーエンドポイントにポリシー機能を追加します。例21.2「WS-Policy を使用した WS-RM の設定」は、jaxws:feature 要素内にネストされた参照 Bean を示しています。参照 Bean は、同じ設定ファイル内に個別の要素として定義される AddressingPolicy を指定します。

    例21.2 WS-Policy を使用した WS-RM の設定

    <jaxws:client>
        <jaxws:features>
          <ref bean="AddressingPolicy"/>
        </jaxws:features>
    </jaxws:client>
    <wsp:Policy wsu:Id="AddressingPolicy" xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata">
        <wsam:Addressing>
          <wsp:Policy>
            <wsam:NonAnonymousResponses/>
          </wsp:Policy>
        </wsam:Addressing>
    </wsp:Policy>
  2. 例21.3「WSDL ファイルへの RM ポリシーの追加」に示されるように、wsdl:service 要素 (または、ポリシーもしくはポリシー参照要素の添付ポイントとして使用できるその他の WSDL 要素) に対する信頼性の高いメッセージングポリシーを、WSDL ファイルに追加します。

    例21.3 WSDL ファイルへの RM ポリシーの追加

    <wsp:Policy wsu:Id="RM"
       xmlns:wsp="http://www.w3.org/2006/07/ws-policy"
       xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata">
            <wsp:Policy/>
        </wsam:Addressing>
        <wsrmp:RMAssertion xmlns:wsrmp="http://schemas.xmlsoap.org/ws/2005/02/rm/policy">
            <wsrmp:BaseRetransmissionInterval Milliseconds="10000"/>
        </wsrmp:RMAssertion>
    </wsp:Policy>
    ...
    <wsdl:service name="ReliableGreeterService">
        <wsdl:port binding="tns:GreeterSOAPBinding" name="GreeterPort">
            <soap:address location="http://localhost:9020/SoapContext/GreeterPort"/>
            <wsp:PolicyReference URI="#RM" xmlns:wsp="http://www.w3.org/2006/07/ws-policy"/>
        </wsdl:port>
    </wsdl:service>