...
Maven users will need to add the following dependency to their pom.xml
for this component:
Code Block | ||||
---|---|---|---|---|
| ||||
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-velocity</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
|
URI format
Code Block |
---|
velocity:templateName[?options]
|
...
For example, to set the header value of fruit
in the Velocity template .tm
:
Code Block |
---|
$in.setHeader('fruit', 'Apple')
|
...
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 intance. | | {{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} |
Since Camel-2.14, you can setup a custom Velocity Context yourself by setting the message header CamelVelocityContext just like this
Code Block | ||
---|---|---|
| ||
VelocityContext velocityContext = new VelocityContext(variableMap);
exchange.getIn().setHeader("CamelVelocityContext", velocityContext);
|
Hot reloading
The Velocity template resource is, by default, hot reloadable for both file and classpath resources (expanded jar). If you set contentCache=true
, Camel will only load the resource once, and thus hot reloading is not possible. This scenario can be used in production, when the resource never changes.
...
For example you could use something like
Code Block |
---|
from("activemq:My.Queue").
to("velocity:com/acme/MyResponse.vm");
|
...
If you want to use InOnly and consume the message and send it to another destination, you could use the following route:
Code Block |
---|
from("activemq:My.Queue").
to("velocity:com/acme/MyResponse.vm").
to("activemq:Another.Queue");
|
And to use the content cache, e.g. for use in production, where the .vm
template never changes:
Code Block |
---|
from("activemq:My.Queue").
to("velocity:com/acme/MyResponse.vm?contentCache=true").
to("activemq:Another.Queue");
|
And a file based resource:
Code Block |
---|
from("activemq:My.Queue").
to("velocity:file://myfolder/MyResponse.vm?contentCache=true").
to("activemq:Another.Queue");
|
In Camel 2.1 it's possible to specify what template the component should use dynamically via a header, so for example:
Code Block |
---|
from("direct:in").
setHeader("CamelVelocityResourceUri").constant("path/to/my/template.vm").
to("velocity:dummy");
|
In Camel 2.1 it's possible to specify a template directly as a header the component should use dynamically via a header, so for example:
Code Block |
---|
from("direct:in").
setHeader("CamelVelocityTemplate").constant("Hi this is a velocity template that can do templating ${body}").
to("velocity:dummy");
|
...
In this sample we want to use Velocity templating for an order confirmation email. The email template is laid out in Velocity as:
Code Block |
---|
Dear ${headers.lastName}, ${headers.firstName}
Thanks for the order of ${headers.item}.
Regards Camel Riders Bookstore
${body}
|
...
Wiki Markup |
---|
{snippet:id=e1|lang=java|url=camel/trunk/components/camel-velocity/src/test/java/org/apache/camel/component/velocity/VelocityLetterTest.java} |
Include Page | ||||
---|---|---|---|---|
|