[[velocity-component]]
= Velocity Component
:page-source: components/camel-velocity/src/main/docs/velocity-component.adoc

*Since Camel 1.2*

// HEADER START
*Only producer is supported*
// HEADER END

The Velocity component allows you to process a message using an
http://velocity.apache.org/[Apache Velocity] 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:

[source,xml]
------------------------------------------------------------
<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

[source,java]
-------------------------------
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



// component options: START
The Velocity component supports 4 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *velocityEngine* (advanced) | To use the VelocityEngine otherwise a new engine is created |  | VelocityEngine
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
|===
// component options: END




// endpoint options: START
The Velocity endpoint is configured using URI syntax:

----
velocity:resourceUri
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *resourceUri* | *Required* Path to the resource. You can prefix with: classpath, file, http, ref, or bean. classpath, file and http loads the resource using these protocols (classpath is default). ref will lookup the resource in the registry. bean will call a method on a bean to be used as the resource. For bean you can specify the method name after dot, eg bean:myBean.myMethod. |  | String
|===


=== Query Parameters (7 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *contentCache* (producer) | Sets whether to use resource content cache or not | false | boolean
| *encoding* (producer) | Character encoding of the resource content. |  | String
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *loaderCache* (producer) | Enables / disables the velocity resource loader cache which is enabled by default | true | boolean
| *propertiesFile* (producer) | The URI of the properties file which is used for VelocityEngine initialization. |  | String
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
|===
// endpoint options: END
// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-velocity-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 5 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.velocity.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
| *camel.component.velocity.bridge-error-handler* | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | Boolean
| *camel.component.velocity.enabled* | Whether to enable auto configuration of the velocity component. This is enabled by default. |  | Boolean
| *camel.component.velocity.lazy-start-producer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | Boolean
| *camel.component.velocity.velocity-engine* | To use the VelocityEngine otherwise a new engine is created. The option is a org.apache.velocity.app.VelocityEngine type. |  | String
|===
// spring-boot-auto-configure options: END



== Message Headers

You can use the following headers on the message:

[width="100%",cols="10%,90%",options="header",]
|=======================================================================
|Header |Description

|`CamelVelocityResourceUri` |The *templateName* as a `String` object.

|`CamelVelocitySupplementalContext` |To add additional information to the used VelocityContext.
The value of this header should be a `Map` with key/values that will
added (override any existing key with the same name). +
This can be used to pre setup some common key/values you want to reuse
in your velocity endpoints.
|=======================================================================

Headers set during the Velocity evaluation are returned to the message
and added as headers. Then its kinda possible to return values from
Velocity to the Message.

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

[source,java]
-------------------------------
$in.setHeader("fruit", "Apple")
-------------------------------

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

== Velocity Context

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

[width="100%",cols="10%,90%",options="header",]
|=======================================================================
|key |value

|`exchange` |The `Exchange` itself.

|`exchange.properties` |The `Exchange` properties.

|`headers` |The headers of the In message.

|`camelContext` |The Camel Context instance.

|`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).
|=======================================================================

You can setup a custom Velocity Context yourself by
setting the message header *CamelVelocityContext *just like this

[source,java]
-----------------------------------------------------------------------
   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.

== Dynamic templates

*Since 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.

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Header |Type |Description

|CamelVelocityResourceUri |String |A URI for the template resource to use instead of the
endpoint configured.

|CamelVelocityTemplate |String |The template to use instead of the endpoint configured.
|=======================================================================

== Samples

For example you could use something like

[source,java]
----------------------------------------
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:

[source,java]
----------------------------------------
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:

[source,java]
----------------------------------------------------------
from("activemq:My.Queue").
  to("velocity:com/acme/MyResponse.vm?contentCache=true").
  to("activemq:Another.Queue");
----------------------------------------------------------

And a file based resource:

[source,java]
-----------------------------------------------------------------
from("activemq:My.Queue").
  to("velocity:file://myfolder/MyResponse.vm?contentCache=true").
  to("activemq:Another.Queue");
-----------------------------------------------------------------

It's possible to specify what template the component
should use dynamically via a header, so for example:

[source,java]
---------------------------------------------------------------------------
from("direct:in").
  setHeader("CamelVelocityResourceUri").constant("path/to/my/template.vm").
  to("velocity:dummy");
---------------------------------------------------------------------------

It's possible to specify a template directly as a header
the component should use dynamically via a header, so for example:

[source,java]
---------------------------------------------------------------------------------------------------------------
from("direct:in").
  setHeader("CamelVelocityTemplate").constant("Hi this is a velocity template that can do templating ${body}").
  to("velocity:dummy");
---------------------------------------------------------------------------------------------------------------

== The Email Sample

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

[source,java]
----------------------------------------------
Dear ${headers.lastName}, ${headers.firstName}

Thanks for the order of ${headers.item}.

Regards Camel Riders Bookstore
${body}
----------------------------------------------

And the java code:

