On 2021/05/19 05:32:16, Claus Ibsen <claus.ib...@gmail.com> wrote:
> Hi
>
> You cannot do route scoped intercepting, it's always global scoped.
> The XML DSL just has a "flaw" as it is auto generated that it may
> expose the intercept as being available inside a <route> element.
Hi Claus,
Thanks for the clarification! Actually I thought it will intercept only route
scope endpoints because I'd seen that you've said that "The interceptor only
applies for all routes in the same route builder class" [1]. Looks like instead
of route I should use a route builder xml element?
Regards.
[1] https://stackoverflow.com/a/29032760/1362623
>
>
> On Tue, May 18, 2021 at 10:04 PM Yasser Zamani <yasserzam...@apache.org>
> wrote:
> >
> >
> >
> > On 2021/05/18 18:03:47 Claus Ibsen wrote:
> > > Hi
> > >
> > > That is because you use toD with http that camel optimizes under the
> > > hood to use a base endpoint and using headers with the dynamic
> > > context-path part.
> > > The interceptor can then not match that pattern.
> > >
> > > You can turn this off in toD
> > > Or you can check the header (CamelHttpPath is the name I think) in
> > > <when> to see if it matches that part of your context-path.
> >
> > Thanks for the clarification! This is the place where issue#3 emerges:
> > afterUri will be triggered always regardless of the when evaluation result.
> > Is this expected? Camel docs say it won't be triggered at all when
> > condition is false.
> >
> > The root cause of my findings was issue#2. I've defined interception at
> > route level but it intercepts all http endpoints inside the camel context.
> > Is this expected? If so then why am I allowed to define it in route scope?
> >
> > Regards.
> >
> > >
> > > On Tue, May 18, 2021 at 7:58 PM Yasser Zamani <yasserzam...@apache.org>
> > > wrote:
> > > >
> > > > Thanks for the quick reply!
> > > >
> > > > (please see in-line)
> > > >
> > > > On 2021/05/18 15:59:34, Claus Ibsen <claus.ib...@gmail.com> wrote:
> > > > > Hi
> > > > >
> > > > > What Camel version do you use?
> > > >
> > > > I use Camel 3.7.3.
> > > >
> > > > >
> > > > > Also mind about matching by exact uri, then the order of the query
> > > > > parameters also matter. So if that is not really what you need, then
> > > >
> > > > Matching by exact uri isn't possible in my case. But to test I'd also
> > > > tested an absolute uri
> > > > "http://localhost:8080/camel/external_mock/PropertyFoo?bridgeEndpoint=true"
> > > > which didn't work. The problem isn't order of query parameters. As I
> > > > said the problem is I don't know why but my break point showed me that
> > > > Camel is trying to test
> > > > "http://localhost:8080/camel/external_mock/PropertyFoo?bridgeEndpoint=true".matches("http://localhost:8080?bridgeEndpoint=true");
> > > > which doesn't match because the "/camel/external_mock/" is missing in
> > > > the intercepted uri, provided it is present in the exact uri or
> > > > wildcard uri expression.
> > > >
> > > > My best guess is that's because of my dynamic .toD where I have
> > > > ${headers.serviceType} included in the http url. For example I guess
> > > > following simplified XML DSL won't work as well:
> > > >
> > > > <interceptSendToEndpoint uri="http://localhost:8080/*">
> > > > <to uri="log:worked"/>
> > > > </interceptSendToEndpoint>
> > > > <route>
> > > > <from uri="direct:sample"/>
> > > > <toD
> > > > uri="http://localhost:8080/Sample${headers.foo}?bridgeEndpoint=true"/>
> > > >
> > > > BTW any idea about issues #2 and #3?
> > > >
> > > > Regards.
> > > >
> > > > > use a * to match with wildcard
> > > > >
> > > > > On Tue, May 18, 2021 at 5:17 PM Yasser Zamani
> > > > > <yasserzam...@apache.org> wrote:
> > > > > >
> > > > > > Hi there,
> > > > > >
> > > > > > Assume following XML DSL:
> > > > > >
> > > > > > <route id="dispatch">
> > > > > > <from uri="direct:dispatch"/>
> > > > > > <interceptSendToEndpoint uri="http:*"
> > > > > > afterUri="direct:after_dispatch">
> > > > > > <when>
> > > > > > <simple>${headers.messageType} != null &&
> > > > > > ${headers.serviceType} != null</simple>
> > > > > > </when>
> > > > > > <to uri="direct:req_out"/>
> > > > > > </interceptSendToEndpoint>
> > > > > > <choice id="dispatch-choice">
> > > > > > <when>
> > > > > > <simple>${headers.messageType} == 'Property'</simple>
> > > > > > <toD
> > > > > > uri="{{ext.url}}/Property${headers.serviceType}?bridgeEndpoint=true"/>
> > > > > > </when>
> > > > > > .
> > > > > > .
> > > > > > .
> > > > > >
> > > > > > I found several issues listed below ordered by bug likelihood:
> > > > > >
> > > > > > 1. When I change uri="http:*" to uri="{{ext.url}}/*" it doesn't
> > > > > > match as
> > > > > > I expect. I debugged and saw that Camel tries to match
> > > > > > "http://localhost:8080?bridgeEndpoint=true" with "{{ext.url}}/*"
> > > > > > i.e.
> > > > > > "http://localhost:8080/camel/external_mock/*" (because ext.url is
> > > > > > set to
> > > > > > http://localhost:8080/camel/external_mock) and it doesn't match,
> > > > > > Camel
> > > > > > is right but why it's removed "/Property${headers.serviceType}"
> > > > > > from the
> > > > > > interceptedUri?! because it has dynamics? it doesn't match because
> > > > > > it's
> > > > > > removed this portion. I expect Camel to match
> > > > > > "http://localhost:8080/camel/external_mock/PropertyFoo?bridgeEndpoint=true",
> > > > > > not "http://localhost:8080?bridgeEndpoint=true".
> > > > > >
> > > > > > 2. As you see I've defined it at route level but I see all of my
> > > > > > other
> > > > > > "http:*" endpoints will be intercepted! Is this expected?!
> > > > > >
> > > > > > 3. As per Camel docs, when `when` condition evaluates to false then
> > > > > > the
> > > > > > interception shouldn't being triggered, but I see yes, it doesn't
> > > > > > go to
> > > > > > the "direct:req_out" but always go to the afterUri i.e.
> > > > > > "direct:after_dispatch" regardless of `when`! Is this expected?
> > > > > >
> > > > > > Thanks in advance!
> > > > > >
> > > > > > Regards.
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > 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
> > >
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2
>