Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: CAMEL-6363
Wiki Markup
h2. String Template

The *string-template:* component allows you to process a message using a [String Template|http://www.stringtemplate.org/]. 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:xml}
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-stringtemplate</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
{code}

h3. URI format

{code}
string-template:templateName[?options]
{code}

Where *templateName* is the classpath-local URI of the template to invoke; or the complete URL of the remote template.

You can append query options to the URI in the following format, {{?option=value&option=value&...}}

h3. Options
{div:class=confluenceTableSmall}
|| Option || Default || Description ||
| {{contentCache}} | {{false}} | Cache for the resource content when its loaded. \\ Note : as of *Camel 2.9* cached resource content can be cleared via JMX using the endpoint's {{clearContentCache}} operation. ||
| {{delimiterStart}} | {{null}} | *Since Camel 2.11.1*, configuring the variable start delimiter |
| {{delimiterEnd}} | {{null}} | *Since Camel 2.11.1*, configuring the variable end delimiter |
{div}

h3. Headers
Camel will store a reference to the resource in the message header with key, {{org.apache.camel.stringtemplate.resource}}. The Resource is an {{org.springframework.core.io.Resource}} object.

h3. Hot reloading
The string template resource is by default hot-reloadable for both file and classpath resources (expanded jar). If you set {{contentCache=true}}, Camel loads the resource only once and hot-reloading is not possible. This scenario can be used in production when the resource never changes.

h3. StringTemplate Attributes
Camel will provide exchange information as attributes (just a {{java.util.Map}}) to the string template. The Exchange is transfered as:
{div:class=confluenceTableSmall}
|| key || value ||
| {{exchange}} | The Exchange itself. |
| {{headers}} | The headers of the In message. |
| {{camelContext}} | The Camel Context. |
| {{request}} | The In message. |
| {{in}} | The In message. |
| {{body}} | The In message body. |
| {{out}} | The Out message (only for InOut message exchange pattern). |
| {{response}} | The Out message (only for InOut message exchange pattern). |
{div}

h3. Samples

For example you could use a string template as follows in order to formulate a response to a message:

{code}
from("activemq:My.Queue").
  to("string-template:com/acme/MyResponse.tm");
{code}

h3. The Email Sample
In this sample we want to use a string template to send an order confirmation email. The email template is laid out in {{StringTemplate}} as:
This example works for *camel 2.11.0*. If your camel version is less than 2.11.0, the variables should be started and ended with $.
{code}
Dear $headers<headers.lastName$lastName>, $headers<headers.firstName$firstName>

Thanks for the order of $headers<headers.item$item>.

Regards Camel Riders Bookstore
$body$<body>
{code}

And the java code is as follows:

{snippet:id=e1|lang=java|url=camel/trunk/components/camel-stringtemplate/src/test/java/org/apache/camel/component/stringtemplate/StringTemplateLetterTest.java}

{include:Endpoint See Also}