Hi! Try the following: in your split route just set a new header field with the value of "splitsize". Ok, this assignment is made more than once redundantly per each splitted element, but header properties you create on the original message are retained (hopefully :-)
Jens Von meinem iPhone gesendet > Am 10.08.2015 um 21:49 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. >>