21.3. WS-RM 활성화

21.3.1. 개요

안정적인 메시징을 활성화하려면 인바운드 및 아웃바운드 메시지 및 결함 모두에 대해 인터셉터 체인에 WS-RM 인터셉터를 추가해야 합니다. WS-RM 인터셉터는 WS-Addressing 인터셉터를 사용하므로 인터셉터 체인에 WS-Addressing 인터셉터도 있어야 합니다.

다음 두 가지 방법 중 하나로 이러한 인터셉터가 있는지 확인할 수 있습니다.

  • 명시적으로 Spring 빈을 사용하여 디스패치 체인에 추가하여
  • 암시적 으로 WS-Policy 어설션을 사용하여 Apache CXF 런타임이 사용자를 대신하여 인터셉터를 투명하게 추가합니다.

21.3.2. Spring bean: 인터셉터를 명시적으로 추가합니다.

WS-RM을 활성화하려면 Apache CXF 버스 또는 Spring 빈 구성을 사용하여 소비자 또는 서비스 엔드포인트에 WS-RM 및 WS-Addressing 인터셉터를 추가합니다. 이 방법은 InstallDir/samples/ws_rm 디렉터리에 있는 WS-RM 샘플에서 가져온 접근 방식입니다. 구성 파일 ws-rm.cxf 는 Spring 빈으로 일대일로 추가된 WS-RM 및 WS-Addressing 인터셉터를 보여줍니다( 예 21.1. “Spring Bean을 사용하여 WS-RM 활성화”참조).

예 21.1. Spring Bean을 사용하여 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 Bean을 사용하여 WS-RM 활성화” 에 표시된 코드는 다음과 같이 설명될 수 있습니다.

Apache CXF 구성 파일은 Spring XML 파일입니다. 빈 요소에서 캡슐화된 하위 요소 의 네임스페이스 및 스키마 파일을 선언하는 여는 Spring 빈 요소를 포함해야 합니다.

각 WS-Addressing 인터셉터-MAPAggregatorMAPCodec 를 구성합니다. WS-Addressing에 대한 자세한 내용은 20장. WS-Addressing 배포 을 참조하십시오.

각 WS-RM 인터셉터-RMOutInterceptor,RMInInterceptorRMSoapInterceptor 를 설정합니다.

인바운드 메시지의 인터셉터 체인에 WS-Addressing 및 WS-RM 인터셉터를 추가합니다.

인바운드 결함을 위해 WS-Addressing 및 WS-RM 인터셉터를 인터셉터 체인에 추가합니다.

아웃바운드 메시지의 인터셉터 체인에 WS-Addressing 및 WS-RM 인터셉터를 추가합니다.

아웃바운드 결함의 인터셉터 체인에 WS-Addressing 및 WS-RM 인터셉터를 추가합니다.

21.3.3. WS-Policy 프레임워크: 암시적으로 인터셉터 추가

WS-Policy 프레임워크는 WS-Policy를 사용할 수 있는 인프라 및 API를 제공합니다. 이는 2006년 11월 Web Services Policy 1.5-FrameworkWeb Services Policy 1.5-Attachment 사양의 초안 발행물과 호환됩니다.

Apache CXF WS-Policy 프레임워크를 사용하여 WS-RM을 활성화하려면 다음을 수행합니다.

  1. 정책 기능을 클라이언트 및 서버 엔드포인트에 추가합니다. 예 21.2. “WS-Policy를 사용하여 WS-RM 구성” jaxws:feature 요소에 중첩된 참조 빈을 표시합니다. 참조 빈에서는 동일한 구성 파일 내의 별도의 요소로 정의된 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 요소에 안정적인 메시징 정책을 추가합니다.

    예 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>