Hi The child-parent relationship is based on a per EIP principle. So they get assigned the ChoiceDefinition (= the CBR EIP) as their parent. So you will have to drill down in the CBR if you want to pin point more fine grained where the child is associated.
However setting the id on the .otherwise() will currently set it on the ChoiceDefinition. We ought to set the id on the OtherwiseDefinition. I will get that fixed. On Thu, Jun 2, 2011 at 11:44 PM, Javier Arias Losada <javier.ari...@gmail.com> wrote: > Hello all, > > I am working on a full traceability solution on my camel routes, for that, I > am using a custom interceptor. > > The problem is that the parent-child relation is not correctly set when > InterceptStrategy.wrapProcessorInInterceptors() is called. > > I am working with a patched camel 2.2.0, to include ticket 3928 > https://issues.apache.org/jira/browse/CAMEL-3928 > Also, I repeated the tests with the last snapshot: revision 1130773, with > same results. > > For example, in the following route: > > from("direct:start").routeId("route") > .choice().id("choice") > .when(new XPathExpression("/x")).id("when") > .log(" A").id("task1") > .log(" B").id("task2") > .otherwise().id("otherwise") > .log(" C").id("task3") > .end() > .to("mock:done"); > > I use a custom interceptor to show each processor and its parent: > > getContext().addInterceptStrategy(new InterceptStrategy() { > @Override > public Processor wrapProcessorInInterceptors(CamelContext > context, ProcessorDefinition<?> definition, final Processor target, > Processor nextTarget) throws Exception { > String targetId = definition.hasCustomIdAssigned() ? > definition.getId() : definition.getLabel(); > ProcessorDefinition<?> parentDefinition = > definition.getParent(); > > String parentId = null; > > if(parentDefinition != null){ > parentId = parentDefinition.hasCustomIdAssigned() ? > parentDefinition.getId() : parentDefinition.getLabel(); > } > > logger.info(">>>>>>>>> parentId="+parentId+" > targetId="+targetId); > > return new Processor() {//return mock-empty processor. > @Override > public void process(Exchange exchange) throws Exception > { > // mock processor > target.process(exchange); > } > }; > } > }); > > > I was expecting the following output: > > parent: when targetid: task1 > parent: when targetid: task2 > parent: otherwise targetid: task3 > > Also, as you can notice, each processorDefinition is handled twice, anybody > knows why? > > The output is: > INFO: >>>>>>>>> parentId=otherwise targetId=task1 > INFO: >>>>>>>>> parentId=otherwise targetId=task1 > INFO: >>>>>>>>> parentId=otherwise targetId=task2 > INFO: >>>>>>>>> parentId=otherwise targetId=task2 > INFO: >>>>>>>>> parentId=otherwise targetId=task3 > INFO: >>>>>>>>> parentId=otherwise targetId=task3 > INFO: >>>>>>>>> parentId=route targetId=otherwise > INFO: >>>>>>>>> parentId=route targetId=otherwise > INFO: >>>>>>>>> parentId=route targetId=mock:done > INFO: >>>>>>>>> parentId=route targetId=mock:done > > Thank you very much. > Javier Arias. > -- Claus Ibsen ----------------- FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/