Apache Camel многоадресная, исключительная и стратегия агрегации - PullRequest
1 голос
/ 06 сентября 2011

Я определяю сложный маршрут, по которому мне нужно было организовать различные простые операции.

   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 - это cxf WS в режиме POJO, и мне нужно сохранить его заголовок, чтобы иметь возможностьпродолжить ответ, поэтому цель моей стратегии агрегирования - сохранить исходный заголовок.Я установил опцию .stopOnException (), потому что я не хочу запускать шаг 2, если шаг 1 не в порядке.Я выкидываю исключение со следующими способами в подстроки:

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

Теперь я хочу обработать исключение в стратегии агрегации и вычислить подходящее сообщение об ошибке для моего ответа веб-службы.

ЕслиЯ определяю поведение исключения с помощью onException, при котором обмен не возвращается к стратегии агрегации, я думаю, что мне пришлось удалить опцию stopOnException, но я не знаю, как настроить мою стратегию агрегирования, чтобы пропустить следующий шаг многоадресной рассылки

...