This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.8.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.8.x by this push:
new 66c17c80fae CAMEL-22068: camel-bindy - Fix the escaped double quotes
in CSV data (#18066)
66c17c80fae is described below
commit 66c17c80fae1c729dce09d92d3131022a45ae0e7
Author: Zheng Feng <[email protected]>
AuthorDate: Thu May 15 19:40:52 2025 +0800
CAMEL-22068: camel-bindy - Fix the escaped double quotes in CSV data
(#18066)
---
.../dataformat/bindy/csv/BindyCsvDataFormat.java | 19 +++++++++++++++++--
.../BindySimpleCsvFunctionWithExternalMethodTest.java | 7 ++++---
2 files changed, 21 insertions(+), 5 deletions(-)
diff --git
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
index 7da1d67e6ea..7c45d62eb52 100644
---
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
+++
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
@@ -331,8 +331,23 @@ public class BindyCsvDataFormat extends
BindyAbstractDataFormat {
// "not empty"+quote
if (s.endsWith(quote)) {
- cutEnd = true;
- canClose = true;
+ boolean escaped = false;
+ if (quote.equals("\"")) {
+ for (int i = s.length() - 2; i > 0; i--) {
+ char ch = s.charAt(i);
+ if (ch == '"' && canStart) {
+ escaped = !escaped;
+ } else if (ch == '\\') {
+ continue;
+ } else {
+ break;
+ }
+ }
+ }
+ if (!escaped) {
+ cutEnd = true;
+ canClose = true;
+ }
}
// optimize to only substring once
diff --git
a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvFunctionWithExternalMethodTest.java
b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvFunctionWithExternalMethodTest.java
index 16e8da47a0e..2e5b10a1439 100644
---
a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvFunctionWithExternalMethodTest.java
+++
b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvFunctionWithExternalMethodTest.java
@@ -54,11 +54,12 @@ public class BindySimpleCsvFunctionWithExternalMethodTest
extends CamelTestSuppo
mockEndPointMarshal1.expectedMessageCount(1);
mockEndPointMarshal1
- .expectedBodiesReceived("\"123\",\"\"\"foo\"\"\",\"10\"" +
ConverterUtils.getStringCarriageReturn("WINDOWS"));
+ .expectedBodiesReceived(
+ "\"123\",\"\"\"foo\"\",abc\",\"10\"" +
ConverterUtils.getStringCarriageReturn("WINDOWS"));
BindyCsvRowFormat7621 body = new BindyCsvRowFormat7621();
body.setFirstField("123");
- body.setSecondField("\"foo\"");
+ body.setSecondField("\"foo\",abc");
body.setNumber(new BigDecimal(10));
template.sendBody("direct:startMarshal1", body);
@@ -68,7 +69,7 @@ public class BindySimpleCsvFunctionWithExternalMethodTest
extends CamelTestSuppo
=
mockEndPointUnMarshal1.getReceivedExchanges().get(0).getIn().getBody(BindyCsvRowFormat7621.class);
assertEquals("123", model.getFirstField());
- assertEquals("\"bar\"", model.getSecondField());
+ assertEquals("\"bar\",abc", model.getSecondField());
assertEquals(new BigDecimal(10), model.getNumber());
}