Federico Mariani created CAMEL-24167:
----------------------------------------
Summary: camel-csv - 'format' option (EXCEL, MYSQL, ...) is
silently ignored (dead guard), and mismatches commons-csv Predefined names
Key: CAMEL-24167
URL: https://issues.apache.org/jira/browse/CAMEL-24167
Project: Camel
Issue Type: Bug
Components: camel-csv
Reporter: Federico Mariani
Attachments: CsvDataFormatFormatOptionIgnoredIssueTest.java
*Severity:* High
*Affects:* 4.15.0 through 4.22.0-SNAPSHOT (regression)
h3. Problem
{{CsvDataFormat}} has two stacked bugs:
# The field is pre-initialized {{private CSVFormat csvFormat =
CSVFormat.DEFAULT;}} (never null), so the {{doInit()}} guard is dead code:
{code:java}
if (csvFormat == null && format != null) {
csvFormat = CSVFormat.valueOf(format); // never reached from the DSL
}
{code}
Nothing sets {{csvFormat}} from the DSL (only {{format}}), so every {{<csv
format="..."/>}} silently runs with {{CSVFormat.DEFAULT}} (comma-delimited).
# Even if reached, {{CSVFormat.valueOf}} resolves against commons-csv's
{{CSVFormat.Predefined}}, whose names are CamelCase ({{Excel}}, {{MySQL}},
{{TDF}}, ...). The model advertises uppercase {{EXCEL}}, {{INFORMIX_UNLOAD}},
... of which only {{RFC4180}} resolves; {{"EXCEL"}} would throw
{{IllegalArgumentException}}.
h3. Regression
CAMEL-22354 replaced the old {{formatName}}/{{setFormatName}} (which mapped
uppercase names explicitly). CAMEL-23031 fixed only the init ordering, not the
dead guard or the name mismatch. The Spring test XMLs were rewritten to
{{format="EXCEL"}} but their assertions cannot distinguish EXCEL from DEFAULT.
h3. Failure scenario (reproduced)
{{setFormat("MYSQL")}} (TAB delimiter) then marshal a row -> output is
comma-delimited {{1,2,3}} instead of TAB-delimited.
h3. Suggested fix
Initialize {{csvFormat = null}} (keep the {{if (csvFormat == null) csvFormat =
CSVFormat.DEFAULT;}} fallback), map the documented uppercase names to
{{Predefined}} case-insensitively, and correct the model enum list. Add a test
asserting a predefined format's delimiter actually takes effect.
h3. Reproducer
Attached {{CsvDataFormatFormatOptionIgnoredIssueTest.java}} asserts TAB output
for {{format=MYSQL}}; RED on current code (got comma).
----
_Reported by Claude Code on behalf of Federico Mariani (Croway). A failing
JUnit reproducer (confirmed RED on 4.22.0-SNAPSHOT) is attached._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)