You can do this by using a custom AggregationStrategy.
I can provide an example tomorrow...

Best,
Am 10.08.2015 22:50 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.
> > >
> >
>

Reply via email to