Hi Thanks for reporting this. I have created a ticket https://issues.apache.org/jira/browse/CAMEL-3395
And will commit a fix shortly (if my fix passed the tests) On Thu, Dec 2, 2010 at 2:31 PM, sebastien.petrucci <sebastien.petru...@gmail.com> wrote: > > Hello, > > I'm an Apache Camel newbie and as I was digging into it I faced the > following issue with v2.5.0. > > Say you have an exchange with an exchange ID "A". > After going through a splitter, I would expect the (splitted) child > exchange(s) to have a correlation ID pointing to "A". But it is not the > case. There is a correlation ID, but pointing to some other (unknown) ID. > Note that there is no ExchangeCreatedEvent corresponding to these IDs. > > I doubt this is the expected behaviour, isn't it ?? > > After looking at the source code, I noticed that the original exchange is > copied (Splitter.java, line 140). This copy obtains a new exchange ID ... > which is not advertised to the EventNotifier and which is also later > referred in the correlation ID of the child exchanges. Unfortunately, that > does not allow tracing the children exchange to their parent. > > Regards, > Sebastien. > > Here is a test case showing that behaviour. > > import org.apache.camel.Exchange; > import org.apache.camel.builder.RouteBuilder; > import org.apache.camel.component.mock.MockEndpoint; > import org.apache.camel.management.EventNotifierSupport; > import org.apache.camel.management.event.*; > import org.apache.camel.test.junit4.CamelTestSupport; > import org.junit.Test; > > import java.util.EventObject; > > public class SplitExchangeTestCase extends CamelTestSupport { > > �...@test > public void testSplitterExchangeBehaviour() throws Exception { > > // Setting logging event notifier -- DO NOT SEEM TO WORK > // this.context.getManagementStrategy().addEventNotifier(new > MyEventNotifier()); > > // Create initial exchange that will be split > Exchange parentExchange = createExchangeWithBody("1,2,3"); > > // Display ID of our initial exchange > log.info(String.format("Sent Exchange [%s]", > parentExchange.getExchangeId())); > > // setup expectations > MockEndpoint mock = getMockEndpoint("mock:split"); > mock.expectedBodiesReceived("1", "2", "3"); > // these expectations are NOT satisfied > // > mock.message(0).property(Exchange.CORRELATION_ID).isEqualTo(parentExchange.getExchangeId()); > // > mock.message(1).property(Exchange.CORRELATION_ID).isEqualTo(parentExchange.getExchangeId()); > // > mock.message(2).property(Exchange.CORRELATION_ID).isEqualTo(parentExchange.getExchangeId()); > > // Send parent exchange > template.send("direct:start", parentExchange); > > assertMockEndpointsSatisfied(); > > // display the child exchange ID and correlation ID > for (Exchange exc : mock.getExchanges()) { > log.info(String.format("Received Exchange [%s] correlated to > [%s]", exc.getExchangeId(), exc.getProperty(Exchange.CORRELATION_ID))); > } > } > > �...@override > protected RouteBuilder createRouteBuilder() throws Exception { > return new RouteBuilder() { > �...@override > public void configure() throws Exception { > from("direct:start") > .split(body().tokenize(",")) > .to("mock:split"); > } > }; > } > > private static class MyEventNotifier extends EventNotifierSupport { > �...@override > public void notify(EventObject event) throws Exception { > if (event instanceof ExchangeCreatedEvent) { > ExchangeCreatedEvent e = (ExchangeCreatedEvent) event; > log.info(String.format("Exchange [%s] CREATED and correlated > to [%s]", > e.getExchange().getExchangeId(), > > e.getExchange().getProperty(Exchange.CORRELATION_ID))); > } else if (event instanceof ExchangeSentEvent) { > ExchangeSentEvent e = (ExchangeSentEvent) event; > log.info(String.format("Exchange [%s] correlated to [%s] > SENT to %s", > e.getExchange().getExchangeId(), > > e.getExchange().getProperty(Exchange.CORRELATION_ID), > e.getEndpoint().getEndpointUri())); > } else if (event instanceof ExchangeCompletedEvent) { > ExchangeCompletedEvent e = (ExchangeCompletedEvent) event; > log.info(String.format("Exchange [%s] correlated to [%s] was > COMPLETED", > e.getExchange().getExchangeId(), > > e.getExchange().getProperty(Exchange.CORRELATION_ID))); > } else if (event instanceof ExchangeFailedEvent) { > ExchangeFailedEvent e = (ExchangeFailedEvent) event; > log.info(String.format("Exchange [%s] correlated to [%s] was > FAILED", > e.getExchange().getExchangeId(), > > e.getExchange().getProperty(Exchange.CORRELATION_ID))); > } > } > > �...@override > public boolean isEnabled(EventObject event) { > return (event instanceof AbstractExchangeEvent); > } > > �...@override > protected void doStart() throws Exception { > } > > �...@override > protected void doStop() throws Exception { > } > } > } > > -- > View this message in context: > http://camel.465427.n5.nabble.com/Splitted-exchange-has-incorrect-correlation-ID-tp3289354p3289354.html > Sent from the Camel - Users mailing list archive at Nabble.com. > -- Claus Ibsen ----------------- FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/