2017-02-22 79 views
0

我使用Camel spring-ws組件通過在路由的'from'部分指定它來公開SOAP Web服務。Apache Camel Spring webservices SpringWebserviceConsumer不讀取答案,如果沒有的話

恰巧,在路由邏輯結束時,Exchange的'out'消息未被填充,但'in'消息包含所需的響應數據。

生成器組件的默認約定是在生成最終響應時,如果'out'不存在,則使用'in'交換消息。

然而SpringWebserviceConsumer僅支持最終交換具有'out'消息的場景。 下面是代碼從https://github.com/apache/camel/blob/master/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java的片段:

public void invoke(MessageContext messageContext) throws Exception { 
    Exchange exchange = getEndpoint().createExchange(ExchangePattern.InOptionalOut); 
    populateExchangeFromMessageContext(messageContext, exchange); 

    // start message processing 
    getProcessor().process(exchange); 

    if (exchange.getException() != null) { 
     throw exchange.getException(); 
    } else if (exchange.getPattern().isOutCapable()) { 
     Message responseMessage = exchange.getOut(Message.class); 
     if (responseMessage != null) { 
      Source responseBody = responseMessage.getBody(Source.class); 
      WebServiceMessage response = messageContext.getResponse(); 

      configuration.getMessageFilter().filterConsumer(exchange, response); 

      XmlConverter xmlConverter = configuration.getXmlConverter(); 
      xmlConverter.toResult(responseBody, response.getPayloadResult()); 
     } 
    } 
} 

這導致沒有產生到SOAP請求響應。

問題: 這是駱駝春天ws的缺陷/限制,還是我沒有正確使用spring-ws使用者?

否則,這聽起來像我必須明確設置交換模式爲InOut?

+0

是否有你爲什麼明確地用「InOptionalOut」交換模式而不是「InOut」創建交換?除非將它們設置爲「InOnly」,否則WS操作通常會期待響應。 – noMad17

+0

你爲什麼設置交換模式?您可以使用InOnly的默認模式。 –

+0

已更新說明以包含對SpringLite-Spring-ws SpringWebserviceConsumer類的引用,它不是我的代碼。 –

回答

0

直到CAMEL-10888被釋放,作爲一個變通辦法,在航線,可以將交換模式設置的InOut獲得交易所的非空「出」消息:

.setExchangePattern(ExchangePattern.InOut)