2012-03-16 92 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