camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Charles Moulliard <cmoulli...@gmail.com>
Subject Re: Aggregation error with Spring DSL
Date Tue, 16 Jun 2009 08:35:39 GMT
I have adapted the aggregation strategy of the splitter like this :

    public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {

        List requestMessages = new ArrayList();

        if (oldExchange == null) {
            return newExchange;
        } else {
            // Get old messages
            requestMessages = oldExchange.getOut().getBody(List.class);

            // Get new and add it to the list
            RequestMessage newReqMessage = newExchange.getOut().getBody(
                    RequestMessage.class);
            requestMessages.add(newReqMessage);

            // Add to the exchange
            oldExchange.getOut().setBody(requestMessages);
            return newExchange;
        }



    }

but no ArrayList are propagated after the split().

Where is the issue ?


Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer

*****************************
blog : http://cmoulliard.blogspot.com


On Mon, Jun 15, 2009 at 5:33 PM, Claus Ibsen <claus.ibsen@gmail.com> wrote:

> Hi Charles
>
> In Camel 2.0 the very first invocation to your aggregate the *old*
> exchange is null.
> So often you just return the new exchange as you do not have 2
> messages to aggregate.
>
> if (oldExchange == null) {
>   return newExchange;
> }
>
> This is changed in Camel 2.0 over 1.x. (eg recently change)
>
> On Mon, Jun 15, 2009 at 5:31 PM, Charles Moulliard<cmoulliard@gmail.com>
> wrote:
> > Hi,
> >
> > The following error is generated :
> >
> > Caused by: java.lang.NullPointerException
> >    at
> >
> com.xpectis.x3s.core.util.x3sAggregationStrategy.aggregate(x3sAggregationStrategy.java:18)
> >    at
> >
> org.apache.camel.processor.MulticastProcessor.doAggregate(MulticastProcessor.java:208)
> >    at
> >
> org.apache.camel.processor.MulticastProcessor.doProcessSequntiel(MulticastProcessor.java:190)
> >    at
> >
> org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:121)
> >    at
> >
> org.apache.camel.processor.interceptor.StreamCachingInterceptor.process(StreamCachingInterceptor.java:52)
> >
> > with my route :
> >
> >    <bean id="aggregationStrat"
> > class="com.xpectis.x3s.core.util.x3sAggregationStrategy" />
> >
> >            <!-- Split the collection of messages -->
> >            <camel:split strategyRef="aggregationStrat">
> >
> >                <camel:ognl>request.body</camel:ognl>
> >
> >                <!-- (1) Call the service to save the request message -->
> >                <camel:bean ref="serviceHelper"
> > method="createRequestMessage"/>
> >
> >                <!-- (2) Validate the business message -->
> >                <camel:bean ref="serviceHelper"
> > method="validateRequestMessage"/>
> >
> >                <!-- (3) Save business message -->
> >                <camel:bean ref="serviceHelper"
> > method="saveRequestMessage"/>
> >
> >            </camel:split>
> >
> > public class x3sAggregationStrategy implements AggregationStrategy {
> >
> >    public Exchange aggregate(Exchange oldExchange, Exchange newExchange)
> {
> >
> >        List requestMessages = new ArrayList();
> >
> >        // Get old messages
> >        requestMessages = oldExchange.getOut().getBody(List.class); // =
> > LINE 18
> >
> >        // Get new and add it to the list
> >        RequestMessage newReqMessage =
> > newExchange.getOut().getBody(RequestMessage.class);
> >        requestMessages.add(newReqMessage);
> >
> >        // Add to the exchange
> >        oldExchange.getOut().setBody(requestMessages);
> >
> >        return newExchange;
> >
> >    }
> >
> > }
> >
> > I try to collect all the RequestMessage and put it in a collection that I
> > will use after the split. How can I do that ?
> >
> > Regards,
> >
> > Charles Moulliard
> > Senior Enterprise Architect
> > Apache Camel Committer
> >
> > *****************************
> > blog : http://cmoulliard.blogspot.com
> >
>
>
>
> --
> Claus Ibsen
> Apache Camel Committer
>
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message