2013-06-19 34 views
3

到錯誤處理程序我有限定doTry-doCatch塊的路由。當在doCatch塊中處理異常時,我希望將它傳播到錯誤處理程序,以確保在本地處理消息後將消息添加到死信隊列中。問題是我無法傳播到錯誤處理程序工作(「defaultErrorHandler called!」不會被打印到控制檯)。我也嘗試了onException,但也沒有運氣。異常不會傳播在Apache的駱駝

任何提示不勝感激。 問候,奧利弗

protected RouteBuilder createRouteBuilder() throws Exception { 
    return new RouteBuilder() { 
     @Override 
     public void configure() throws Exception { 

      errorHandler(deadLetterChannel("ref:myDLQ") 
       .log("defaultErrorHandler called! ${body}")); 

      final RouteDefinition route = from("seda:queue.inbox"); 

      route    
       .doTry() 
        .process(new Processor() { 
         public void process(Exchange exchange) throws Exception { 
          System.out.println("throwing ex"); 
          throw new IllegalArgumentException("test"); 
         } 
        }) 
       .doCatch(Exception.class) 
        .process(new Processor() { 
         public void process(Exchange exchange) throws Exception { 
          System.out.println("handling ex"); 
          route.log(LoggingLevel.ERROR, "Exception in route: ${body}"); 
          throw new IllegalArgumentException("rethrow"); 
         } 
        }) 
      .log("Received order ${body}") 
      .to("mock:queue.order");        
     } 
    }; 
} 

回答

1

嘗試doCatch .handled(false)。閱讀this

+1

我曾與處理(假)試圖做手工的doCatch。它被棄用,也沒有工作。但是,無論如何感謝:-)。您提供的鏈接非常有用。 – OlliP

2

根據this

駱駝錯誤處理被禁用

當使用doTry .. doCatch .. doFinally然後定期駱駝錯誤處理程序並不適用。這意味着任何onException或類似的東西都不會觸發。原因在於doTry .. doCatch .. doFinally實際上是它自己的錯誤處理程序,它的目的是模擬和工作,就像try/catch/finally在Java中的工作方式一樣。

從我自己的實驗中,我可以驗證在doTry中發生的任何事情都不會冒泡到錯誤處理程序或異常策略。如果您要發送到一紙空文通道,你必須使用一個

.to('uri') 
+0

是的,我也可以證實這一點:) – Asa