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 <
[email protected]> 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 <[email protected]>
> 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 <[email protected]>
> > 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 <[email protected]>
> > > 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 <[email protected]>
> > > 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 <
> [email protected]
> > >
> > > >> 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.