Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Copy edits

...

Code Block
velocity:templateName[?options]

Where templateName is the classpath-local URI of the template to invoke; or the complete URL of the remote template (eg: file://folder/myfile.vm).

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

Options

Option

Default

Description

loaderCache

true

Velocity based file loader cache.

contentCache

 

New option in Camel 1.4. : Cache for the resource content when its it is loaded. Is By default, it's false in Camel 1.x. Is By default, it's true in Camel 2.x.

encoding

null

New option in Camel 1.6. : Character encoding of the resource content.

...

Header

Description

org.apache.camel.velocity.resource

Camel 1.x: The resource as an org.springframework.core.io.Resource object.

org.apache.camel.velocity.resourceUri

Camel 1.x: The templateName as a String object.

CamelVelocityResource

Camel 2.0: The resource as an org.springframework.core.io.Resource object.

CamelVelocityRsourceUri

Camel 2.0: The templateName as a String object.

In Camel 1.4 headers set during the velocity Velocity evaluation is are returned to the message and added as headers. Then its kinda possible to return values from Velocity to the Message.

An example: Set For example, to set the header value of fruit in the Velocity template .tm:

Code Block
$in.setHeader('fruit', 'Apple')

The fruit header 'fruit' is now accessible from the message.out.headers.

...

Camel will provide exchange information in the Velocity context (just a Map). The Exchange is transfered as:

key

value

exchange

The Exchange itself.

headers

The headers of the in In message.

camelContext

The Camel Context intance.

request

The in In message.

in

The in In message.

body

The in In message body.

out

The out Out message (only for InOut message exchange pattern).

response

The out Out message (only for InOut message exchange pattern).

Hot reloading

The velocity Velocity template resource is, by default, hot reloadable for both file and classpath resources (expanded jar). Setting the If you set contentCache=true then , Camel will only load the resource once, and thus hot reloading is not possible. This scenario can be used in production usage , when the resource never changes.

...

Code Block
from("activemq:My.Queue").
  to("velocity:com/acme/MyResponse.vm");

To use a velocity Velocity template to formulate a response for 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:

Code Block
from("activemq:My.Queue").
  to("velocity:com/acme/MyResponse.vm").
  to("activemq:Another.Queue");

And to use the content cache, ege.g. for use in production usage , where the .vm template never changes:

Code Block
from("activemq:My.Queue").
  to("velocity:com/acme/MyResponse.vm?contentCache=true").
  to("activemq:Another.Queue");

...

In this sample we want to use Velocity as templating for an order confirmation email. The email template is laid out in Velocity as:

...