[ 
https://issues.apache.org/jira/browse/CAMEL-25141?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen updated CAMEL-25141:
--------------------------------
    Description: 
The docs describe interceptors as scoped: an interceptor in a RouteBuilder 
applies to the routes of that RouteBuilder, and one in a route configuration 
applies to the routes that use that configuration. intercept() and 
interceptFrom() work like that, as they are woven into the routes.

interceptSendToEndpoint does not. It works by wrapping the endpoint, so every 
send to the endpoint is intercepted, whoever sends:
* routes from other RouteBuilders that send to the same endpoint (and have no 
interceptor of their own for it)
* a ProducerTemplate / FluentProducerTemplate
* dynamic sends (toD, recipientList, routingSlip, enrich) from any route

With CAMEL-25140 each route registers its own interceptor on the wrapped 
endpoint, and a send uses the interceptor of the sending route. When the 
sending route has none (or the send is not from a route), the interceptor of 
the first route that registered one is used. This keeps the behaviour of today, 
where the one interceptor that wrapped the endpoint applied to all sends.

h3. Proposal
Only intercept the sends of the routes the interceptor is defined for, which 
matches the docs and the other interceptors. A send from another route or from 
a ProducerTemplate would then go to the endpoint as-is.

h3. Things to decide
* This is a behaviour change for users that rely on the global effect (such as 
intercepting sends from a ProducerTemplate in tests, or from routes in another 
RouteBuilder). Options: change the default and document it in the upgrade 
guide, or make it an option (such as a global/scope setting on 
interceptSendToEndpoint) with the current behaviour as the default for a while.
* Sends from within the interceptor itself, and from onException / onCompletion 
of the route, should count as the route.
* How it relates to mockEndpoints / adviceWith, which are meant to be global 
(they are not route interceptors and are not affected).
* Kamelets and route templates: check which RouteBuilder or route configuration 
the routes created from them belong to, so they get the expected interceptors.

Depends on CAMEL-25140, which makes the interceptors per route.

_Claude Code on behalf of davsclaus_

  was:
The docs describe interceptors as scoped: an interceptor in a RouteBuilder 
applies to the routes of that RouteBuilder, and one in a route configuration 
applies to the routes that use that configuration. intercept() and 
interceptFrom() work like that, as they are woven into the routes.

interceptSendToEndpoint does not. It works by wrapping the endpoint, so every 
send to the endpoint is intercepted, whoever sends:
* routes from other RouteBuilders that send to the same endpoint (and have no 
interceptor of their own for it)
* a ProducerTemplate / FluentProducerTemplate
* dynamic sends (toD, recipientList, routingSlip, enrich) from any route

With CAMEL-25140 each route registers its own interceptor on the wrapped 
endpoint, and a send uses the interceptor of the sending route. When the 
sending route has none (or the send is not from a route), the interceptor of 
the first route that registered one is used. This keeps the behaviour of today, 
where the one interceptor that wrapped the endpoint applied to all sends.

h3. Proposal
Only intercept the sends of the routes the interceptor is defined for, which 
matches the docs and the other interceptors. A send from another route or from 
a ProducerTemplate would then go to the endpoint as-is.

h3. Things to decide
* This is a behaviour change for users that rely on the global effect (such as 
intercepting sends from a ProducerTemplate in tests, or from routes in another 
RouteBuilder). Options: change the default and document it in the upgrade 
guide, or make it an option (such as a global/scope setting on 
interceptSendToEndpoint) with the current behaviour as the default for a while.
* Sends from within the interceptor itself, and from onException / onCompletion 
of the route, should count as the route.
* How it relates to mockEndpoints / adviceWith, which are meant to be global 
(they are not route interceptors and are not affected).
* Kamelets and route templates: the routes created from them get the 
interceptors of their RouteBuilder or route configuration as today.

Depends on CAMEL-25140, which makes the interceptors per route.

_Claude Code on behalf of davsclaus_


> camel-core - interceptSendToEndpoint: only intercept the sends of the routes 
> the interceptor is defined for
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-25141
>                 URL: https://issues.apache.org/jira/browse/CAMEL-25141
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>            Reporter: Claus Ibsen
>            Priority: Minor
>
> The docs describe interceptors as scoped: an interceptor in a RouteBuilder 
> applies to the routes of that RouteBuilder, and one in a route configuration 
> applies to the routes that use that configuration. intercept() and 
> interceptFrom() work like that, as they are woven into the routes.
> interceptSendToEndpoint does not. It works by wrapping the endpoint, so every 
> send to the endpoint is intercepted, whoever sends:
> * routes from other RouteBuilders that send to the same endpoint (and have no 
> interceptor of their own for it)
> * a ProducerTemplate / FluentProducerTemplate
> * dynamic sends (toD, recipientList, routingSlip, enrich) from any route
> With CAMEL-25140 each route registers its own interceptor on the wrapped 
> endpoint, and a send uses the interceptor of the sending route. When the 
> sending route has none (or the send is not from a route), the interceptor of 
> the first route that registered one is used. This keeps the behaviour of 
> today, where the one interceptor that wrapped the endpoint applied to all 
> sends.
> h3. Proposal
> Only intercept the sends of the routes the interceptor is defined for, which 
> matches the docs and the other interceptors. A send from another route or 
> from a ProducerTemplate would then go to the endpoint as-is.
> h3. Things to decide
> * This is a behaviour change for users that rely on the global effect (such 
> as intercepting sends from a ProducerTemplate in tests, or from routes in 
> another RouteBuilder). Options: change the default and document it in the 
> upgrade guide, or make it an option (such as a global/scope setting on 
> interceptSendToEndpoint) with the current behaviour as the default for a 
> while.
> * Sends from within the interceptor itself, and from onException / 
> onCompletion of the route, should count as the route.
> * How it relates to mockEndpoints / adviceWith, which are meant to be global 
> (they are not route interceptors and are not affected).
> * Kamelets and route templates: check which RouteBuilder or route 
> configuration the routes created from them belong to, so they get the 
> expected interceptors.
> Depends on CAMEL-25140, which makes the interceptors per route.
> _Claude Code on behalf of davsclaus_



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to