実際には、交換に参加するプロセッサに追加されたプロパティは、これらのコールバックの両方、つまりinonCompletion()
とで利用できますEventNotifierSupport#notify()
。
この動作を示す最小限の例は、に次の EventNotifierSupport
コールバックを登録することで再現できますCamelContext
。
// Create listener
EventNotifierSupport eventNotifierSupport = new EventNotifierSupport(){
@Override
public void notify(EventObject event) throws Exception {
if (event instanceof ExchangeCompletedEvent) {
assert ((ExchangeCompletedEvent) event).getExchange().getProperties().containsKey("ADDED");
}
}
...
}
// Register listener in CamelContext
CamelContext camelContext = new DefaultCamelContext();
camelContext.getManagementStrategy().addEventNotifier(eventNotifierSupport);
送信されたメッセージにプロパティを設定するプロセッサを使用してルートを作成する場合...
camelContext.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getProperties().put("ADDED","ADDED");
}
});
}
});
camelContext.start();
camelContext.createProducerTemplate().sendBody("direct:start", "addPropertyToMe");
...リスナーのアサーションが常に通過することがわかります。これは、トランザクションが完了した後(つまり、交換が変更された後)に交換のコピーがリスナーに送信されるというCamelのドキュメントと一致しています。
あなたの問題は他の場所にあります。プロパティがプロセッサで設定されているが、コールバックで欠落している場合の最小限の例を提供していただければ、お手伝いします。