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.
Info | ||
---|---|---|
|
...
I want to use a dynamic URI when sending to an endpoint. How do I do that?
For example where the template name is dynamic as shown below:
| |
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.
Warning | ||
---|---|---|
| ||
This snippet is not valid code. Read on. |
Code Block |
---|
. |
Code Block |
to("freemarker://templateHome/${body.templateName}.ftl")
|
Use the Recipient List EIP pattern, which allows you to compute the In this case, you must use an EIP (Enterprise Integration Pattern) that is capable of computing a dynamic URI using an Expressionan Expression, such as the Recipient List EIP pattern.
For example using , rewriting the snippet above to use the Simple expression language as shown below::
Tip | ||
---|---|---|
| ||
This snippet is valid code. |
Code Block |
---|
. |
Code Block |
recipientList(simple("freemarker://templateHome/${body.templateName}.ftl"))
|
Or you could use any of the other Languages.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}"), "@") |