我使用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?
是否有你爲什麼明確地用「InOptionalOut」交換模式而不是「InOut」創建交換?除非將它們設置爲「InOnly」,否則WS操作通常會期待響應。 – noMad17
你爲什麼設置交換模式?您可以使用InOnly的默認模式。 –
已更新說明以包含對SpringLite-Spring-ws SpringWebserviceConsumer類的引用,它不是我的代碼。 –