我有一個spring-integration轉換器,它接受一個org.w3c.dom.Document並返回一個域對象。這很好。如果缺少元素,則引發應用程序異常。在彈簧集成變壓器中處理異常
但是,我想要將該異常轉移到錯誤通道上,而不是通過一連串處理程序回滾它的當前工作方式。如果在變換失敗的情況下有一種指定錯誤通道的方法,那將會很不錯。
我能:
- 傳遞消息通過路由器來檢查之前(或之後)的變壓器缺失的元素
- 路由消息
然而,這意味着兩個解析文檔兩次,還有一次是重寫。
我有一個spring-integration轉換器,它接受一個org.w3c.dom.Document並返回一個域對象。這很好。如果缺少元素,則引發應用程序異常。在彈簧集成變壓器中處理異常
但是,我想要將該異常轉移到錯誤通道上,而不是通過一連串處理程序回滾它的當前工作方式。如果在變換失敗的情況下有一種指定錯誤通道的方法,那將會很不錯。
我能:
然而,這意味着兩個解析文檔兩次,還有一次是重寫。
我想出的答案是將變換器的返回類型從域POJO更改爲消息。然後,在例外情況下,返回一條消息。然後通過有效負載類型路由器將異常路由到正確的處理程序。
爲了確定異常消息的去向,需要設置「errorChannel」頭。例如,
<int:chain input-channel="myInputChannel">
<int:header-enricher>
<int:error-channel ref="myErrorChannel" />
</int:header-enricher>
<int:transformer ref="myTransformer" />
<!-- Further actions after the transformer here -->
</int:chain>
此鏈在調用變壓器之前將分配錯誤通道頭。如果轉換成功,它會繼續下去,但如果它拋出異常,MessagingException
將作爲消息發送到myErrorChannel。 (如果您想要處理異常情況,以後在鏈中可能會有所不同,那麼在變換器之後可以使用另一個header-richher將errorChannel標頭更新爲下一個要發送異常的地方。)
請參閱詳細信息請參見Spring集成文檔的Error Handling部分。