2011-06-27 95 views
4

我有一個轉換器,它接受一個org.w3c.dom.Document並返回一個域對象。這很好。如果缺少元素,則引發應用程序異常。在彈簧集成變壓器中處理異常

但是,我想要將該異常轉移到錯誤通道上,而不是通過一連串處理程序回滾它的當前工作方式。如果在變換失敗的情況下有一種指定錯誤通道的方法,那將會很不錯。

我能:

  • 傳遞消息通過路由器來檢查之前(或之後)的變壓器缺失的元素
  • 路由消息

然而,這意味着兩個解析文檔兩次,還有一次是重寫。

回答

5

我想出的答案是將變換器的返回類型從域POJO更改爲消息。然後,在例外情況下,返回一條消息。然後通過有效負載類型路由器將異常路由到正確的處理程序。

0

爲了確定異常消息的去向,需要設置「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部分。