【问题标题】:Spring Integration - Need to Map SOAP HeadersSpring Integration - 需要映射 SOAP 标头
【发布时间】:2016-03-15 21:58:20
【问题描述】:

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

【问题讨论】:

    标签: spring-integration spring-ws


    【解决方案1】:

    无操作。

    这仍然有效。

    你为什么认为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 一样工作。

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

    我们感谢任何反馈!

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

    【讨论】:

    • Artem,感谢您的及时回复。你是对的,它正在工作。我认为这不是因为 Eclipse 正在使用以下模式位置验证 XSD,这似乎错误地不允许标头映射器:springframework.org/schema/integration/ws/…。将 xsd 更改为指向 4.1 时,我还有其他验证问题。事后看来,我应该使用纯 Java 配置而不是处理这个 XML,这有点混乱(如果我将 kafka、mongo-db 添加到混合中)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多