2013-04-04 107 views
0

我是春季集成的新手,所以我可能會濫用條款。 我有一個ws:入站網關監聽soap web服務請求。春季集成:收聽入網網關的例外

<int-ws:inbound-gateway id="myInGW" 
         request-channel="headersMapPopulationChannel" 
         reply-channel="ws-response-channel" 
         marshaller="marshaller" 
         unmarshaller="marshaller"/> 

它發出傳入請求headersMapPopulationChannel並把它發送消息給適配器(用於從JAXB類轉換成域)和分離器把它分割到驗證,記錄和持久性。在持久化後,我根據請求運行與業務相關的事情。我想對所有這些都有異常控制點,這樣我就可以管理在發生異常情況下應如何處理。我故意在商業課堂上拋出異常聲明。拋出異常,但我的頻道似乎並沒有得到它。 配置:

<int-ws:inbound-gateway id="myInGW" 
         request-channel="headersMapPopulationChannel" 
         reply-channel="ws-response-channel" 
         error-channel="ws-error-channel" 
         marshaller="marshaller" 
         unmarshaller="marshaller"/> 

<int:channel id="ws-error-channel"/> 

<int:service-activator input-channel="ws-error-channel" 
         expression="@exceptionHandlerService.handleThrowable(payload)"/> 
<bean id="exceptionHandlerService" class="pack.integration.service.ExceptionHandlerService"/> 

此外,我不知道是否我出最渠道控制的例外是正確與否。我應該在哪裏轉發消息時聽取例外情況?

回答

1

這是處理異常的正確方法。

該異常將被包裝在MessagingException中,併發送到error-channel作爲ErrorMessage的有效負載。 MessagingException有兩個屬性cause(原始異常)和failedMessage(引起異常的消息)。

如果要將SOAP錯誤返回給客戶端,錯誤通道流必須拋出異常。

如果您沒有看到頻道上的ErrorMessage,其他東西必須捕捉異常。

我建議你打開調試日誌記錄,並按照系統中的消息。

+0

我跟蹤了你所說的流程,我注意到'ignore-send-failures ='true''聲明。刪除這使得錯誤通道能夠捕捉異常。感謝您的回覆。 – GokcenG 2013-04-04 13:08:43

0

我也使用段網關來重定向所有異常另一個消息流,並從那裏決定如何處理它們。