异常处理器之后的骆驼中止路线

时间:2018-08-24 16:59:54

标签: java soap apache-camel

我在Camel遇到问题,当调用一个在交换机上设置故障的处理器时,路由会在完成路由之前中止。我有一个像这样配置的异常处理程序:

onException(Throwable.class) {
  process(new Processor() {
    public void process(Exchange exchange) {
      // do some logging of exception details
    })
    .handled(true)
    .process(new ExceptionProcessor())
    .bean(new QueueBean(), "writeRequest")
    .bean(new QueueBean(), "writeResponse)
    .end();
  });
}

在ExceptionProcessor类中,它类似于:

public void process(Exchange exchange) {
  Exception ex = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
  if(ex instanceof MyException) {
    // do some stuff
    exchange.setProperty("errorTransaction", errorMsg);
    exchange.getIn().setBody(response);
    exchange.getIn().setFault(true);
  } else if(ex instanceof SomeOtherException {
    // do some other stuff
    exchange.getIn().setFault(true);
  }
}

问题在于,如果捕获到异常,则不会调用QueueBean行。创建并发送SOAP错误,但是不调用流程(新ExceptionProcessor)之后的任何东西。我承认我不是骆驼专家,所以我可能会在设置方式上做错什么。

有趣的是,此用于。我们更新了Camel和Spring的版本以在JDK 8+下运行,并且行为从Camel 2.13更改为Camel 2.20

现在,如果我注释掉异常处理器中的setFault(true)行,它将在路由中正确调用以下行。之所以这样说是有道理的,因为我实际上并没有告诉Camel创建SOAP错误-实际上,我正在生成自定义的SOAP消息以发回,而不是Camel生成的SOAP错误。但是,就像我说的那样,以前这种方法无需注释掉setFault(true)行即可。

此外,我在异常处理器中还有其他异常需要检查,以便发回SOAP错误,因此(我相信)可以在交易所正确调用setFault(true)。这些也无法继续路由,并且永远不会创建/调用QueueBean。

0 个答案:

没有答案