Spring集成 - 需要映射SOAP标头

时间:2016-03-15 21:58:20

标签: spring-integration spring-ws

在spring-int 4.1中,我使header-mapper正常工作,如下所示:

<int-ws:inbound-gateway id="my-gateway" 
    request-channel="my-gateway-input" 
    reply-channel="my-gateway-output"
    unmarshaller="jaxb2Marshaller" marshaller="jaxb2Marshaller"
    header-mapper="soapHeaderMapper" />
<beans:bean id="soapHeaderMapper" class="org.springframework.integration.ws.DefaultSoapHeaderMapper">
   <beans:property name="requestHeaderNames" value="*"/>
</beans:bean>

当我尝试升级到spring-int 4.2时,不允许使用header-mapper。我需要它的原因是因为我需要映射soap安全头。但是我不认为没有指定soapHeaderMapper就会映射它。请注意,我确实有以下上游拦截soap请求,我很确定拦截器没有删除soap标头。如果您需要完整的配置,请告诉我。

<beans:bean id="wss4jSecurityInterceptor" class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor">
    <beans:property name="validationActions" value="UsernameToken"/>
    <beans:property name="validationCallbackHandler" ref="validationCallbackHandler"></beans:property>
    <beans:property name="removeSecurityHeader" value="false"></beans:property>
</beans:bean>

1 个答案:

答案 0 :(得分:1)

没有-OP。

这仍然有效。

为什么你认为忽略header-mapper

我们有这个测试配置:

<ws:inbound-gateway id="headerMappingGateway" request-channel="headerMappingRequests"
        header-mapper="testHeaderMapper"/>

关于此事的测试案例:

@Autowired
private SimpleWebServiceInboundGateway headerMappingGateway;

@Autowired
private SoapHeaderMapper testHeaderMapper;

@Test
public void testHeaderMapperReference() throws Exception {
    DirectFieldAccessor accessor = new DirectFieldAccessor(headerMappingGateway);
    Object headerMapper = accessor.getPropertyValue("headerMapper");
    assertEquals(testHeaderMapper, headerMapper);
}

因此,一切都应该像Spring Integration 4.1一样工作。

否则,请分享测试用例重现。

我们感谢任何反馈!

P.S。当然,我看到我们有一个预期的XSD错误输入和真正允许的内容。但这并不妨碍使用任何可能的自定义SoapHeaderMapper实现。