2017-10-05 126 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

哦!對不起,我錯過了最後的評論。非常感謝,但現在我們可以等待下一個版本的發貨。 –