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.