在处理器上交换时设置不同的异常

时间:2011-07-20 11:11:18

标签: apache-camel

我有这样的路线:

onException(classOf[RuntimeException]).process(runtimeProcessor).process(doSmth).log(LoggingLevel.INFO, "new", "${exchangeId} --- ${exception.stacktrace} ") 

在处理器上我做:

 CustomException customException =new CustomException () 
    exchange.setException(customException ) 
    exchange.getOut.setBody(doc)

现在的问题是,在此处理器之后,它不会转到其他处理器(即在我的情况下,它不会转到“doSmth”处理器)

我猜这种行为是因为我在交换机上更改了异常,因为我已经在其上构建了“onException”。

即使更改了Exchange的例外,有没有办法强行继续我的路线!!

1 个答案:

答案 0 :(得分:1)

我试图包装进入exchage的已捕获异常并将其包装到另一个自定义异常中。

在此包装之后,我需要将此异常设置为自定义交换。 我后来在骆驼论坛上发现@Claus Ibsen-2,Camel将不会继续。我使用时路由

exchange.setException(ex)

通过执行以下@ processor处理器,我设法做了一些工作:

exchange.getOut.setHeader("ex",customException) 

然后@Route:

this.onException(classOf[IOException]).process(doSmth).log(LoggingLevel.INFO, "new", ${in.header.ex} ") 

它将以下内容打印到我的日志中,从一开始我需要的是: CustomException:java.lang.IOException