camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Luis Augusto C. Sauerbronn" <lasa...@gmail.com>
Subject Re: action at the end of the split
Date Fri, 14 Aug 2015 22:00:59 GMT
Hi,

If you want to store an information to use it later during the lifetime of
the request you should place it in the "Exchange Properties" not in the
"Input/Output Headers".
Many endpoints and processors do not pass ahead the received headers. If
you put it on the Exchange properties it will exist through the whole life
cycle of the request.

Best regards,

Luis

2015-08-14 17:49 GMT-03:00 Wilson MacGyver <wmacgyver@gmail.com>:

> tried that, sadly no go. any header I set within the split, isn't
> accessible outside of the split block either.
>
> On Tue, Aug 11, 2015 at 4:54 AM, mailinglist@j-b-s.de <
> mailinglist@j-b-s.de>
> wrote:
>
> > 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 <wmacgyver@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.mueller@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 <wmacgyver@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.mueller@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 <
> wmacgyver@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.ibsen@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 <
> > >>> wmacgyver@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.ibsen@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
<
> > >>>> wmacgyver@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.
> > >>
> >
>
>
>
> --
> Omnem crede diem tibi diluxisse supremum.
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message