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:
Code Block | ||||
---|---|---|---|---|
| ||||
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-mustache</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency> |
URI format
Code Block |
---|
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
Wiki Markup |
---|
{div:class=confluenceTableSmall} || 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. | {div} |
Mustache Context
Camel will provide exchange information in the Mustache context (just a Map
). The Exchange
is transferred as:
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} |
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.
Wiki Markup |
---|
{div:class=confluenceTableSmall} || 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. | | {div} |
Samples
For example you could use something like:
Code Block |
---|
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:
Code Block |
---|
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:
Code Block |
---|
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:
Code Block |
---|
Dear {{headers.lastName}}}, {{headers.firstName}} Thanks for the order of {{headers.item}}. Regards Camel Riders Bookstore {{body}} |
Include Page | ||||
---|---|---|---|---|
|