uniVocity CSV
Since Camel 2.15
This Data Format uses uniVocity-parsers for reading and writing three kinds of tabular data text files:
-
CSV (Comma Separated Values), where the values are separated by a symbol (usually a comma)
-
fixed-width, where the values have known sizes
-
TSV (Tabular Separated Values), where the fields are separated by a tabulation
Thus, there are three data formats based on uniVocity-parsers.
If you use Maven, you can add the following to your
pom.xml
,
substituting the version number for the latest and greatest release.
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-univocity-parsers</artifactId>
<version>x.x.x</version>
</dependency>
Options
Most configuration options of the uniVocity-parsers are available in the data formats. If you want more information about a particular option, please refer to their documentation page .
The three data formats share common options and have dedicated ones, this section presents them all.
Options
The uniVocity CSV dataformat supports the following options which are listed below.
| Name | Default | Java Type | Description |
|---|---|---|---|
|
|
|
The delimiter of values. |
|
|
|
|
Whether or not all values must be quoted when writing them. |
|
|
|
|
The quote symbol. |
|
|
|
|
The quote escape symbol. |
|
|
|
The string representation of a null value. |
||
|
|
|
Whether or not the empty lines must be ignored. |
|
|
|
|
Whether or not the trailing white spaces must be ignored. |
|
|
|
|
Whether or not the leading white spaces must be ignored. |
|
|
|
|
Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header. |
|
|
|
|
Whether or not the header must be read in the first line of the test document. |
|
|
|
The maximum number of record to read. |
||
|
|
The String representation of an empty value. |
||
|
|
The line separator of the files. The default value is to use the JVM platform line separator. |
||
|
|
The normalized line separator of the files. The default value is a new line character. |
||
|
|
|
The comment symbol. |
|
|
|
|
Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once. |
|
|
|
|
Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected). |
Marshalling usages
The marshalling accepts either:
-
A list of maps (
List<Map<String, ?>>), one for each line -
A single map (
Map<String, ?>), for a single line
Any other body will throw an exception.
Usage example: marshalling a Map into CSV format
-
Java
-
XML
-
YAML
from("direct:input")
.marshal().univocityCsv()
.to("mock:result");
<route>
<from uri="direct:input"/>
<marshal>
<univocity-csv/>
</marshal>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:input
steps:
- marshal:
univocityCsv: {}
- to:
uri: mock:result
Usage example: marshalling a Map into fixed-width format
-
Java
-
XML
-
YAML
from("direct:input")
.marshal().univocityFixed()
.to("mock:result");
<route>
<from uri="direct:input"/>
<marshal>
<univocity-fixed padding="_">
<univocity-header length="5"/>
<univocity-header length="5"/>
<univocity-header length="5"/>
</univocity-fixed>
</marshal>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:input
steps:
- marshal:
univocityFixed:
padding: "_"
- to:
uri: mock:result
Usage example: marshalling a Map into TSV format
-
Java
-
XML
-
YAML
from("direct:input")
.marshal().univocityTsv()
.to("mock:result");
<route>
<from uri="direct:input"/>
<marshal>
<univocity-tsv/>
</marshal>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:input
steps:
- marshal:
univocityTsv: {}
- to:
uri: mock:result
Unmarshalling usages
The unmarshalling uses an
InputStream
in order to read the data.
Each row produces either:
-
a list with all the values in it (
asMapoption withfalse); -
A map with all the values indexed by the headers (
asMapoption withtrue).
All the rows can either:
-
be collected at once into a list (
lazyLoadoption withfalse); -
be read on the fly using an iterator (
lazyLoadoption withtrue).
When using
lazyLoad=true
, the returned iterator holds a reference to the underlying input stream.
The iterator implements
Closeable
, so you should ensure it is closed when no longer needed
(for example, by fully consuming it or by explicitly calling
close()
in a processor).
If the iterator is not closed, the input stream will not be released until garbage collection.
|
Usage example: unmarshalling a CSV format into maps with automatic headers
-
Java
-
XML
-
YAML
from("direct:input")
.unmarshal().univocityCsv()
.to("mock:result");
<route>
<from uri="direct:input"/>
<unmarshal>
<univocity-csv headerExtractionEnabled="true" asMap="true"/>
</unmarshal>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:input
steps:
- unmarshal:
univocityCsv:
headerExtractionEnabled: true
asMap: true
- to:
uri: mock:result
Usage example: unmarshalling a fixed-width format into lists
-
Java
-
XML
-
YAML
from("direct:input")
.unmarshal().univocityFixed()
.to("mock:result");
<route>
<from uri="direct:input"/>
<unmarshal>
<univocity-fixed>
<univocity-header length="5"/>
<univocity-header length="5"/>
<univocity-header length="5"/>
</univocity-fixed>
</unmarshal>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:input
steps:
- unmarshal:
univocityFixed: {}
- to:
uri: mock:result