Chunk
Since 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
The Chunk component has no options.
The Chunk endpoint is configured using URI syntax:
chunk:resourceUri
with the following path and query parameters:
Path Parameters (1 parameters):
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):
Name | Description | Default | Type |
---|---|---|---|
contentCache (producer) |
Sets whether to use resource content cache or not |
false |
boolean |
encoding (producer) |
Define the encoding of the body |
String |
|
extension (producer) |
Define the file extension of the template |
String |
|
themeFolder (producer) |
Define the themes folder to scan |
String |
|
themeLayer (producer) |
Define the theme layer to elaborate |
String |
|
themeSubfolder (producer) |
Define the themes subfolder to scan |
String |
|
synchronous (advanced) |
Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). |
false |
boolean |
Spring Boot Auto-Configuration
When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-chunk-starter</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
The component supports 2 options, which are listed below.
Name | Description | Default | Type |
---|---|---|---|
camel.component.chunk.enabled |
Enable chunk component |
true |
Boolean |
camel.component.chunk.resolve-property-placeholders |
Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. |
true |
Boolean |
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 |
---|---|
|
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). |
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.