Chapter 221. Mustache Component
Available as of Camel version 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> <!-- use the same version as your Camel core version --> </dependency>
221.1. 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&…
221.2. Options
The Mustache component supports 2 options which are listed below.
Name | Description | Default | Type |
---|---|---|---|
mustacheFactory (advanced) | To use a custom MustacheFactory | MustacheFactory | |
resolveProperty Placeholders (advanced) | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | boolean |
The Mustache endpoint is configured using URI syntax:
mustache:resourceUri
with the following path and query parameters:
221.2.1. Path Parameters (1 parameters):
Name | Description | Default | Type |
---|---|---|---|
resourceUri | Required Path to the resource. You can prefix with: classpath, file, http, ref, or bean. classpath, file and http loads the resource using these protocols (classpath is default). ref will lookup the resource in the registry. bean will call a method on a bean to be used as the resource. For bean you can specify the method name after dot, eg bean:myBean.myMethod. | String |
221.2.2. Query Parameters (5 parameters):
Name | Description | Default | Type |
---|---|---|---|
contentCache (producer) | Sets whether to use resource content cache or not | false | boolean |
encoding (producer) | Character encoding of the resource content. | String | |
endDelimiter (producer) | Characters used to mark template code end. | }} | String |
startDelimiter (producer) | Characters used to mark template code beginning. | {{ | String |
synchronous (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean |
221.3. Mustache Context
Camel will provide exchange information in the Mustache context (just a Map
). The Exchange
is transferred as:
key | value |
---|---|
|
The |
|
The |
| The headers of the In message. |
| The Camel Context. |
| The In message. |
| The In message body. |
| The Out message (only for InOut message exchange pattern). |
221.4. 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. |
221.5. 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");
221.6. 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}}
221.7. See Also
- Configuring Camel
- Component
- Endpoint
- Getting Started