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: Split and Aggregate - Old Exchange is null everytime in AggregationStrategy
Date Thu, 23 Jan 2014 08:21:55 GMT
Looks like its your correlation expression that is a new group for
each message, eg each xpath result is different.

If you want to split and join the same messages then see this eip
http://camel.apache.org/composed-message-processor.html

And see the example using only splitter. That is much easier to do.

On Wed, Jan 22, 2014 at 9:36 PM, dinesh19aug <dinesh19aug@gmail.com> wrote:
> Hi,
>   I see that this question has been asked a number of times but none of post
> helped or had a conclusive solution. I am splitting a message and then
> aggregating it using Aggregator2. The code was throwing exception because
> oldExchange was always null. So to test I designed a small code.
>
> I read an orders,xml file which looks like this
> <Orders xmlns="http://some/schema/Order">
>         <Order>
>                 <orderNum>1</orderNum>
>         </Order>
>         <Order>
>                 <orderNum>2</orderNum>
>         </Order>
>         <Order>
>                 <orderNum>3</orderNum>
>         </Order>
>         <Order>
>                 <orderNum>5</orderNum>
>         </Order>
>         <Order>
>                 <orderNum>6</orderNum>
>         </Order>
> </Orders>
>
> My camel Context Looks like this
> <camel:camelContext xmlns="http://camel.apache.org/schema/spring"
> xmlns:te="http://acn/schema/Order">
>
>     <camel:route>
>         <camel:from uri="file:src/data/catask/test?noop=true"/>
>         <camel:log message="${body}"></camel:log>
>         <camel:split>
>                 <camel:xpath>//te:Orders/*</camel:xpath>
>                 <camel:to uri="direct:logQueries"/>
>                  <camel:to uri="direct:aggegateQueries"/>
>         </camel:split>
>
>     </camel:route>
>
>     <camel:route>
>         <camel:from uri="direct:logQueries"/>
>         <camel:log message="After the call : \n ${body}"></camel:log>
>     </camel:route>
>
>      <camel:route>
>         <camel:from uri="direct:aggegateQueries"/>
>         <camel:aggregate strategyRef="aggrTask" completionInterval="8000" >
>                 <camel:correlationExpression>
>                         <camel:xpath>//te:Order</camel:xpath>
>                 </camel:correlationExpression>
>                  <camel:to uri="file:src/data/catask/output?fileName=output.xml"/>
>
>         </camel:aggregate>
>     </camel:route>
>
>   </camel:camelContext>
>
> My Aggregation Strategy class looks like this
>                 public Exchange aggregate(Exchange oldExchange, Exchange newExchange)
{
>                 if (oldExchange == null) {
>                         System.out.println("Returning new exchange");
>                     return newExchange;
>                 }
>
>                 String oldBody = oldExchange.getIn().getBody(String.class);
>                 String newBody = newExchange.getIn().getBody(String.class);
>                 oldExchange.getIn().setBody(oldBody + "+" + newBody);
>                 return oldExchange;
>             }
>
>
> The problem is that when the aggregated result is saved in output.xml file
> it contains only the last record it read from Orders.xml.
>
> i.e.
> <Order xmlns="http://some/schema/Order">
>                 <orderNum>6</orderNum>
>         </Order>
>
>
>
> I looked into it further and found that this was happening because after the
> first call oldExchange should have some value but it turns out it is always
> null. I think that because it is reading everything from a single file and
> splitting it, there is only exchange.
>
> Any suggestions??
>
>
>
> --
> View this message in context: http://camel.465427.n5.nabble.com/Split-and-Aggregate-Old-Exchange-is-null-everytime-in-AggregationStrategy-tp5746365.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen
Make your Camel applications look hawt, try: http://hawt.io

Mime
View raw message