Since we're on a major migration process of this website, some component documents here are out of sync right now. In the meantime you may want to look at the early version of the new website
https://camel.apache.org/staging/
We would very much like to receive any feedback on the new site, please join the discussion on the Camel user mailing list.

How to use a dynamic URI in to()

A dynamic URI is an endpoint URI that varies depending on inflight routing information, such as Exchange properties, message headers, the body, the Camel Context, etc.

Dynamic To - out of the box

From Camel 2.16 onwards there is a new <toD> which is a dynamic to. See more details at Message Endpoint.

 

For example, if you're using a Freemarker producer and the template location is provided inside the current message, you might expect the following code to work, but it will not.

This is not valid code

This snippet is not valid code. Read on.

.to("freemarker://templateHome/${body.templateName}.ftl")

In this case, you must use an EIP (Enterprise Integration Pattern) that is capable of computing a dynamic URI using an Expression, such as the Recipient List EIP pattern.

For example, rewriting the snippet above to use the Simple expression language:

This is valid code

This snippet is valid code.

.recipientList(simple("freemarker://templateHome/${body.templateName}.ftl"))

Or you could use any other of Camel Languages.

Notice that the Recipient List can send to multiple Endpoints if the expression returns either a java.util.List, array, java.util.Iteratable or a String. If the returned value is a String then you can specify multiple endpoints separated by comma. So if you only want to send to one endpoint and use a String type, then beware of the comma. If you need to use a comma, then you can change or turn off the separator on the Recipient List.

For example, to turn it, when using Camel 2.13 onwards:

.recipientList(simple("sql:select firstName, lastName from myTable where user = ${header.user}"), "false")

And for users of Camel 2.12.x or older, we use a non existing delimiter char:

.recipientList(simple("sql:select firstName, lastName from myTable where user = ${header.user}"), "@")
© 2004-2015 The Apache Software Foundation.
Apache Camel, Camel, Apache, the Apache feather logo, and the Apache Camel project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
Graphic Design By Hiram