Hi Claus Thanks, but the Aggregator has its interface AggregationStrategy and there is the 'onCompletion' method. And this method is invoked in case of the following route:
from("direct:processAndAggregate") .toD("xslt-saxon:mm/transform- -${header.doctype}-to-EDI-XML.xsl") .aggregate(header("doctype"), new EDIMessageToInterchangeAggregatorMM()) .forceCompletionOnStop() .to("sql:INSERT something"); So that means, in this route the onCompletion of the Aggregator is called cause the entire route is completed? -----Original Message----- From: Claus Ibsen <claus.ib...@gmail.com> Sent: Tuesday, 8 November 2022 09:50 To: users@camel.apache.org Subject: Re: Splitter and Aggregater onCompletion Hi onCompletion is its own EIP https://camel.apache.org/manual/oncompletion.html The onCompletion works on the incoming exchange in the route, and the aggregator is separated from that incoming exchange, as the output of the aggregator runs its own "lifecycle", in its own exchange. So it has no onCompletion. The route above you show, is that when the split end() then you are continuing the incoming exchange which has onCompletion. Its a bit difficult to explain, if you have the CiA2 book then take a look in the EIP chapter about the aggregator. On Tue, Nov 8, 2022 at 9:43 AM Reto Peter <reto.pe...@advanceit.ch> wrote: > Hi all > > I am using a Splitter and an Aggregator. > All of the output are written into the final result. But at the end of > the Split, I wanted to add something more. > This is where the 'onCompletion' method inside the Aggregator can be > used (in my mind, cause that works for scenarios without a Splitter). > > But if have the 'onCompletion' method, then the Aggregator does not > finish his job (cause it probably doesn't know when to stop) If I have > no 'onCompletion' method, then the Aggregator does finish his job and > the route does go on > > My question is: Why I cannot use the onCompletion method on the > Aggregator. Cause that Aggregator does the start work and should also > do the end work of the aggregation. I have used the Aggregator in > other scenarios (without the Splitter), and there it worked smoothly > > Route where it does work, but I needed to call a bean after the end of > the Splitter. > from("direct:anything") > .to("direct:getSomething") > .split(simple("${body}"), new EdiInterchangeAggregator()) // > For each document > .to("direct:prepareSomething") > .to("direct:createSomethingMore") > .end() > .log("CamelSplitSize: ${exchangeProperty.CamelSplitSize} documents") > .bean(EDIFinalizer.class, "finalizeInterchange"); > > So what I want is to implement the onCompletion method on the class > EdiInterchangeAggregator. > Is this really not possible? > > Regards > Reto > -- Claus Ibsen ----------------- @davsclaus Camel in Action 2: https://www.manning.com/ibsen2