Problem solved.  To be a good net-zitizen, this is what I found after
finding some old source code from when I knew camel better:

Using .
   aggregate( simple( "${body.id}"),
AggregationStrategies.flexible().accumulateInCollection( ArrayList.class))
   .completionTimeout(5000L)
allowed me to have a body of List<-type-> being passed along my route.

I'm not sure why the example Claus posted is working versus using the
flexible approach / what the GroupedAggregationStrategies are intended to
be used for.   Documentation there is terse and I'm still not sure as to
what their actual purpose is.

Thanks,

On Wed, Apr 8, 2020 at 6:06 AM Mikael Andersson Wigander <
mikael.grevs...@gmail.com> wrote:

> I too have migrated to Camel 3 and I can’t get this to work.
>
> I have tried using a constant(true) but I get only 1 message back instead
> of 3
>
> Using a unique correlation expression I get as before, 3 different back,
> not a List of 3
>
> M
>
> > On 4 Apr 2020, at 16:10, Craig Taylor <ctalk...@ctalkobt.net> wrote:
> >
> >>> Are you really sure as its supposed to store a List<Object> that are
> > the message body.
> >
> > Yes, wanting to accumulate List<Object> over a period of time so before
> > passing into a "full changes" object so that batching of the request to a
> > 3rd party api can occur.
> >
> > I'm using Camel 3.1.0, and more detail / output from my route follows
> (note
> > - having issues w/ log4j - will look at that after this, first things
> > first):
> >
> >        from(Routes.InitialRoute)
> >            .process(
> >                (Exchange ex) -> { Logger.getLogger().error("****
> Exchange:
> > " + ex.getIn().getBody()); }
> >            )
> >            .aggregate(simple("${body.id}"),
> > AggregationStrategies.groupedBody())
> >                .completionTimeout(5000L)
> >            .process(
> >                (Exchange ex) -> { Logger.getLogger().error("****
> > Exchange2: " + ex.getIn().getBody()); }
> >            )
> >            .to(ChangeNotificationRoute.ROUTE_TO_WATERSHED);
> >
> > with an output of :
> >
> > 2020/Apr/04 09:59:03.233 ERROR ....MyChangeRoute.lambda$configure$0: ****
> > Exchange: {change:'user', id:'ekp000002600', field:'FIELD', new:'1',
> > old:'null'}
> > 2020/Apr/04 09:59:08.770 ERROR ....MyChangeRoute.lambda$configure$1: ****
> > Exchange2: List<Exchange>(1 elements)
> >
> > Note that the Routes.InitialRoute is returning a vm:// endpoint.
> >
> >
> >
> > On Sat, Apr 4, 2020 at 3:50 AM Claus Ibsen <claus.ib...@gmail.com>
> wrote:
> >
> >> Hi
> >>
> >> Are you really sure as its supposed to store a List<Object> that are
> >> the message body.
> >> But there are however only one unit test for this in camel-jms, so
> >> lets add one to camel-core.
> >>
> >> On Fri, Apr 3, 2020 at 11:23 PM Craig Taylor <ctalk...@ctalkobt.net>
> >> wrote:
> >>>
> >>> I'm wanting to accumulate all exchanges matching a correlation
> expression
> >>> (id) into a list for a given period of time.  I've looked at the
> >>> GroupedBodyAggregationStrategy and it returns an Exchange with a body
> of
> >>> List<Exchange>'s where I had expect an Exchange with a body of
> >>> List<Body_type> back.
> >>>
> >>> aggregate(simple("${body.id}"), new GroupedBodyAggregationStrategy())
> >>>    .completionTimeout(5000L)
> >>>
> >>> I wasn't able to find documentation on the built-in aggregator however,
> >>> this "sounds" like the right one to use based on naming.  Desperation
> >> wise,
> >>> attempting the other Grouped Aggregators didn't yield the solution
> >> either.
> >>>
> >>> Thanks,
> >>> --
> >>> -------------------------------------------
> >>> Craig Taylor
> >>> ctalk...@ctalkobt.net
> >>
> >>
> >>
> >> --
> >> Claus Ibsen
> >> -----------------
> >> http://davsclaus.com @davsclaus
> >> Camel in Action 2: https://www.manning.com/ibsen2
> >>
> >
> >
> > --
> > -------------------------------------------
> > Craig Taylor
> > ctalk...@ctalkobt.net
>
>

-- 
-------------------------------------------
Craig Taylor
ctalk...@ctalkobt.net

Reply via email to