从Spring Integration调用POX Web服务 [英] Call POX web service from Spring Integration
本文介绍了从Spring Integration调用POX Web服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在一个项目中使用了Spring Integration,该项目集成(成功)了各种睡觉/JSON和SOAP端点。 现在我需要调用一个配置为通过HTTP接受Plain-Old-XML-over-HTTP的BusinessWorks实例。 从"Spring Integration in Action"一书中,我得到了一个提示,我应该为此使用int-ws:outbound-ateway。 此配置生成正确的请求,但使用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 Integration有效负载中没有对象的踪迹)。 有人能告诉我我做错了什么吗?或者如何实现我想要做的事情?
推荐答案
我认为这是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 Integration调用POX Web服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文