DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
Maven users will need to add the following dependency to their pom.xml for this component:
| Code Block | ||||
|---|---|---|---|---|
| ||||
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-freemarker</artifactId>
<version>x.x.x</version> <!-- use the same version as your Camel core version -->
</dependency>
|
URI format
| Code Block |
|---|
freemarker:templateName[?options]
|
...
An example: Set the header value of fruit in the FreeMarker template:
| Code Block |
|---|
${request.setHeader('fruit', 'Apple')}
|
...
| Wiki Markup |
|---|
{div:class=confluenceTableSmall}
|| key || value ||
| {{exchange}} | The {{Exchange}} itself. |
| {{exchange.properties}} | The {{Exchange}} properties. |
| {{headers}} | The headers of the In message. |
| {{camelContext}} | The Camel Context. |
| {{request}} | The In message. |
| {{body}} | The In message body. |
| {{response}} | The Out message (only for InOut message exchange pattern). |
{div} |
From Camel 2.14, you can setup your custom FreeMarker context in the message header with the key "CamelFreemarkerDataModel" just like this
| Code Block |
|---|
Map<String, Object> variableMap = new HashMap<String, Object>();
variableMap.put("headers", headersMap);
variableMap.put("body", "Monday");
variableMap.put("exchange", exchange);
exchange.getIn().setHeader("CamelFreemarkerDataModel", variableMap);
|
Hot reloading
The FreeMarker template resource is by default not hot reloadable for both file and classpath resources (expanded jar). If you set contentCache=false, then Camel will not cache the resource and hot reloading is thus enabled. This scenario can be used in development.
...
For example you could use something like:
| Code Block |
|---|
from("activemq:My.Queue").
to("freemarker:com/acme/MyResponse.ftl");
|
...
If you want to use InOnly and consume the message and send it to another destination you could use:
| Code Block |
|---|
from("activemq:My.Queue").
to("freemarker:com/acme/MyResponse.ftl").
to("activemq:Another.Queue");
|
And to disable the content cache, e.g. for development usage where the .ftl template should be hot reloaded:
| Code Block |
|---|
from("activemq:My.Queue").
to("freemarker:com/acme/MyResponse.ftl?contentCache=false").
to("activemq:Another.Queue");
|
And a file-based resource:
| Code Block |
|---|
from("activemq:My.Queue").
to("freemarker:file://myfolder/MyResponse.ftl?contentCache=false").
to("activemq:Another.Queue");
|
In Camel 2.1 it's possible to specify what template the component should use dynamically via a header, so for example:
| Code Block |
|---|
from("direct:in").
setHeader(FreemarkerConstants.FREEMARKER_RESOURCE_URI).constant("path/to/my/template.ftl").
to("freemarker:dummy");
|
...
In this sample we want to use FreeMarker templating for an order confirmation email. The email template is laid out in FreeMarker as:
| Code Block |
|---|
Dear ${headers.lastName}, ${headers.firstName}
Thanks for the order of ${headers.item}.
Regards Camel Riders Bookstore
${body}
|
...
| Wiki Markup |
|---|
{snippet:id=e1|lang=java|url=camel/trunk/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerLetterTest.java} |
| Include Page | ||||
|---|---|---|---|---|
|