HI Claus, I've just seen your message after I posted my update. Considering you mention that it is by design that the .dynamicRouter makes defensives copies and hence cannot enrich messages, does this mean that the @DynamicRouter option is not funtioning by design (as I'm able to enrich the message) and my resolution is likely to break in the future?
Thanks, Caza > From: [email protected] > Date: Thu, 3 Mar 2011 13:12:22 +0100 > Subject: Re: Exchange headers/properties and dynamic routers > To: [email protected] > > The DynamicRouter is used for telling where to route the message next. > You cannot enrich or manipulate the message from within it. > > In Camel 3 we would re-architect the Camel routing engine to use a > different strategy than defensive copy of Exchange during routing. > This open doors to let end users manipulate the exchange more easily > from within the EIPs. > > > On Wed, Mar 2, 2011 at 4:22 PM, Caza Henha <[email protected]> wrote: > > > > Hi All, > > > > > > > > I’m new to Camel so forgive me if I am missing something > > obvious. Basically I have quite a basic route that is using a dynamic > > router. > > Where I am having problems is setting either properties or headers of the > > Exchange, as when progressing to the next endpoint/route they disappear. > > From the logging I presume this is because a new Exchange is being created, > > however if properties are set > > on the original route (File) they seem to be persisted. For example below > > the “id” > > property persists throughout all the routes, however the property (and the > > header) > > that I set within the “check” method disappear altogether even within > > the alert endpoint. How should I be doing this, I’ve even tried using > > @OutHeaders but still “bar” does not appear even in “seda:alert” log. Any > > help is appreciated as I guess I'm doing something wrong. > > > > > > > > > > Caza > > > > > > > > public class Manager { > > > > …. > > > > Public String check(Exchange > > exchange, @Property("id") UUID id, @Header(Exchange.SLIP_ENDPOINT) String > > previous) > > > > … > > > > UUID result = lookup(id); > > > > if(result > > == null){ > > > > exchange.getIn().setHeader("foo", > > "bar"); > > > > exchange.setProperty("foo", > > "bar"); > > > > return > > “seda:alert”; > > > > } > > > > … > > > > return null; > > > > … > > > > } > > > > > > > > public class Router extends RouteBuilder{ > > > > private static final UUID id = > > UUID.fromString("fbb470de-cb84-4b4c-b5d2-11610062b194"); > > > > > > > > public void configure() { > > > > > > > > from("file:W:/data?noop=true").routeId("File") > > > > .setProperty("id",constant(id)) > > > > .log("Starting > > to process file: ${header.CamelFileName}") > > > > .unmarshal().csv().to("seda:product") > > > > .log("${exchangeId} - ${property.supplierId} - > > ${property.foo} - ${header.foo}"); > > > > > > > > from("seda:product").routeId("Check") > > > > .dynamicRouter(bean("mmc", > > "check")) > > > > .log("${exchangeId} - ${property.supplierId} - > > ${property.foo} - ${header.foo}"); > > > > > > > > from("seda:alert").routeId("Alert") > > > > .log("${exchangeId} - ${property.supplierId} - ${property.foo} - > > ${header.foo}"); > > > > } > > > > } > > > > > > > > Output:[file://W:/data] File INFO > > ID-DESK-0001-64505-1299079027828-0-2 - fbb470de-cb84-4b4c-b5d2-11610062b194 > > - - > > [ Camel Thread 3 - seda://alert] Alert INFO > > ID-DESK-0001-64505-1299079027828-0-4 - fbb470de-cb84-4b4c-b5d2-11610062b194 > > - - > > [amel Thread 2 - seda://product] Check INFO > > ID-DESK-0001-64505-1299079027828-0-3 - fbb470de-cb84-4b4c-b5d2-11610062b194 > > - - > > > > -- > Claus Ibsen > ----------------- > FuseSource > Email: [email protected] > Web: http://fusesource.com > Twitter: davsclaus > Blog: http://davsclaus.blogspot.com/ > Author of Camel in Action: http://www.manning.com/ibsen/
