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.

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 ToD or Recipient List EIP pattern.

This is valid code

This snippet is valid code.

To fix the above problem we can use either toD or recipientList. Using toD is easier as shown below:

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

When using recipient list:

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