As of Camel 2.4.0 we now support the use of @RoutingSlip on a bean method to easily create a dynamic Routing Slip using a Java method.
Simple Example using @Consume and @RoutingSlip
For example if the above bean is configured in Spring when using a <camelContext> element as follows
then a route will be created consuming from the foo queue on the ActiveMQ component which when a message is received the message will be forwarded to the endpoints defined by the result of this method call - namely the bar and whatnot queues.
How it works
The return value of the @RoutingSlip method is converted to either a java.util.Collection / java.util.Iterator or array of objects where each element is converted to an Endpoint or a String, or if you are only going to route to a single endpoint then just return either an Endpoint object or an object that can be converted to a String. So the following methods are all valid
Then for each endpoint or URI the message is routed accordingly to the returned slip. See details at the Routing Slip EIP.
You can then use whatever Java code you wish to figure out what endpoints to route to; for example you can use the Bean Binding annotations to inject parts of the message body or headers or use Expression values on the message.
More Complex Example Using DSL