从 Spring 集成调用 POX Web 服务
Call POX web service from Spring Integration
我在一个项目中使用 Spring 集成,该项目(成功)集成了各种 ReST/JSON 和 SOAP 端点。
现在我需要调用配置为接受 Plain-Old-Xml-over-HTTP 的 BusinessWorks 实例。
从 "Spring Integration in Action book",我得到一个提示,我应该为此使用 int-ws:outbound-gateway。
此配置生成正确的请求,但在 SOAP 中:
<int-ws:outbound-gateway
uri="..."
request-channel="request" reply-channel="reply"
marshaller="marshaller" unmarshaller="unmarshaller"/>
我不知道如何配置它以将负载中的对象作为 POX(无 SOAP 信封)发送。
我试过这个:
<int-ws:outbound-gateway
uri="..."
request-channel="request" reply-channel="reply"
marshaller="marshaller" unmarshaller="unmarshaller"
message-factory="poxMessageFactory"/>
<bean id="poxMessageFactory"
class="org.springframework.ws.pox.dom.DomPoxMessageFactory"/>
请求似乎仅正确切换到 XML,但请求正文为空(Spring 集成有效负载中没有对象的踪迹)。
有人可以告诉我我做错了什么或如何实现我想要做的事情吗?
我认为这是AbstractWebServiceOutboundGateway
中的遗漏:
public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException {
Object payload = this.requestMessage.getPayload();
if (message instanceof SoapMessage) {
this.doWithMessageInternal(message, payload);
AbstractWebServiceOutboundGateway.this.headerMapper
.fromHeadersToRequest(this.requestMessage.getHeaders(), (SoapMessage) message);
if (this.requestCallback != null) {
this.requestCallback.doWithMessage(message);
}
}
}
关注if (message instanceof SoapMessage) {
.
所以,我们确实错过了消息可以是不同类型的事实。
请就此事展开JIRA bug。
同时,作为解决方法,我建议您直接使用 WebServiceTemplate
而不是 <int-ws:outbound-gateway>
,您可以使用 marshalSendAndReceive()
方法从 <service-activator>
调用它进行交互。
我在一个项目中使用 Spring 集成,该项目(成功)集成了各种 ReST/JSON 和 SOAP 端点。 现在我需要调用配置为接受 Plain-Old-Xml-over-HTTP 的 BusinessWorks 实例。 从 "Spring Integration in Action book",我得到一个提示,我应该为此使用 int-ws:outbound-gateway。 此配置生成正确的请求,但在 SOAP 中:
<int-ws:outbound-gateway
uri="..."
request-channel="request" reply-channel="reply"
marshaller="marshaller" unmarshaller="unmarshaller"/>
我不知道如何配置它以将负载中的对象作为 POX(无 SOAP 信封)发送。 我试过这个:
<int-ws:outbound-gateway
uri="..."
request-channel="request" reply-channel="reply"
marshaller="marshaller" unmarshaller="unmarshaller"
message-factory="poxMessageFactory"/>
<bean id="poxMessageFactory"
class="org.springframework.ws.pox.dom.DomPoxMessageFactory"/>
请求似乎仅正确切换到 XML,但请求正文为空(Spring 集成有效负载中没有对象的踪迹)。 有人可以告诉我我做错了什么或如何实现我想要做的事情吗?
我认为这是AbstractWebServiceOutboundGateway
中的遗漏:
public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException {
Object payload = this.requestMessage.getPayload();
if (message instanceof SoapMessage) {
this.doWithMessageInternal(message, payload);
AbstractWebServiceOutboundGateway.this.headerMapper
.fromHeadersToRequest(this.requestMessage.getHeaders(), (SoapMessage) message);
if (this.requestCallback != null) {
this.requestCallback.doWithMessage(message);
}
}
}
关注if (message instanceof SoapMessage) {
.
所以,我们确实错过了消息可以是不同类型的事实。
请就此事展开JIRA bug。
同时,作为解决方法,我建议您直接使用 WebServiceTemplate
而不是 <int-ws:outbound-gateway>
,您可以使用 marshalSendAndReceive()
方法从 <service-activator>
调用它进行交互。