camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: Setting message header in aggregate and onCompletion callback
Date Sun, 20 May 2012 19:19:27 GMT
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.uudisaru@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: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Mime
View raw message