Awesome, thanks Claus. I switched to using weaveById and got the exact
behavior that I wanted in my actual route (weaveByType could work too but
is a bit less explicit).

For the benefit of others, this is how I'd switch my route DSL from what I
sent earlier:

from("direct:start")
        .setBody().constant(someXml)
        .split().xpath(anXpathExpression)
            .setHeader("myHeader", constant(somethingObtainedFromXpath))
            .id("weaveHere")
            .split().xpath(anotherXpath)
                .to("seda:result");

Then in my test I'd use weaveById("weaveHere").after().to("mock:foo") to
perform my validations.

Jeff

On Fri, Apr 22, 2016 at 2:35 PM, Claus Ibsen <claus.ib...@gmail.com> wrote:

> On Fri, Apr 22, 2016 at 6:23 PM, Jeff Segal <jeffrey.se...@gmail.com>
> wrote:
> > Minh - that's exactly what I'm trying to do. The issue is that I don't
> have
> > a great hook to insert my advice where I want.
> >
> > Claus - here's a rough example:
> >
> > from("direct:start")
> >         .setBody().constant(someXml)
> >         .split().xpath(anXpathExpression)
> >             .setHeader("myHeader", constant(somethingObtainedFromXpath))
> >             .to("mock:polluted")
> >             .split().xpath(anotherXpath)
> >                 .to("seda:result");
> >
> >
> > Let's say that I wanted to write some tests that ensured that the first
> > xpath gave me what I wanted. I could just do what I've shown above and
> > throw a mock endpoint in there that I can use as an adviceWith
> > interceptSendTo hook, but I'm wondering if there's a better alternative
> > than that.
>
> If you assign ids, to you eips then you can use advice with to select
> and add after/before them etc.
> Or without id's you can do that based on EIPs type, such as split,
> setHeader etc.
>
> Take a look at those weaveById, weaveByType etc, and those selectors
> http://camel.apache.org/advicewith.html
>
> For example to add a mock before the 1st setHeader
>
> weaveByType(SetHeaderDefinition.class).before().to("mock:beforeMyHeader")
>
>
>
>
> >
> > Jeff
> >
> >
> >
> >
> > On Fri, Apr 22, 2016 at 6:58 AM, Claus Ibsen <claus.ib...@gmail.com>
> wrote:
> >
> >> On Thu, Apr 21, 2016 at 8:18 PM, Jeff Segal <jeffrey.se...@gmail.com>
> >> wrote:
> >> > I've got a route that I'd like to do some unit testing on at various
> >> > stages. It does a few splits, sets some headers, etc. The problem is
> that
> >> > there's no actual endpoint for me to intercept until the very end, but
> >> I'd
> >> > like to do some verification midway through.
> >> >
> >> > I suppose I could add arbitrary mock endpoints in key spots to use as
> >> > interceptSendTo hooks, but I'd rather not pollute my route with test
> >> > scaffolding like that. I've also tried using vanilla
> intercept().when()
> >> > calls but those end up casting too wide a net to be useful (or don't
> >> offer
> >> > a straightforward way for to intercept where and only where I want
> to).
> >> >
> >> > Is there a better alternative to solving this problem than injecting
> >> > arbitrary mocks into my production routes?
> >> >
> >>
> >> Can you provide an example. I think that would help understand what you
> >> explain.
> >>
> >>
> >> > Jeff
> >>
> >>
> >>
> >> --
> >> Claus Ibsen
> >> -----------------
> >> http://davsclaus.com @davsclaus
> >> Camel in Action 2: https://www.manning.com/ibsen2
> >>
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2
>

Reply via email to