Available as of Camel 2.15
The chunk: component allows for processing a message using a Chunk 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:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-chunk</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency>
chunk:templateName[?options]
Where templateName is the classpath-local URI of the template to invoke.
You can append query options to the URI in the following
format, ?option=value&option=value&…
The Chunk component has no options.
The Chunk component supports 8 endpoint options which are listed below:
{% raw %}
| Name | Group | Default | Java Type | Description |
|---|---|---|---|---|
resourceUri | producer |
| Required Path to the resource or a reference to lookup a bean in the Registry to use as the resource | |
contentCache | producer |
|
| Sets whether to use resource content cache or not |
encoding | producer |
| Define the encoding of the body | |
extension | producer |
| Define the file extension of the template | |
themeFolder | producer |
| Define the themes folder to scan | |
themeLayer | producer |
| Define the theme layer to elaborate | |
themeSubfolder | producer |
| Define the themes subfolder to scan | |
synchronous | advanced |
|
| Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported). |
{% endraw %}
Chunk component will look for a specific template in themes folder with extensions .chtml or _.cxml. _If you need to specify a different folder or extensions, you will need to use the specific options listed above.
Camel will provide exchange information in the Chunk context (just
a Map). The Exchange is transferred as:
| key | value |
|---|---|
| The |
| The |
| The headers of the In message. |
| The Camel Context. |
| The In message. |
| The In message body. |
| The Out message (only for InOut message exchange pattern). |
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 | Support Version |
|---|---|---|---|
ChunkConstants.CHUNK_RESOURCE_URI | String | A URI for the template resource to use instead of the endpoint configured. | |
ChunkConstants.CHUNK_TEMPLATE | String | The template to use instead of the endpoint configured. |
For example you could use something like:
from("activemq:My.Queue").
to("chunk:template");To use a Chunk template to formulate a response for 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:
from("activemq:My.Queue").
to("chunk:template").
to("activemq:Another.Queue");It’s possible to specify what template the component should use dynamically via a header, so for example:
from("direct:in").
setHeader(ChunkConstants.CHUNK_RESOURCE_URI).constant("template").
to("chunk:dummy");An example of Chunk component options use:
from("direct:in").
to("chunk:file_example?themeFolder=template&themeSubfolder=subfolder&extension=chunk");In this example Chunk component will look for the file file_example.chunk in the folder template/subfolder.
In this sample we want to use Chunk templating for an order confirmation email. The email template is laid out in Chunk as:
Dear {$headers.lastName}, {$headers.firstName}
Thanks for the order of {$headers.item}.
Regards Camel Riders Bookstore
{$body}