Java 异常未传播到Apache Camel中的错误处理程序

Java 异常未传播到Apache Camel中的错误处理程序,java,apache-camel,Java,Apache Camel,我有一个定义doTry doCatch块的路由。当在doCatch块中处理异常时,我希望将其传播到错误处理程序,以确保消息在本地处理后添加到死信队列。问题是我无法使错误处理程序的传播正常工作(“defaultErrorHandler called!”未打印到控制台)。我也尝试了一个例外,但也没有运气 非常感谢您的任何提示。 你好,奥利弗 protected RouteBuilder createRouteBuilder() throws Exception { return new Ro

我有一个定义doTry doCatch块的路由。当在doCatch块中处理异常时,我希望将其传播到错误处理程序,以确保消息在本地处理后添加到死信队列。问题是我无法使错误处理程序的传播正常工作(“defaultErrorHandler called!”未打印到控制台)。我也尝试了一个例外,但也没有运气

非常感谢您的任何提示。 你好,奥利弗

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");                               
        }
    };
}
在doCatch中尝试
.handled(false)
。阅读。

根据

骆驼错误处理已禁用

使用doTry时。。记录。。最后,常规的Camel错误处理程序不适用。这意味着任何异常或类似事件都不会触发。原因是多特里。。记录。。doFinally实际上是它自己的错误处理程序,它的目标是模仿try/catch/finally在Java中的工作方式

从我自己的实验中,我可以验证doTry中发生的任何事情都不会冒泡到错误处理程序或异常策略。如果要发送到死信频道,则必须使用

.to('uri')

我试过用handled(假的)。它已被弃用,也不起作用。不过还是要谢谢你:-)。你提供的链接非常有用。是的,我也可以确认:)