2017-10-05 131 views
1

我在集成(成功)各种ReST/JSON和SOAP端点的项目中使用Spring集成。 现在我需要调用一个配置为接受Plain-Old-Xml-over-HTTP的BusinessWorks实例。 从“Spring Integration in Action”一书中,我得到了一个暗示我应该使用int-ws:outbound-gateway。 此配置产生正确的请求,但在SOAP:从Spring集成调用POX Web服务

<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集成有效载荷中的对象的迹线)。 有人可以告诉我我做错了什么或如何实现我想要做的?

回答

0

我认为这是在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>调用它。

+0

谢谢!我认为这个权威的答案关闭了这个话题:-)我打开了JIRA错误。我只是尽快尝试使用该解决方法,但由于我们所调用的服务在同一家公司进行管理,他们接受重新配置服务以接受SOAP。 –

+0

当然! JIRA https://jira.spring.io/browse/INT-4355最近已经修复。如果您需要,我们可以尽快发布下一个维护版本 –

+0

哦!对不起,我错过了最后的评论。非常感谢,但现在我们可以等待下一个版本的发货。 –