2016-03-07 34 views
1

工作時,我定義路由(片段)是這樣的:Apache的駱駝的選擇()和doTry()似乎並沒有一起

.doTry() 
    .choice() 
     .when(header("s").isEqualTo(1)) 
      .log(LoggingLevel.WARN, "normal") 
    .endChoice() 
.doCatch(Exception.class) 
    .log(LoggingLevel.WARN, "exception") 
.endDoTry() 

我在我的IDE(的IntelliJ)得到一個Cannot resolve method doCatch(...)錯誤。

不允許我把內doTry()choice謂詞?

+0

theorically,你應該使用''結束的(),而不是'endChoice()'在這種情況下..但是這並不能解決您的問題作爲結束()方法不返回一個類型處理器的定義。 –

回答

0

這工作..但說實話,我不認爲這是一個很好的答案:

((TryDefinition) from("direct:yo").doTry() 
     .choice() 
      .when(header("s").isEqualTo(1)) 
       .log(LoggingLevel.WARN, "normal") 
      .end()) 
     .doCatch(Exception.class) 
      .log(LoggingLevel.WARN, "exception") 
     .endDoTry(); 
+0

我想做一些錯誤的事情嗎?通常,當答案不確定時,問題是有缺陷的。 –

+0

你也許應該發佈到官方郵件列表。這看起來像一個bug,但我不能解釋爲什麼這是不知道的,所以我一定是錯的! –

3

試試這個:

.doTry() 
    .choice() 
     .when(header("s").isEqualTo(1)) 
      .log(LoggingLevel.WARN, "normal") 
    .endDoTry() 
.doCatch(Exception.class) 
    .log(LoggingLevel.WARN, "exception") 
.end() 

我犯同樣的錯誤,你就在不久以前; 「endDoTry」​​聽起來像「結束doTry塊」,但我認爲它實際上應該被理解爲「結束當前塊的任何內容並返回到封閉嘗試定義」。

這同樣適用於「endChoice」。