The Zip File Data Format is a message compression and de-compression format. Messages can be marshalled (compressed) to Zip files containing a single entry, and Zip files containing a single entry can be unmarshalled (decompressed) to the original file contents. This data format supports ZIP64, as long as Java 7 or later is being used.
Since Camel 2.13.3 there is also a aggregation strategy that can aggregate multiple messages into a single Zip file.
In this example we marshal a regular text/XML payload to a compressed payload using Zip file compression, and send it to an ActiveMQ queue called MY_QUEUE.
The name of the Zip entry inside the created Zip file is based on the incoming
CamelFileName message header, which is the standard message header used by the file component. Additionally, the outgoing
CamelFileName message header is automatically set to the value of the incoming
CamelFileName message header, with the ".zip" suffix. So for example, if the following route finds a file named "test.txt" in the input directory, the output will be a Zip file named "test.txt.zip" containing a single Zip entry named "test.txt":
If there is no incoming
CamelFileName message header (for example, if the file component is not the consumer), then the message ID is used by default, and since the message ID is normally a unique generated ID, you will end up with filenames like
ID-MACHINENAME-2443-1211718892437-1-0.zip. If you want to override this behavior, then you can set the value of the
CamelFileName header explicitly in your route:
This route would result in a Zip file named "report.txt.zip" in the output directory, containing a single Zip entry named "report.txt".
In this example we unmarshal a Zip file payload from an ActiveMQ queue called MY_QUEUE to its original format, and forward it for processing to the
If the zip file has more then one entry, the usingIterator option of ZipFileDataFormat to be true, and you can use splitter to do the further work.
Or you can use the ZipSplitter as an expression for splitter directly like this
In this example we aggregate all text files found in the input directory into a singel Zip file that is stored in the output directory.
CamelFileNamemessage header is created using java.io.File.createTempFile, with the ".zip" suffix. If you want to override this behavior, then you can set the value of the
CamelFileNameheader explicitly in your route:
To use Zip files in your camel routes you need to add a dependency on camel-zipfile which implements this data format.
If you use Maven you can just add the following to your
pom.xml, substituting the version number for the latest & greatest release (see the download page for the latest versions).