Hi all,
I am implementing a traceability solution on camel. We need a fine grained
solution providing a lot of detail, so I am implementing my own custom
interceptor.
What I want to do is trace each step in the routes and keep the
'parent-child' relation between different exchanges (eg. different exchanges
inside the same route when in a split, etc). Also I want to print the
customId assigned to each step, so the steps are printed in user-friendly
way.
I discovered what I think is a bug. I am not sure 100% it is a bug but this
is the behaviour I had expected...
I am using camel 2.2.0 inside servicemix 3.3.2, but I think that this
behaviour is also found in latest camel version.
In routes with a split step, when my wrapProcessorInInterceptors method is
called, the ProcessorDefinition<?> paremeter is referencing the Split
definition instead of steps inside it.
For example, for the route:
from("direct:a").routeId("route:a")
.split(xpath("//a/b")).id("task:split.products")
.log("*** splited ::: body : ${body} ").id("task:handle.that")
(*)
.setHeader("insplit",constant("in-split")) (*)
.end()
.log("* aftersplit ::: body : ${body}").id("task:after.split");
for steps inside the split (*) the ProcessorDefinition is referencing the
splitdefinition, while i think it should point to the log and setHeader
steps.
It can be easily fixed, in class:::
org.apache.camel.processor.DefaultChannel
in the method initChannel, changing
target =
strategy.wrapProcessorInInterceptors(routeContext.getCamelContext(),
outputDefinition, target, next);
by this:
target =
strategy.wrapProcessorInInterceptors(routeContext.getCamelContext(),
traceDef, target, next);
Is this behaviour ok? is it well fixed? This is my first 'contribution' so
any advice and help will be more than well received.
Thank you and best regards.
Javier Arias.