在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>
答案 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
实现。