Apache camel -处理并重新抛出异常

bq9c1y66  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(147)

我使用Java DSL来配置路由。我有一个类似下面给出的路由。

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测试用例中这样做的。我使用onException处理器来处理异常。在处理器内部,我在做我的Assert。Assert错误由camel自动处理,测试不会被标记为通过/失败。

jucafojl

jucafojl1#

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错误处理程序
希望这对你有帮助。

q9rjltbz

q9rjltbz2#

//You can handle and rethrow followingly, if that's what you mean:
from(CONSUMER)
    .doTry()
    .doCatch(SocketTimeoutException.class,Exception.class)
            .beanRef("ErrorProcessor","processErrorMessage")
            .to("freemarker:ErrorResponseTransformer.ftl")
    .end()
    .to(PRODUCER)

//where ErrorProcessor's process-method is:
   @Override
    public void process(Exchange exchange) throws Exception {
        Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT,Exception.class);       
        throw cause;
    }

相关问题