CSV
The CSV Data Format uses Apache Commons CSV to handle CSV payloads (Comma Separated Values) such as those exported/imported by Excel.
Options
Option |
Type |
Description |
---|---|---|
config |
CSVConfig |
Can be used to set a custom CSVConfig object. |
strategy |
CSVStrategy |
Camel uses by default |
autogenColumn |
boolean |
Camel 1.6.1/2.0: Is default true. By default, columns are autogenerated in the resulting CSV. Subsequent messages use the previously created columns with new fields being added at the end of the line. |
Marshalling a Map to CSV
The component allows you to marshal a Java Map (or any other message type that can be converted in a Map) into a CSV payload.
An example: if you send a message with this map...
... through this route ...
... you will end up with a String containing this CSV message
abc,123
Sending the Map below through this route will result in a CSV message that looks like foo,bar
Unmarshalling a CSV message into a Java List
Unmarshalling will transform a CSV messsage into a Java List with CSV file lines (containing another List with all the field values).
An example: we have a CSV file with names of persons, their IQ and their current activity.
We can now use the CSV component to unmarshal this file:
The resulting message will contain a List<List<String>>
like...
Marshalling a List<Map> to CSV
Available as of Camel 2.1
If you have multiple rows of data you want to be marshalled into CSV format you can now store the message payload as a List<Map<String, Object>>
object where the list contains a Map for each row.
File Poller of CSV, then unmarshaling
Given a bean which can handle the incoming data...
// Some comments here public void doHandleCsvData(List<List<String>> csvData) { // do magic here }
... your route then looks as follows
<route> <!-- poll every 10 seconds --> <from uri="file:///some/path/to/pickup/csvfiles?delete=true&consumer.delay=10000" /> <unmarshal><csv /></unmarshal> <to uri="bean:myCsvHandler?method=doHandleCsvData" /> </route>
Dependencies
To use CSV in your camel routes you need to add the a dependency on camel-csv 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-csv</artifactId> <version>2.0.0</version> </dependency>