Red Hat Training

A Red Hat training course is available for Red Hat Fuse

Chapter 125. StringTemplate

String Template

The string-template: component allows you to process a message using a String 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:
    <!-- use the same version as your Camel core version -->

URI format

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&...


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


Apache Camel will store a reference to the resource in the message header with key, org.apache.camel.stringtemplate.resource. The Resource is an object.

Hot reloading

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

StringTemplate Attributes

Apache Camel will provide exchange information as attributes (just a java.util.Map) to the string template. The Exchange is transfered as:
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).


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

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 $.
Dear <headers.lastName>, <headers.firstName>

Thanks for the order of <headers.item>.

Regards Camel Riders Bookstore
And the java code is as follows:
private Exchange createLetter() {
    Exchange exchange = context.getEndpoint("direct:a").createExchange();
    Message msg = exchange.getIn();
    msg.setHeader("firstName", "Claus");
    msg.setHeader("lastName", "Ibsen");
    msg.setHeader("item", "Camel in Action");
    msg.setBody("PS: Next beer is on me, James");
    return exchange;

public void testVelocityLetter() throws Exception {
    MockEndpoint mock = getMockEndpoint("mock:result");
    mock.expectedBodiesReceived("Dear Ibsen, Claus! Thanks for the order of Camel in Action. Regards Camel Riders Bookstore PS: Next beer is on me, James");

    template.send("direct:a", createLetter());


protected RouteBuilder createRouteBuilder() throws Exception {
    return new RouteBuilder() {
        public void configure() throws Exception {