You can do this by using a custom AggregationStrategy. I can provide an example tomorrow...
Best, Am 10.08.2015 22:50 schrieb "Wilson MacGyver" <wmacgy...@gmail.com>: > I'm sorry my message isn't clear. I've read the docs and the chapter that > deal with this in the camel book. The issue I have isn't with the each time > part. > > It's the final log part after the split is done. My goal is after the end > of the split block to send an email logging the total number updates. > > But as you can see, CamelSplitSize is no longer set outside of the split > block. So I have no way of sending that to a SMTP route. > > On Mon, Aug 10, 2015 at 4:15 PM Christian Müller < > christian.muel...@gmail.com> wrote: > > > Sure, that's how stream works. We do not load the entire payload into > > memory. > > Why don't you use the property CamelSplitIndex? In this case, the output > > will be > > > > [Test worker] INFO route1 - each time 0 > > > > [Test worker] INFO route1 - each time 1 > > > > [Test worker] INFO route1 - each time 2 > > > > Best, > > > > Christian > > ----------------- > > > > Software Integration Specialist > > > > Apache Member > > V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer > > Apache Incubator PMC Member > > > > https://www.linkedin.com/pub/christian-mueller/11/551/642 > > > > On Mon, Aug 10, 2015 at 4:35 AM, Wilson MacGyver <wmacgy...@gmail.com> > > wrote: > > > > > public class SplitTest extends CamelTestSupport { > > > > > > @EndpointInject(uri = "mock:result") > > > > > > protected MockEndpoint resultEndpoint; > > > > > > > > > @Produce(uri = "direct:testSplit") > > > > > > protected org.apache.camel.ProducerTemplate template; > > > > > > > > > @Test > > > > > > public void testWithString() throws Exception{ > > > > > > String content = "a\nb\nc"; > > > > > > > > > resultEndpoint.expectedMessageCount(3); > > > > > > > > > template.sendBodyAndHeader( > > > > > > content, > > > > > > "foo", "bar"); > > > > > > > > > resultEndpoint.assertIsSatisfied(); > > > > > > } > > > > > > > > > @Override > > > > > > protected RouteBuilder createRouteBuilder() { > > > > > > return new RouteBuilder() { > > > > > > public void configure() { > > > > > > from("direct:testSplit") > > > > > > .split(body().tokenize("\n")).streaming() > > > > > > .log("each time > ${property.CamelSplitSize}") > > > > > > .to("mock:result") > > > > > > .end() > > > > > > .log("Processed ${property.CamelSplitSize} > > > updates") > > > > > > .log("should only happen once"); > > > > > > } > > > > > > }; > > > > > > } > > > > > > } > > > > > > > > > running this, I get the following > > > > > > > > > > > > [Test worker] INFO route1 - each time > > > > > > [Test worker] INFO route1 - each time > > > > > > [Test worker] INFO route1 - each time 3 > > > > > > [Test worker] INFO route1 - Processed updates > > > > > > [Test worker] INFO route1 - should only happen once > > > > > > > > > given the input of 3 lines. CamelSplitSize is only set at the end of > the > > > split. so only the 3rd time has the 3 displayed which is correct. > > > > > > however notice it says Processed updates, because the property is > only > > > set within the split..end block > > > > > > that's what I meant by out of scope > > > > > > > > > > > > On Sun, Aug 9, 2015 at 3:23 PM, Christian Müller < > > > christian.muel...@gmail.com> wrote: > > > > > > > What do you mean with "is out of scope"? > > > > You can use the message header to get this information. > > > > > > > > Best, > > > > > > > > Christian > > > > ----------------- > > > > > > > > Software Integration Specialist > > > > > > > > Apache Member > > > > V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer > > > > Apache Incubator PMC Member > > > > > > > > https://www.linkedin.com/pub/christian-mueller/11/551/642 > > > > > > > > On Thu, Aug 6, 2015 at 5:26 PM, Wilson MacGyver <wmacgy...@gmail.com > > > > > > wrote: > > > > > > > > > I figured out what I was doing wrong. It's because I was using > > filter > > > > with > > > > > bean. I didn't realize I had to add an end() to terminate the > > filtering > > > > > > > > > > > > > > > from() > > > > > > > > > > .split(body().tokenize("\n")).streaming() > > > > > > > > > > .process() /do stuff > > > > > > > > > > .filter().method(MyFilter.class, "keepIt") > > > > > > > > > > .to("mock:result") > > > > > > > > > > .end() > > > > > > > > > > .log("final time ${property.CamelSplitSize}") > > > > > > > > > > .to(smtp://) > > > > > > > > > > > > > > > now I have a different problem. I need to know the # of total > > > processed. > > > > > But the CamelSplitSize property is out of scope. Anyway to work > > around > > > > > that? > > > > > > > > > > > > > > > Thanks > > > > > > > > > > > > > > > > > > > > On Thu, Jul 23, 2015 at 2:03 PM, Claus Ibsen < > claus.ib...@gmail.com> > > > > > wrote: > > > > > > > > > > > You must be doing some more inside the splitter and you may need > 2 > > x > > > > end > > > > > > > > > > > > On Thu, Jul 23, 2015 at 7:45 PM, Wilson MacGyver < > > > wmacgy...@gmail.com> > > > > > > wrote: > > > > > > > hmm, if I understand you correctly, this isn't working for me. > > > > > > > > > > > > > > I have > > > > > > > > > > > > > > from() > > > > > > > > > > > > > > .split(body().tokenize("\n")).streaming() > > > > > > > > > > > > > > .process() /do stuff > > > > > > > > > > > > > > .end() > > > > > > > > > > > > > > .log("${in.body}") > > > > > > > > > > > > > > .to(smtp://) > > > > > > > > > > > > > > > > > > > > > say if the file has 100 lines, I'd except to see the log once > if > > I > > > > > > > understand what you are saying correctly. but I see the log 100 > > > > times. > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Thu, Jul 23, 2015 at 1:24 PM, Claus Ibsen < > > > claus.ib...@gmail.com> > > > > > > wrote: > > > > > > > > > > > > > >> You can do that after the splitter > > > > > > >> > > > > > > >> <from> > > > > > > >> <split> > > > > > > >> ... inside splitter > > > > > > >> </split> > > > > > > >> .. split done > > > > > > >> <to email> send email here > > > > > > >> > > > > > > >> In Java DSL you can use .end() to end the split block. > > > > > > >> > > > > > > >> On Thu, Jul 23, 2015 at 7:21 PM, Wilson MacGyver < > > > > wmacgy...@gmail.com > > > > > > > > > > > > >> wrote: > > > > > > >> > Hi, > > > > > > >> > > > > > > > >> > I'm processing a large file. so I use .split and .streaming > to > > > > > process > > > > > > >> it a > > > > > > >> > record at a time. > > > > > > >> > > > > > > > >> > I would like to send an email alert upon completion of > > > processing > > > > > the > > > > > > >> file. > > > > > > >> > > > > > > > >> > but I can't figure out where to do that. > > > > > > >> > > > > > > > >> > I know I can check to see if it's the last exchange using > > > property > > > > > > >> > "CamelSplitComplete", but it's set to true on the last > > exchange. > > > > So > > > > > I > > > > > > >> still > > > > > > >> > need to let it finish. > > > > > > >> > > > > > > > >> > Is there a good way to this? > > > > > > >> > > > > > > > >> > Thanks, > > > > > > >> > Mac > > > > > > >> > > > > > > > >> > -- > > > > > > >> > Omnem crede diem tibi diluxisse supremum. > > > > > > >> > > > > > > >> > > > > > > >> > > > > > > >> -- > > > > > > >> Claus Ibsen > > > > > > >> ----------------- > > > > > > >> http://davsclaus.com @davsclaus > > > > > > >> Camel in Action 2nd edition: http://www.manning.com/ibsen2 > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > Omnem crede diem tibi diluxisse supremum. > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > Claus Ibsen > > > > > > ----------------- > > > > > > http://davsclaus.com @davsclaus > > > > > > Camel in Action 2nd edition: http://www.manning.com/ibsen2 > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > Omnem crede diem tibi diluxisse supremum. > > > > > > > > > > > > > > > > > > > > > -- > > > Omnem crede diem tibi diluxisse supremum. > > > > > >