21.3. WS-RM 활성화
21.3.1. 개요
안정적인 메시징을 사용하려면 인바운드 및 아웃바운드 메시지 및 결함 모두에 대해 WS-RM 인터셉터를 인터셉터 체인에 추가해야 합니다. WS-RM 인터셉터는 WS-Addressing을 사용하므로 WS-Addressing 인터셉터도 인터셉터 체인에 있어야 합니다.
다음 두 가지 방법 중 하나로 이러한 인터셉터가 있는지 확인할 수 있습니다.
21.3.2. Spring 빈: 명시적으로 인터셉터 추가
WS-RM을 활성화하려면 Apache CXF 버스에 WS-RM 및 WS-Addressing 인터셉터를 추가하거나 Spring Ignition 구성을 사용하여 소비자 또는 서비스 끝점에 추가합니다. 이 방법은 InstallDir/samples/ws_rm
디렉터리에 있는 WS-RM 샘플에서 가져온 방법입니다. 구성 파일 ws-rm.cxf
는 Spring 빈으로 하나씩 추가되는 WS-RM 및 WS-Addressing 인터셉터를 보여줍니다( 예 21.1. “Spring Cryostat를 사용하여 WS-RM 활성화”참조).
예 21.1. Spring Cryostat를 사용하여 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 Cryostat를 사용하여 WS-RM 활성화” 에 표시된 코드는 다음과 같이 설명할 수 있습니다.
Apache CXF 구성 파일은 Spring XML 파일입니다. 빈
요소에 의해 캡슐화된 하위 요소의 네임스페이스 및 스키마 파일을 선언하는 열기 Spring 빈
요소를 포함해야 합니다.
각 WS-Addressing interceptors-MAPAggregator
및 MAPCodec
를 구성합니다. WS-Addressing에 대한 자세한 내용은 20장. WS-Addressing 배포 을 참조하십시오.
각 WS-RM 인터셉터(RMOutInterceptor
,RMInInterceptor
, RMSoapInterceptor
)를 구성합니다.
인바운드 메시지의 인터셉터 체인에 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-Framework 및 Web Services Policy 1.5-Attachment 사양을 준수합니다.
Apache CXF WS-Policy 프레임워크를 사용하여 WS-RM을 활성화하려면 다음을 수행합니다.
클라이언트 및 서버 끝점에 정책 기능을 추가합니다. 예 21.2. “WS-Policy를 사용하여 WS-RM 구성”
jaxws:feature
요소 내에 중첩된 참조 8080을 표시합니다. 참조 8080은 동일한 구성 파일 내에서 별도의 요소로 정의되는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>
예 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>