Chunk
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:
Code Block |
---|
|
<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>
|
Code Block |
---|
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
Div |
---|
class | confluenceTableSmall |
---|
|
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:
Div |
---|
class | confluenceTableSmall |
---|
|
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.
Div |
---|
class | confluenceTableSmall |
---|
|
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:
Code Block |
---|
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:
Code Block |
---|
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:
Code Block |
---|
from("direct:in").
setHeader(ChunkConstants.CHUNK_RESOURCE_URI).constant("template").
to("chunk:dummy");
|
An example of Chunk component options use:
Code Block |
---|
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:
Code Block |
---|
Dear {$headers.lastName}, {$headers.firstName}
Thanks for the order of {$headers.item}.
Regards Camel Riders Bookstore
{$body} |
Include Page |
---|
| Endpoint See Also |
---|
| Endpoint See Also |
---|
|