Exception handling apachecamel多播、异常和聚合策略

Exception handling apachecamel多播、异常和聚合策略,exception-handling,cxf,aggregate,apache-camel,Exception Handling,Cxf,Aggregate,Apache Camel,我定义了一个复杂的路线,在这个路线中我必须协调不同的简单操作 from(cxfCartEndpoint).routeId("receiveCart") .to("log:com.sdmo.input?level="+LOG_LEVEL) .process(cartWSExtractProcessor) .to(loggingMesssagesPath+"?fileName=originalRequest${date:now:yyyyMMdd-HHmmss}.xml"

我定义了一个复杂的路线,在这个路线中我必须协调不同的简单操作

   from(cxfCartEndpoint).routeId("receiveCart")
    .to("log:com.sdmo.input?level="+LOG_LEVEL)
    .process(cartWSExtractProcessor)
    .to(loggingMesssagesPath+"?fileName=originalRequest${date:now:yyyyMMdd-HHmmss}.xml")
    .multicast(aggregationStrategy).stopOnException()
       .to("mock:doNothing","direct:copyItem","direct:XmlSave","direct:manageFinalResponse")
        .end()
     .to(loggingMesssagesPath+"?fileName=finalResponse${date:now:yyyyMMdd-HHmmss}.xml")
     .process(new ConvertCartResponseProcessor())
     .to("log:com.sdmo.output?level="+LOG_LEVEL)
     ;
from端点是POJO模式下的cxf WS,我需要保留他的头才能继续响应,因此我的聚合策略的目的是保留原始头。 我设置了.stopOneException()选项,因为如果步骤1不正常,我不想运行步骤2。 我在子例程中以以下方式引发异常:

.choice()
  .when(not(successResponsePredicate))
    .to("log:com.sdmo.Error?level="+LOG_LEVEL)
    .throwException(new Exception("copyItemError"))
  .otherwise()
    .to("mock:CopyItemSuccess")
 .end();
现在,我想在聚合策略中处理异常,并为我的web服务响应计算适当的错误消息


如果使用OneException定义异常行为,则exchange不会返回聚合策略,我认为必须删除StopOneException选项,但是我不知道如何配置我的聚合策略以跳过下面的多播步骤

当调用聚合方法时,AggregationStrategy应该具有引起的异常。newExchange参数上的getException()是否为null?引发异常时,消息不会到达聚合策略。这是OneExceptionStop选项的影响吗?如果禁用此选项,在聚合策略中检测到异常时,是否有方法跳过多播的剩余步骤?我尝试了几种异常处理,但没有成功,顺便说一句,doCatch(…)在JavaDSL中不可用。。。我正在JDK 1.5上使用Camel 2.6和tomcat 6。我想我理解错了。在写这个问题时,我创建了另一个相关问题: