You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2026/08/29 10:21:00 UTC

[jira] [Resolved] (CAMEL-24522) camel-csv: wrap CsvUnmarshaller IOException with descriptive message for malformed quoted fields

     [ https://issues.apache.org/jira/browse/CAMEL-24522?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Claus Ibsen resolved CAMEL-24522.
---------------------------------
    Resolution: Not A Problem

> camel-csv: wrap CsvUnmarshaller IOException with descriptive message for malformed quoted fields
> ------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24522
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24522
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-csv
>            Reporter: mayur mohan
>            Priority: Major
>              Labels: csv, error-message, usability
>
> h2. Problem
> When Apache Commons CSV fails to parse a malformed CSV file (e.g. extra characters after a closing quote before the delimiter), it throws a raw IOException with an unhelpful message:
> {code:java}
> java.io.IOException: (line 1) invalid char between encapsulated token and delimiter
>     at org.apache.commons.csv.Lexer.parseEncapsulatedToken(Lexer.java:281)
>     at org.apache.commons.csv.Lexer.nextToken(Lexer.java:158)
>     at org.apache.commons.csv.CSVParser.nextRecord(CSVParser.java:674)
>     at org.apache.commons.csv.CSVParser.createHeaders(CSVParser.java:483)
>     at org.apache.commons.csv.CSVParser.<init>(CSVParser.java:412)
>     at org.apache.commons.csv.CSVParser.<init>(CSVParser.java:378)
>     at org.apache.camel.dataformat.csv.CsvUnmarshaller$BulkCsvUnmarshaller.unmarshal(CsvUnmarshaller.java:105)
>     at org.apache.camel.dataformat.csv.CsvDataFormat.unmarshal(CsvDataFormat.java:95)
>     at com.sap.it.rt.csvtoxml.converter.internal.CsvToJavaListConverter.unmarshalCsv(CsvToJavaListConverter.java:57)
>     at com.sap.it.rt.csvtoxml.converter.CsvToXmlProcessor.process(CsvToXmlProcessor.java:79)
> {code}
> The term "encapsulated token" is internal Commons CSV terminology that operators do not understand. When they see this error they do not know what is wrong with their CSV or how to fix it.
> h2. Root Cause
> The {{CsvUnmarshaller}} (both {{BulkCsvUnmarshaller}} and {{StreamCsvUnmarshaller}}) does not catch the {{IOException}} thrown by {{CSVParser}} construction or iteration, so the raw Commons CSV message propagates unchanged.
> A common real-world trigger is a CSV header line like:
> {code}
> "OrderId"x,"Name"
> {code}
> where a quoted field has extra characters after the closing quote and before the delimiter.
> h2. Fix
> Catch {{IOException}} in both unmarshal paths and re-throw with a message that:
> # Prefixes with {{CSV parse failed:}} to identify it as a Camel-level error
> # Explains what "encapsulated token" means in plain language
> # Gives a concrete example of the malformed input pattern
> # Tells the operator what to check (delimiter, quote character, escaped quotes)
> h3. After the fix the error reads:
> {code}
> CSV parse failed: (line 1) invalid char between encapsulated token and delimiter.
> A quoted field has extra characters after the closing quote and before the delimiter
> (example: "abc"x,def). Check delimiter, quote character, and escaped quotes ("").
> {code}
> h2. Affected file
> {{components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvUnmarshaller.java}}
> Both inner classes: {{BulkCsvUnmarshaller}} and {{StreamCsvUnmarshaller}}.
> h2. Impact
> Error message only -- no behaviour change, no new dependencies, no API changes.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)