2012-03-16 41 views
0

我有一條駱駝路由,我正在使用自己的路由生成器來偵聽我在代碼中創建的特定類型的異常。捕獲駝峯路由中異常和異常的子類

所以我的路線,我已經加入

onException(); 
onMyTypeException(); 

我也創造了我的路線建設者相應的方法

public OnExceptionDefinition onException(){ 
return onException(Exception.class) 

.... 
public OnExceptionDefinition onMyTypeException(){ 
return onException(MyTypeException.class) 
.... 

的問題是,onException的()似乎趕上了一切,而不是讓我先捕捉更具體的錯誤。這裏的想法是,在我的系統中,我沒有考慮到每種類型的錯誤,所以如果有人經過,趕上onException()

任何想法?

回答

3

駱駝將首先尋找明確的異常匹配......但我認爲您的條款初始化是問題。你不應該需要返回他們在你的方法,等等。

整體,一定要定義你的onException的()子句中RouteBuilder的configure()方法之前的任何路線都設置...

看到this page瞭解更多詳情...這樣的事情...

public void configure() throws Exception { 

    onException(Exception.class).handled(true).log("general exception!!!"); 
    onException(MyException.class).handled(true).log("my exception!!!"); 

    from("direct:start").to("bean:myBean"); 
    ... 
} 
+0

我沒有做簡單的日誌記錄,當我趕上簡單的例外。這就是爲什麼我想從我的主要routebuilder中獲取代碼 - 以保持它看起來乾淨。 – Derek 2012-03-19 15:30:49

+0

@Derek,如果你願意的話,你可以在助手方法中定義這些方法,只要確保從configure()方法的開始和使用RouteBuilder的上下文來調用方法即可。另外,如果可能的話,我會選擇駝峯2.9.1 ... – 2012-03-19 16:34:48

0

您可以用左右駱駝處理這裏 http://camel.apache.org/error-handling-in-camel.html

錯誤,並使用onException的(這是人的整體閱讀所謂的例外條款)這裏有文檔:http://camel.apache.org/exception-clause.html

但是,在駱駝錯誤處理非常靈活和精心製作。而且在集成用例中處理和處理錯誤通常也很困難。這就是爲什麼我們在「駱駝在行動」一書中全面介紹了這一點。所以,如果你拿到這本書,那麼一定要閱讀第5章,它會對你有所幫助。

+0

這就是我用作實現的基礎。這是駱駝2.6的工作嗎?這是我使用的版本。 – Derek 2012-03-19 14:40:58

+0

該書涵蓋了當時最新的駱駝版本,即駱駝2.5.0。如果它適用於您,您必須嘗試使用​​您使用的駱駝版本。我們修復bug並改進更新的駱駝版本中的內容(並且幾次引入新的bug等) – 2012-03-21 08:00:23