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.
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.
Warning | ||
---|---|---|
| ||
This snippet is not valid code. Read on. |
Code Block |
---|
.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:
Tip | ||
---|---|---|
| ||
This snippet is valid code. |
Code Block |
---|
.recipientList(simple("freemarker://templateHome/${body.templateName}.ftl")) |
Or you could use any other of Camel Languages.
Info |
---|
Notice that the Recipient List can send to multiple Endpoints if the expression returns either a 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}"), "@") |