You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Charles Moulliard <cm...@gmail.com> on 2009/06/15 17:31:02 UTC

Aggregation error with Spring DSL

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

Re: Aggregation error with Spring DSL

Posted by Charles Moulliard <cm...@gmail.com>.
Shame on me. I do too much things at the same time.

oldExchange.getOut().setBody(requestMessages);
return newExchange; --> return oldExchange;


Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer

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


On Tue, Jun 16, 2009 at 10:41 AM, Claus Ibsen <cl...@gmail.com> wrote:

> On Tue, Jun 16, 2009 at 10:35 AM, Charles Moulliard<cm...@gmail.com>
> wrote:
> > 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 you really need glasses or to use a few more minutes before
> posting your problem. :)
>
> What is wrong with this code below. I leave up to you to find out, but
> its really easy to spot.
> >            // Add to the exchange
> >            oldExchange.getOut().setBody(requestMessages);
> >            return newExchange;
>
>
>
> >
> >
> > Charles Moulliard
> > Senior Enterprise Architect
> > Apache Camel Committer
> >
> > *****************************
> > blog : http://cmoulliard.blogspot.com
> >
> >
> > On Mon, Jun 15, 2009 at 5:33 PM, Claus Ibsen <cl...@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
> >>
> >
>
>
>
> --
> Claus Ibsen
> Apache Camel Committer
>
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
>

Re: Aggregation error with Spring DSL

Posted by Claus Ibsen <cl...@gmail.com>.
On Tue, Jun 16, 2009 at 10:35 AM, Charles Moulliard<cm...@gmail.com> wrote:
> 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 you really need glasses or to use a few more minutes before
posting your problem. :)

What is wrong with this code below. I leave up to you to find out, but
its really easy to spot.
>            // Add to the exchange
>            oldExchange.getOut().setBody(requestMessages);
>            return newExchange;



>
>
> Charles Moulliard
> Senior Enterprise Architect
> Apache Camel Committer
>
> *****************************
> blog : http://cmoulliard.blogspot.com
>
>
> On Mon, Jun 15, 2009 at 5:33 PM, Claus Ibsen <cl...@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<cm...@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
>>
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Re: Aggregation error with Spring DSL

Posted by Charles Moulliard <cm...@gmail.com>.
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 <cl...@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<cm...@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
>

Re: Aggregation error with Spring DSL

Posted by Claus Ibsen <cl...@gmail.com>.
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<cm...@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