Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

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
xml
xml
<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
Endpoint See Also
Endpoint See Also