在我們的應用程序中,我們有錯誤處理機制,我們在錯誤處拋出運行時異常。我注意到一個奇怪的行爲,我想了解這一個從ServiceActivator與過濾器拋出異常的行爲有所不同
1)情況1背後的機制:異常來自ServiceActivator拋出轉化爲MessageHandlingException
當在ServiceActivator,我們拋出一個異常錯誤發生。我們上ErrorChannel該消息具有有效載荷org.springframework.integration.MessageHandlingException
和實際的異常拋出cause
2)情況2:從過濾器拋出的異常沒有與MessageHandlingException
當過濾器發生錯誤掩蓋,我們拋出異常,那麼有效載荷是實際的異常,並且不與org.springframework.integration.MessageHandlingException
掩蓋我有幾個問題:
- 爲什麼從ServiceActivator異常拋出行爲d ifferently比過濾
- 是否有一些「最佳做法」周圍的錯誤處理Spring的集成項目,同時利用errorChannel和相關基礎設施
更新1:
過濾器延伸AbstractFileListFilter這是過濾器鏈的一部分 - 實現FileListFilter的自定義CompositeFileFilter
CompositeFileFilter正在被文件:入站通道適配器使用,並將輸出傳遞給下面聲明的通道:
<int:channel
id="channelForFilesComingIn"
datatype="java.io.File"
>
<int:dispatcher task-executor="dispatchExecutor" />
</int:channel>
更新2:
激起我們正在試圖做的是讀取文件系統中的文件並進行處理。在文件讀取部分,使用帶有CompositeFilter的file:inbound-channel-adapter
來過濾未完全上傳或不符合命名標準的文件。
後所有過濾器通過,文件被移交到一個ServiceActivator用於處理
在任一上述(濾波器鏈或服務),如果存在錯誤情況,它必須被報告給DB,並通過電子郵件。爲了實現這一點,我們拋出被ErrorChannel捕獲並傳遞給專門通道的ApplicationException。
您使用的是什麼版本的Spring集成?我剛剛運行了一個測試,從過濾器中拋出一個異常,並按預期接收到MessageHandlingException。請提供更多詳細信息,包括配置。 –
我正在使用2.1.4。我在調試會話中注意到了這種行爲。我附上更多的細節問題。 –
我以爲你在談論 元素,考慮到你將它與 進行比較。文件列表過濾器用於MessageSource中,它不是直接調用的組件。也許你可以分享更多關於你想要做什麼的信息。 –