我有一些服務是從JMS消息發起的,其他服務是從WS調用中啓動的。對於他們所有人,我已經使用Spring集成實現了日誌記錄,驗證,適應(XSD到域)和持久性解決方案。它一直工作到現在。一段時間後,新的請求類型被添加到需求中。這些請求包含將並行處理的子項。這些兒童項目將被合併,然後形成一個單一的迴應。我試過聚合器,它適用於JMS。我收集每個子項目的響應,並在需要時創建主響應。使用Spring集成聚合器進行Web服務
問題是WS調用它不起作用。我使用soapUI進行測試,我發送了請求,日誌記錄,適應,聚合等工作,但我沒有看到迴應。
摘要:在ws調用中使用聚合器是否會導致退出Web服務調用的線程並中斷請求 - 響應匹配機制?
編輯: 作爲加利羅素建議,我添加細節問題:
<int-ws:inbound-gateway id="ws-inbound-gateway"
request-channel="requestMessagesChannelForWS"
reply-channel="ws-response-channel"
error-channel="ws-error-channel"
header-mapper="xmlMessageExtractorSoapHeaderMapper"/>
<int:header-enricher input-channel="requestMessagesChannelForWS" output-channel="headerEnricherChannel">
<int:header name="from" ref="headersMapManagerService" method="getFromWSValue"/>
</int:header-enricher>
<int:header-enricher input-channel="headerEnricherChannel" output-channel="requestMessagesRoutingChannel">
<int:header name="messageHeader" expression="payload.getMessageHeader()"/>
</int:header-enricher>
<int:recipient-list-router id="xmlMessageRouter"
input-channel="requestMessagesRoutingChannel">
<int:recipient channel="messageToLogAdapterChannel"/>
<int:recipient channel="requestMessageValidatorChannel"/>
</int:recipient-list-router>
我省略messageToLogAdapterChannel和requestMessageValidatorChannel步驟。在驗證之後,流程繼續在這裏:
<int:chain input-channel="serviceAvailabilityCheckMessageChannelForAdaption">
<int:transformer expression="@serviceAvailabilityCheckMessageAdapterService.adaptMessage(headers, payload)"/>
<int:service-activator
expression="@serviceAvailabilityCheckHandler.handleServiceAvailabilityCheckRequest(payload)"/>
</int:chain>
正如您所看到的,在鏈上沒有定義輸出通道。我手動做。 serviceAvailabilityCheckHandler.handleServiceAvailabilityCheckRequest方法在BPMN引擎(Activiti)上創建一個流程實例。我等待來自此引擎的關於進程完成的信號並創建一個新對象(而不是消息)並將其發送到通道。
public void processEnded(OrderData orderData) {
sendMessageToChannel(orderData, processResultChannel);
}
<int:router input-channel="processResultChannel" expression="payload.orderClass.name">
<int:mapping value="domain.ServiceAvailabilityOrderRequestItem"
channel="serviceAvailabilityCheckCompletionChannel"/>
</int:router>
<int:service-activator input-channel="serviceAvailabilityCheckCompletionChannel"
output-channel="serviceAvailabilityCheckResponseItemAggregationChannel"
ref="serviceAvailabilityCheckHandler"
method="onItemComplete"/>
<int:aggregator input-channel="serviceAvailabilityCheckResponseItemAggregationChannel"
output-channel="ws-response-channel"
method="combineResponseItems"
ref="serviceAvailabilityCheckHandler"
correlation-strategy="serviceAvailabilityCheckHandler"
correlation-strategy-method="correlateResponseItems"
release-strategy-method="isResponseComplete"
release-strategy="serviceAvailabilityCheckHandler"/>
利用這種配置我的信息彙集的作品,物品前來聚集,然後我的定製實現(combineResponseItems,correlateResponseItems和isResponseComplete)結合了響應項目,並將其發送到WS-響應通道。
我得到這個異常:
org.springframework.integration.support.channel.ChannelResolutionException:無輸出通道或replyChannel頭可用
恕我直言,這裏的問題是這樣的:我收到handleServiceAvailabilityCheckRequest的請求並開始一個進程,完成後我創建一個對象作爲響應,但spring集成不能將該對象與請求關聯。我的響應對象中沒有任何標題或與請求相關的內容。我無法將請求相關的事情傳遞給進程,我需要在集成層中處理它。這是我堅持不懈的地方。
是的,它工作正常;您需要顯示您的配置並準確描述您所看到的問題。 –
謝謝你加里。我已經爲這個問題添加了關於問題的細節和想法。 – GokcenG