This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new ee4f599156f8 CAMEL-24167: camel-csv - Fix format option silently 
ignored (#24816)
ee4f599156f8 is described below

commit ee4f599156f8b04f8d423125e43d1cf42161810a
Author: Federico Mariani <[email protected]>
AuthorDate: Fri Jul 17 14:48:12 2026 +0200

    CAMEL-24167: camel-csv - Fix format option silently ignored (#24816)
    
    Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
---
 .../apache/camel/dataformat/csv/CsvDataFormat.java   | 17 +++++++++++++++--
 .../camel/dataformat/csv/CsvDataFormatTest.java      | 20 ++++++++++++++++++++
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git 
a/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvDataFormat.java
 
b/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvDataFormat.java
index 102206f50f97..5e443a58c644 100644
--- 
a/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvDataFormat.java
+++ 
b/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvDataFormat.java
@@ -105,8 +105,8 @@ public class CsvDataFormat extends ServiceSupport 
implements DataFormat, DataFor
     protected void doInit() throws Exception {
         super.doInit();
 
-        if (csvFormat == null && format != null) {
-            csvFormat = CSVFormat.valueOf(format);
+        if (format != null) {
+            csvFormat = resolveFormat(format);
         }
         if (csvFormat == null) {
             csvFormat = CSVFormat.DEFAULT;
@@ -121,6 +121,19 @@ public class CsvDataFormat extends ServiceSupport 
implements DataFormat, DataFor
         // noop
     }
 
+    private static CSVFormat resolveFormat(String name) {
+        // The model advertises uppercase names (EXCEL, INFORMIX_UNLOAD) but
+        // commons-csv Predefined uses CamelCase (Excel, InformixUnload).
+        // Match by stripping underscores and comparing case-insensitively.
+        String normalized = name.replace("_", "");
+        for (CSVFormat.Predefined p : CSVFormat.Predefined.values()) {
+            if (p.name().equalsIgnoreCase(normalized)) {
+                return p.getFormat();
+            }
+        }
+        throw new IllegalArgumentException("Unknown CSV format: " + name);
+    }
+
     CSVFormat getActiveFormat() {
         CSVFormat answer = csvFormat;
 
diff --git 
a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatTest.java
 
b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatTest.java
index d556fd5042df..43de12188773 100644
--- 
a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatTest.java
+++ 
b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatTest.java
@@ -80,6 +80,26 @@ public class CsvDataFormatTest {
         }
     }
 
+    @Test
+    void shouldResolveFormatByName() throws IOException {
+        try (CsvDataFormat dataFormat = new CsvDataFormat()) {
+            dataFormat.setFormat("MYSQL");
+            dataFormat.start();
+            assertEquals(CSVFormat.MYSQL, dataFormat.getCsvFormat());
+            assertEquals("\t", 
dataFormat.getActiveFormat().getDelimiterString());
+        }
+    }
+
+    @Test
+    void shouldResolveFormatByNameCaseInsensitive() throws IOException {
+        try (CsvDataFormat dataFormat = new CsvDataFormat()) {
+            dataFormat.setFormat("EXCEL");
+            dataFormat.start();
+            assertEquals(CSVFormat.EXCEL, dataFormat.getCsvFormat());
+            assertEquals(CSVFormat.EXCEL, dataFormat.getActiveFormat());
+        }
+    }
+
     @Test
     void shouldDisableCommentMarker() throws IOException {
         try (CsvDataFormat defDataFormat = new CsvDataFormat(); CsvDataFormat 
dataFormat = defDataFormat

Reply via email to