Apache Camel多播,异常和聚合策略

时间:2011-09-06 09:33:22

标签: 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")
    .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,我需要保持其头部能够继续响应,因此我的聚合策略的目的是保留原始头。 我设置.stopOnException()选项,因为如果步骤1不正常,我不想运行第2步。 我在子路径中使用以下方式抛出异常:

.choice()
  .when(not(successResponsePredicate))
    .to("log:com.sdmo.Error?level="+LOG_LEVEL)
    .throwException(new Exception("copyItemError"))
  .otherwise()
    .to("mock:CopyItemSuccess")
 .end();

现在,我想在聚合策略中处理异常,并为我的Web服务响应计算合适的错误消息。

如果我使用onException定义了异常行为,则交换机不会返回聚合策略,我想我必须删除stopOnException选项,但我不知道如何配置我的聚合策略以跳过以下多播步骤< / p>

0 个答案:

没有答案