Wiki Markup |
---|
h2. Flatpack Component |
...
The Flatpack component supports fixed width and delimited file parsing via the [FlatPack library |
...
|http://flatpack.sourceforge.net]. *Notice:* This component only supports consuming from flatpack files to Object model. You can not (yet) write from Object model to flatpack format. |
...
Maven users will need to add the following dependency to their {{pom.xml}} for this component: |
...
Code Block |
---|
{code:xml}
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-flatpack</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
|
URI format
Code Block |
---|
{code} h3. URI format {code} flatpack:[delim|fixed]:flatPackConfig.pzmap.xml[?options] {code} Or for a delimited file handler with no configuration file just use |
...
{code |
} flatpack:someName[?options] {code} You can append query options to the URI in the following format, {{?option=value&option=value&.. |
...
URI Options
Name | Default Value | Description |
---|---|---|
| | The default character delimiter for delimited files. |
| | The text qualifier for delimited files. |
| | Whether the first line is ignored for delimited files (for the column headers). |
| | As of Camel 1.5, the component can either process each row one by one or the entire content at once. |
Examples
.}} h3. URI Options {div:class=confluenceTableSmall} || Name || Default Value || Description || | {{delimiter}} | {{,}} | The default character delimiter for delimited files.| | {{textQualifier}} | {{"}} | The text qualifier for delimited files.| | {{ignoreFirstRecord}} | {{true}} | Whether the first line is ignored for delimited files (for the column headers).| | {{splitRows}} | {{true}} | As of Camel 1.5, the component can either process each row one by one or the entire content at once. | {div} h3. Examples * {{flatpack:fixed:foo.pzmap.xml}} creates a fixed-width endpoint using the {{foo.pzmap.xml}} file configuration. |
...
* {{flatpack:delim:bar.pzmap.xml}} creates a delimited endpoint using the {{bar.pzmap.xml}} file configuration. |
...
* {{flatpack:foo}} creates a delimited endpoint called {{foo}} with no file configuration. h3. |
...
Message Headers |
...
Camel will store the following headers on the IN message: |
...
Header | Description |
---|---|
| The current row index. For |
Message Body
...
{div:class=confluenceTableSmall} || Header || Description || | {{camelFlatpackCounter}} | The current row index. For {{splitRows=false}} the counter is the total number of rows. | {div} h3. Message Body The component delivers the data in the IN message as a {{org.apache.camel.component.flatpack.DataSetList}} object that has converters for {{java.util.Map}} or {{java.util.List}}. |
...
Usually you want the {{Map}} if you process one row at a time ({{splitRows=true}}). Use {{List}} for the entire content ({{splitRows=false}}), where each element in the list is a {{Map}}. |
...
Each {{Map}} contains the key for the column name and its corresponding value. |
...
For example to get the firstname from the sample below: |
...
{code | ||
:java | java | } Map row = exchange.getIn().getBody(Map.class); String firstName = row.get("FIRSTNAME"); {code} However, you can also always get it as a {{List}} (even for {{splitRows=true}}). The same example: |
...
{code | ||
:java | java | }
List data = exchange.getIn().getBody(List.class);
Map row = (Map)data.get(0);
String firstName = row.get("FIRSTNAME");
|
Header and Trailer records
...
{code} h3. Header and Trailer records In Camel 1.5 onwards the header and trailer notions in Flatpack are supported. However, you *must* use fixed record IDs: |
...
header
for the header record (must be lowercase)trailer
for the trailer record (must be lowercase)
The example below illustrates this fact that we have a header and a trailer. You can omit one or both of them if not needed.
Code Block | ||
---|---|---|
xml | xml |
* {{header}} for the header record (must be lowercase)
* {{trailer}} for the trailer record (must be lowercase)
The example below illustrates this fact that we have a header and a trailer. You can omit one or both of them if not needed.
{code:xml}
<RECORD id="header" startPosition="1" endPosition="3" indicator="HBT">
<COLUMN name="INDICATOR" length="3"/>
<COLUMN name="DATE" length="8"/>
</RECORD>
<COLUMN name="FIRSTNAME" length="35" />
<COLUMN name="LASTNAME" length="35" />
<COLUMN name="ADDRESS" length="100" />
<COLUMN name="CITY" length="100" />
<COLUMN name="STATE" length="2" />
<COLUMN name="ZIP" length="5" />
<RECORD id="trailer" startPosition="1" endPosition="3" indicator="FBT">
<COLUMN name="INDICATOR" length="3"/>
<COLUMN name="STATUS" length="7"/>
</RECORD>
|
Using the endpoint
A common use case is sending a file to this endpoint for further processing in a separate route. For example:
Code Block |
---|
{code} h3. Using the endpoint A common use case is sending a file to this endpoint for further processing in a separate route. For example: {code:xml} <camelContext xmlns="http://activemq.apache.org/camel/schema/spring"> <route> <from uri="file://someDirectory"/> <to uri="flatpack:foo"/> </route> <route> <from uri="flatpack:foo"/> ... </route> </camelContext> {code} You can also convert the payload of each message created to a {{Map}} for easy [Bean Integration |
...
] {include:Flatpack |
...
DataFormat}
{include:Endpoint See Also} |