Chapter 18. Chunk
Chunk Component
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>
URI format
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&...
Options
Option
|
Default
|
Description
|
---|---|---|
encoding
|
null
|
Character encoding of the resource content.
|
themesFolder
|
null
|
Alternative folder to scan for a template name.
|
themeSubfolder
|
null
|
Alternative subfolder to scan for a template name if themeFolder parameter is set.
|
themeLayer
|
null
|
A specific layer of a template file to use as template.
|
extension
|
null
|
Alternative extension to scan for a template name if themeFolder and themeSubfolder are set.
|
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.
Chunk Context
Camel will provide exchange information in the Chunk context (just a
Map
). The Exchange
is transferred as:
key
|
value
|
---|---|
exchange
|
The
Exchange itself.
|
exchange.properties
|
The
Exchange properties.
|
headers
|
The headers of the In message.
|
camelContext
|
The Camel Context.
|
request
|
The In message.
|
body
|
The In message body.
|
response
|
The Out message (only for InOut message exchange pattern).
|
Dynamic templates
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.
|
|
Samples
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.
The Email Sample
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}