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.
>

Reply via email to