Flatpack
Since Camel 2.1
The Flatpack component ships with the Flatpack data
format that can be used to format between fixed width or delimited text
messages to a List of rows as Map.
-
marshal = from
List<Map<String, Object>>toOutputStream(can be converted toString) -
unmarshal = from
java.io.InputStream(such as aFileorString) to ajava.util.Listas anorg.apache.camel.component.flatpack.DataSetListinstance.The result of the operation will contain all the data. If you need to process each row one by one you can split the exchange, using Splitter.
Notice: The Flatpack library does currently not support header and trailers for the marshal operation.
Options
The Flatpack dataformat supports 9 options, which are listed below.
| Name | Default | Java Type | Description |
|---|---|---|---|
definition |
|
The flatpack pzmap configuration file. Can be omitted in simpler situations, but its preferred to use the pzmap. |
|
fixed |
|
|
Delimited or fixed. Is by default false = delimited |
ignoreFirstRecord |
|
|
Whether the first line is ignored for delimited files (for the column headers). Is by default true. |
textQualifier |
|
If the text is qualified with a character. Uses quote character by default. |
|
delimiter |
|
|
The delimiter char (could be ; , or similar) |
allowShortLines |
|
|
Allows for lines to be shorter than expected and ignores the extra characters |
ignoreExtraColumns |
|
|
Allows for lines to be longer than expected and ignores the extra characters. |
parserFactoryRef |
|
References to a custom parser factory to lookup in the registry |
|
contentTypeHeader |
|
|
Whether the data format should set the Content-Type header with the type from the data format if the data format is capable of doing so. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSon etc. |
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-flatpack-starter</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
The component supports 12 options, which are listed below.
| Name | Description | Default | Type |
|---|---|---|---|
camel.component.flatpack.enabled |
Enable flatpack component |
true |
Boolean |
camel.component.flatpack.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 |
camel.dataformat.flatpack.allow-short-lines |
Allows for lines to be shorter than expected and ignores the extra characters |
false |
Boolean |
camel.dataformat.flatpack.content-type-header |
Whether the data format should set the Content-Type header with the type from the data format if the data format is capable of doing so. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSon etc. |
false |
Boolean |
camel.dataformat.flatpack.definition |
The flatpack pzmap configuration file. Can be omitted in simpler situations, but its preferred to use the pzmap. |
String |
|
camel.dataformat.flatpack.delimiter |
The delimiter char (could be ; , or similar) |
, |
String |
camel.dataformat.flatpack.enabled |
Enable flatpack dataformat |
true |
Boolean |
camel.dataformat.flatpack.fixed |
Delimited or fixed. Is by default false = delimited |
false |
Boolean |
camel.dataformat.flatpack.ignore-extra-columns |
Allows for lines to be longer than expected and ignores the extra characters. |
false |
Boolean |
camel.dataformat.flatpack.ignore-first-record |
Whether the first line is ignored for delimited files (for the column headers). Is by default true. |
true |
Boolean |
camel.dataformat.flatpack.parser-factory-ref |
References to a custom parser factory to lookup in the registry |
String |
|
camel.dataformat.flatpack.text-qualifier |
If the text is qualified with a character. Uses quote character by default. |
String |
ND
Usage
To use the data format, simply instantiate an instance and invoke the marshal or unmarshal operation in the route builder:
FlatpackDataFormat fp = new FlatpackDataFormat();
fp.setDefinition(new ClassPathResource("INVENTORY-Delimited.pzmap.xml"));
...
from("file:order/in").unmarshal(df).to("seda:queue:neworder");
The sample above will read files from the order/in folder and
unmarshal the input using the Flatpack configuration file
INVENTORY-Delimited.pzmap.xml that configures the structure of the
files. The result is a DataSetList object we store on the SEDA queue.
FlatpackDataFormat df = new FlatpackDataFormat();
df.setDefinition(new ClassPathResource("PEOPLE-FixedLength.pzmap.xml"));
df.setFixed(true);
df.setIgnoreFirstRecord(false);
from("seda:people").marshal(df).convertBodyTo(String.class).to("jms:queue:people");
In the code above we marshal the data from a Object representation as a
List of rows as Maps. The rows as Map contains the column name as
the key, and the corresponding value. This structure can be created
in Java code from e.g. a processor. We marshal the data according to the
Flatpack format and convert the result as a String object and store it
on a JMS queue.
Dependencies
To use Flatpack in your camel routes you need to add the a dependency on camel-flatpack which implements this data format.
If you use maven you could 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).
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-flatpack</artifactId>
<version>x.x.x</version>
</dependency>