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.
A StringTemplate endpoint has the following URI format:
string-template:templateName[?options]
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&...
Maven users need to add the following dependency to their
pom.xml
for this component:
<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>
Option | Default | Description |
---|---|---|
contentCache
|
false
|
Cache for the resource content when its loaded. Apache Camel 2.9:
Cached resource content can be cleared via JMX using the
endpoint's |
delimiterStart
|
null
|
Apache Camel 2.11.1: Specifies the variable start delimiter |
delimiterEnd
|
null
|
Apache Camel 2.11.1: Specifies 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
org.springframework.core.io.Resource
object.
By default, the string template resource is hot-reloadable for
both file and classpath resources (expanded jar). when you set
contentCache=true
, Apache Camel loads the
resource only once, and hot-reloading is disabled. This scenario can
be used in production when the resource never changes.
Apache Camel provides 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 to formulate a response to a message:
from("activemq:My.Queue"). to("string-template:com/acme/MyResponse.tm");
![]() | Important |
---|---|
This example works with Apache Camel
2.11.0 and onwards. If using an earlier version,
start and end the variables with
|
In this sample, we use a string template to send an order
confirmation email. The email template is laid out in
StringTemplate
as:
Dear $headers.lastName$, $headers.firstName$ Thanks for the order of $headers.item$. Regards Camel Riders Bookstore $body$
And the java code is:
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; } @Test public void testVelocityLetter() throws Exception { MockEndpoint mock = getMockEndpoint("mock:result"); mock.expectedMessageCount(1); 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()); mock.assertIsSatisfied(); } protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { public void configure() throws Exception { from("direct:a").to("string-template:org/apache/camel/component/stringtemplate/letter.tm").to("mock:result"); } }; }