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