Hi The on completion is triggered for exchanges that is from that given route, and when they completes. Not for outgoing messages from the aggregator.
On Sun, May 20, 2012 at 6:04 PM, toomasu <toomas.uudis...@gmail.com> wrote: > Hello, > > I am adding a message header inside of the aggregate and then I am checking > that header in route's onCompletion callback. > It seems that this does not work, header does not exist inside of the > callback. Is this an error or should it really work this way? > > Also is onCompletion called once per incoming message or only once? I have > seen both variants. > > Sample code: > > package ee.test; > > import org.apache.camel.CamelContext; > import org.apache.camel.Exchange; > import org.apache.camel.ProducerTemplate; > import org.apache.camel.builder.RouteBuilder; > import org.apache.camel.impl.DefaultCamelContext; > import org.apache.camel.processor.aggregate.AggregationStrategy; > > /** > * A Camel Router > */ > public class MyRouteBuilder extends RouteBuilder { > > /** > * Let's configure the Camel routing rules using Java code... > */ > @Override > public void configure() { > > from("direct:start") > .onCompletion() > .log("commonHdr: ${header.commonHdr}") > .log("aggregationHdr: ${header.aggregationHdr}") > .to("log:end") > .end() > .setHeader("commonHdr", constant("header")) > .aggregate(header("id"), new > StringAggregationStrategy()).completionSize(2) > .setHeader("aggregationHdr", constant("header")) > .to("mock:aggregatedEqual"); > } > > //simply combines Exchange String body values using '+' as a delimiter > class StringAggregationStrategy implements AggregationStrategy { > > @Override > public Exchange aggregate(Exchange oldExchange, Exchange > newExchange) { > if (oldExchange == null) { > return newExchange; > } > > String oldBody = oldExchange.getIn().getBody(String.class); > String newBody = newExchange.getIn().getBody(String.class); > oldExchange.getIn().setBody(oldBody + "+" + newBody); > return oldExchange; > } > } > /** > * A main() so we can easily run these routing rules in our IDE > */ > public static void main(String... args) throws Exception { > CamelContext context = new DefaultCamelContext(); > context.addRoutes(new MyRouteBuilder()); > > ProducerTemplate template = context.createProducerTemplate(); > context.start(); > > for (int i = 0; i < 2; i++) { > template.requestBodyAndHeader("direct:start", "bar", "id", "1"); > } > } > > } > > Thanks, Toomas. > > -- > View this message in context: > http://camel.465427.n5.nabble.com/Setting-message-header-in-aggregate-and-onCompletion-callback-tp5712636.html > Sent from the Camel - Users mailing list archive at Nabble.com. -- Claus Ibsen ----------------- CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/