http://camel.apache.org/splitter.html
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 10: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. >> > >