我正在尝试编写配置一个 Spring Inbound Webservice Gateway,它应该接收一个完整的 SOAP 消息,然后将其委托给另一个 SOAP 提供程序(出于安全原因,这是必要的)。应该看起来像 (1) Application -> (2) SOAP Provicer and Client for (THIS is my Part / Configuration) -> (3) Second SOAP Provider -> (4) Services
到目前为止,我为问题 (2) 所做的工作:
1) web.xml
MessageDispatcherServlet with Mapping:
<servlet-mapping>
<servlet-name>spring-ws</servlet-name>
<url-pattern>/appservices/*</url-pattern>
</servlet-mapping>
2) 带有端点映射的配置
<bean class="org.springframework.ws.server.endpoint.mapping.UriEndpointMapping">
<property name="defaultEndpoint" ref="ws-in-gw"/>
</bean>
3) Spring Integration inbound-gateway 和 outbound-gateway 的配置
<!-- My Providing Part -->
<int-ws:inbound-gateway id="ws-in-gw"
request-channel="in"
reply-channel="out"
mapped-request-headers="*" />
<int:channel id="in" />
<int:channel id="out" />
<!-- My Client Part -->
<int-ws:outbound-gateway
id="ws-out-gw-status"
request-channel="in-status"
reply-channel="out-status"
uri="http://${delegationServer}/${delegation.contextroot}/soap/AnotherService"
</int-ws:outbound-gateway>
现在一切正常,但现在我必须在进程 2 中向 SOAP 消息添加一些 HTTP 标头(在从 1 到 2 的过程中由防火墙添加到请求中)
这是我测试的 SOAP 消息:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:stat="http://status.service.promakler.provinzial.com/">
<soapenv:Body>
<stat:getStatus/>
</soapenv:Body>
</soapenv:Envelope>
我想我必须将入站网关的 extract-payload 属性设置为 false,但是这样我得到了一个异常。我想我必须写一个 Marshaller/Unmarshaller,但我不知道该怎么做。结果应该是我认为的 SaajSoapMessage。有任何想法吗?
问候蒂莫