У меня сложный маршрут, как показано ниже (частично):
.when(header("KEY_1").isNull())
.choice()
.when(header("KEY_2").isNull())
.split().method(SplitExample.class, "invokeSplitter").streaming().parallelProcessing().executorService(threadPoolExecutor) // first split
.policy(requires_new)
.bean(SplitExample.class, "enrich")
.bean(persister,"populateRecordAndXRef")
.bean(initializer, "initialize")
.bean(validator, "validateInMsg")
.bean(suppressResolver, "resolve")
.choice()
.when(header("KEY_3").isNull())
.bean(MsgConverter.class,"doInvoke" ) // #1 property or header set here
.split(body()) // second split
.bean(validator, "validateOutMsg")
.to(toURI.toArray(new String[ toURI.size()]))
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println(exchange.getException()); // #2 queue server is shut down here so that transaction failure occurs
}
})
.endChoice() //end when
.end() //end choice
.end() //end policy
.end() //end split
.endChoice() //end when
Я также определил следующую политику исключений:
onException(JMSException.class)
.handled(true)
.process(new QueueOperationFailureProcessor()); // #3 property or header should be accessible here
Теперь я собираюсь установить bean-компонент в качестве свойства Exchange ("RECOVERY_DETAIL") в MsgConverter (#1)
и получить тот же bean-компонент в QueueOperationFailureProcessor (#3)
.
При отладке я вижу свойство ("RECOVERY_DETAIL") в in-line processor (#2)
. На JMSException, когда моя политика исключений вступает в силу, я хотел бы получить свойство ("RECOVERY_DETAIL") в QueueOperationFailureProcessor (#3)
.
Но как это происходит - Exchange, доступный в QueueOperationFailureProcessor (#3)
, отличается от того, который доступен в in-line processor (#2)
, и свойство ("RECOVERY_DETAIL") не находится, где его можно найти.
Пожалуйста, помогите мне.
P.S. Моя версия верблюда - 2.16.0, и я не могу использовать какое-либо решение, требующее обновления версии.