Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.Este conteúdo não está disponível no idioma selecionado.
Chapter 132. Velocity
Velocity Copiar o linkLink copiado para a área de transferência!
Copiar o linkLink copiado para a área de transferência!
The velocity: component allows you to process a message using an Apache Velocity template. This can be ideal when using Templating to generate responses for requests.
URI format Copiar o linkLink copiado para a área de transferência!
Copiar o linkLink copiado para a área de transferência!
velocity:templateName[?options]
velocity:templateName[?options]
Where templateName is the classpath-local URI of the template to invoke; or the complete URL of the remote template (for example,
file://folder/myfile.vm
).
You can append query options to the URI in the following format,
?option=value&option=value&...
Options Copiar o linkLink copiado para a área de transferência!
Copiar o linkLink copiado para a área de transferência!
Option | Default | Description |
---|---|---|
loaderCache
|
true
|
Velocity based file loader cache. |
contentCache
|
true
|
Cache for the resource content when it is loaded. Note : as of Camel 2.9 cached resource content can be cleared via JMX using the endpoint's clearContentCache operation.
|
encoding
|
null
|
Character encoding of the resource content. |
propertiesFile
|
null
|
New option in Camel 2.1: The URI of the properties file which is used for VelocityEngine initialization. |
Velocity Context Copiar o linkLink copiado para a área de transferência!
Copiar o linkLink copiado para a área de transferência!
Apache Camel will provide exchange information in the Velocity context (just a
Map
). The Exchange
is transfered as:
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). |
Hot reloading Copiar o linkLink copiado para a área de transferência!
Copiar o linkLink copiado para a área de transferência!
The Velocity template resource is, by default, hot reloadable for both file and classpath resources (expanded jar). If you set
contentCache=true
, Apache 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.
Dynamic templates Copiar o linkLink copiado para a área de transferência!
Copiar o linkLink copiado para a área de transferência!
Available as of Camel 2.1 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.
Header | Type | Description |
---|---|---|
CamelVelocityResourceUri | String | Camel 2.1: A URI for the template resource to use instead of the endpoint configured. |
CamelVelocityTemplate | String | Camel 2.1: The template to use instead of the endpoint configured. |
Samples Copiar o linkLink copiado para a área de transferência!
Copiar o linkLink copiado para a área de transferência!
For example you could use something like
from("activemq:My.Queue"). to("velocity:com/acme/MyResponse.vm");
from("activemq:My.Queue").
to("velocity:com/acme/MyResponse.vm");
To use a Velocity template to formulate a response to 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 the following route:
from("activemq:My.Queue"). to("velocity:com/acme/MyResponse.vm"). to("activemq:Another.Queue");
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:
from("activemq:My.Queue"). to("velocity:com/acme/MyResponse.vm?contentCache=true"). to("activemq:Another.Queue");
from("activemq:My.Queue").
to("velocity:com/acme/MyResponse.vm?contentCache=true").
to("activemq:Another.Queue");
And a file based resource:
from("activemq:My.Queue"). to("velocity:file://myfolder/MyResponse.vm?contentCache=true"). to("activemq:Another.Queue");
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:
from("direct:in"). setHeader("CamelVelocityResourceUri").constant("path/to/my/template.vm"). to("velocity:dummy");
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:
from("direct:in"). setHeader("CamelVelocityTemplate").constant("Hi this is a velocity template that can do templating ${body}"). to("velocity:dummy");
from("direct:in").
setHeader("CamelVelocityTemplate").constant("Hi this is a velocity template that can do templating ${body}").
to("velocity:dummy");
The Email Sample Copiar o linkLink copiado para a área de transferência!
Copiar o linkLink copiado para a área de transferência!
In this sample we want to use Velocity templating for an order confirmation email. The email template is laid out in Velocity as:
And the java code: