Mustache
Available as of Camel 2.12
The mustache: component allows for processing a message using a Mustache template. This can be ideal when using Templating to generate responses for requests.
Maven users will need to add the following dependency to their pom.xml for this component:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-mustache</artifactId>
<version>x.x.x</version>
</dependency>
URI format
mustache:templateName[?options]
Where templateName is the classpath-local URI of the template to invoke; or the complete URL of the remote template (eg: file://folder/myfile.mustache).
You can append query options to the URI in the following format, ?option=value&option=value&...
Options
Option |
Default |
Description |
encoding |
null |
Character encoding of the resource content. |
startDelimiter |
{{ |
Characters used to mark template code beginning. |
endDelimiter |
}} |
Characters used to mark template code end. |
Mustache Context
Camel will provide exchange information in the Mustache context (just a Map). The Exchange is transferred as:
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). |
Dynamic templates
Camel provides two headers by which you can define a different resource location for a template or the template content itself. If any of these headers is set then Camel uses this over the endpoint configured resource. This allows you to provide a dynamic template at runtime.
Header |
Type |
Description |
Support Version |
MustacheConstants.MUSTACHE_RESOURCE_URI |
String |
A URI for the template resource to use instead of the endpoint configured. |
|
MustacheConstants.MUSTACHE_TEMPLATE |
String |
The template to use instead of the endpoint configured. |
|
Samples
For example you could use something like:
from("activemq:My.Queue").
to("mustache:com/acme/MyResponse.mustache");
To use a Mustache template to formulate a response for a message for InOut message exchanges (where there is a JMSReplyTo header).
If you want to use InOnly and consume the message and send it to another destination you could use:
from("activemq:My.Queue").
to("mustache:com/acme/MyResponse.mustache").
to("activemq:Another.Queue");
It's possible to specify what template the component should use dynamically via a header, so for example:
from("direct:in").
setHeader(MustacheConstants.MUSTACHE_RESOURCE_URI).constant("path/to/my/template.mustache").
to("mustache:dummy");
The Email Sample
In this sample we want to use Mustache templating for an order confirmation email. The email template is laid out in Mustache as:
Dear {{headers.lastName}}}, {{headers.firstName}}
Thanks for the order of {{headers.item}}.
Regards Camel Riders Bookstore
{{body}}
See Also