Java ApacheCamel-句柄和重试异常

Java ApacheCamel-句柄和重试异常,java,spring,apache-camel,Java,Spring,Apache Camel,我正在使用JavaDSL来配置路由。我有一条类似于下面给出的路线 RouteBuilder builder = new RouteBuilder() { public void configure() { // onException(Exception.class).bean("bean"); onException(Exception.class).to("anotherProcessor");

我正在使用JavaDSL来配置路由。我有一条类似于下面给出的路线

    RouteBuilder builder = new RouteBuilder() {
        public void configure() {
           // onException(Exception.class).bean("bean");

            onException(Exception.class).to("anotherProcessor");

            from("queue:a").bean("someBean").to("processor");
        }
    };
在做了一些活动之后,如何放大异常?在异常中,我尝试配置一个处理器和一个bean来重新引发异常。无论哪种方式,camel都会将异常设置为exchange,但不会破坏异常

我在一个junit测试用例中这样做。我正在使用OneException处理器处理异常。在处理器内部,我正在执行断言。断言错误由camel自动处理,测试不会被标记为通过/失败

from(CONSUMER)
    .doTry()
    .doCatch(SocketTimeoutException.class,Exception.class)
            .beanRef("ErrorProcessor","processErrorMessage")
            .to("freemarker:ErrorResponseTransformer.ftl")
    .end()
    .to(PRODUCER)
试抓

onException(Exception.class)
        .handled(true)
        .process(new Processor() {
            public void process(Exchange e) throws Exception {
                helper.processErrorMessage(e);
                log.info("Response error: "
                        + MessageHelper.extractBodyAsString(e.getIn()));
                log.info("Response error: "
                        + MessageHelper.extractBodyAsString(e.getOut()));
            }
        });
发生异常时 处理异常并将其作为响应错误消息处理以显示。您甚至可以将
.to(ERRORDESTINATION)
或窃听设置为继续正常流量

或者使用camel的errorHandler


希望这能有所帮助。

你所说的“炸毁异常”是什么意思?您希望实现什么样的行为?我有一个处理器OneException,如果它抛出任何错误或异常,控件将转到DelegateSyncProcessor,并且异常/错误不会冒泡到客户端。您是否使用Camel JMS组件?如果是,则需要设置
transferException=true
(请参阅)。您可能还必须在
onException
语句中调用
.handled(false)
。我不记得如果错误由处理器处理,驼峰默认值是什么。可能是Camel将异常标记为默认处理。我有一个处理器OneException,如果它抛出任何错误或异常,控件转到DelegateSyncProcessor,异常/错误不会冒泡到客户端。错误处理最佳实践->默认情况下,在接口扩展的框架或超类中应该有DeadLetterChannel或ErrorHandler,以便捕获任何未处理的异常。