This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.10.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.10.x by this push:
new 7a48a6be621c CAMEL-22571: camel-core/camel-beanio - Add type converter
for Charset (#19622)
7a48a6be621c is described below
commit 7a48a6be621ce6faa3510b724f71a29a5d303264
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Oct 20 12:04:26 2025 +0200
CAMEL-22571: camel-core/camel-beanio - Add type converter for Charset
(#19622)
---
.../beanio/BeanIODataFormatComplexTest.java | 19 +++++++++++++++++++
.../camel/converter/CamelBaseBulkConverterLoader.java | 11 ++++++++++-
.../java/org/apache/camel/converter/IOConverter.java | 5 +++++
.../org/apache/camel/converter/IOConverterTest.java | 8 ++++++++
4 files changed, 42 insertions(+), 1 deletion(-)
diff --git
a/components/camel-beanio/src/test/java/org/apache/camel/dataformat/beanio/BeanIODataFormatComplexTest.java
b/components/camel-beanio/src/test/java/org/apache/camel/dataformat/beanio/BeanIODataFormatComplexTest.java
index 20956eb17578..11e1585b6a46 100644
---
a/components/camel-beanio/src/test/java/org/apache/camel/dataformat/beanio/BeanIODataFormatComplexTest.java
+++
b/components/camel-beanio/src/test/java/org/apache/camel/dataformat/beanio/BeanIODataFormatComplexTest.java
@@ -175,6 +175,17 @@ public class BeanIODataFormatComplexTest extends
CamelTestSupport {
assertIsInstanceOf(UnidentifiedRecordException.class, ex);
}
+ @Test
+ void testUnmarshalEncoding() throws Exception {
+ context.setTracing(true);
+ MockEndpoint mock = getMockEndpoint("mock:beanio-unmarshal");
+ mock.expectedBodiesReceived(createTestData(false));
+
+ template.sendBody("direct:unmarshalEncoding", data);
+
+ mock.assertIsSatisfied();
+ }
+
private List<Object> createTestData(boolean skipB1header) throws
ParseException {
String source = "camel-beanio";
List<Object> body = new ArrayList<>();
@@ -233,6 +244,14 @@ public class BeanIODataFormatComplexTest extends
CamelTestSupport {
.to("mock:beanio-unmarshal");
from("direct:marshal").marshal(format).to("mock:beanio-marshal");
+
+ var df = dataFormat().beanio()
+
.mapping("org/apache/camel/dataformat/beanio/mappings.xml")
+ .streamName("securityData")
+ .encoding("UTF-8")
+ .end();
+ from("direct:unmarshalEncoding")
+
.unmarshal(df).split(simple("${body}")).to("mock:beanio-unmarshal");
}
};
}
diff --git
a/core/camel-base/src/generated/java/org/apache/camel/converter/CamelBaseBulkConverterLoader.java
b/core/camel-base/src/generated/java/org/apache/camel/converter/CamelBaseBulkConverterLoader.java
index 23466f74d324..ce40fcf155ed 100644
---
a/core/camel-base/src/generated/java/org/apache/camel/converter/CamelBaseBulkConverterLoader.java
+++
b/core/camel-base/src/generated/java/org/apache/camel/converter/CamelBaseBulkConverterLoader.java
@@ -41,7 +41,7 @@ public final class CamelBaseBulkConverterLoader implements
TypeConverterLoader,
@Override
public int size() {
- return 130;
+ return 131;
}
@Override
@@ -430,6 +430,10 @@ public final class CamelBaseBulkConverterLoader implements
TypeConverterLoader,
if (value instanceof java.io.InputStream) {
return
org.apache.camel.converter.IOConverter.covertToByteBuffer((java.io.InputStream)
value);
}
+ } else if (to == java.nio.charset.Charset.class) {
+ if (value instanceof java.lang.String) {
+ return
org.apache.camel.converter.IOConverter.toCharset((java.lang.String) value);
+ }
} else if (to == java.nio.file.Path.class) {
if (value instanceof java.io.File) {
return
org.apache.camel.converter.IOConverter.toPath((java.io.File) value);
@@ -635,6 +639,7 @@ public final class CamelBaseBulkConverterLoader implements
TypeConverterLoader,
registry.addConverter(new TypeConvertible<>(java.lang.Float.class,
java.nio.ByteBuffer.class), this);
registry.addConverter(new TypeConvertible<>(java.lang.Double.class,
java.nio.ByteBuffer.class), this);
registry.addConverter(new TypeConvertible<>(java.io.InputStream.class,
java.nio.ByteBuffer.class), this);
+ registry.addConverter(new TypeConvertible<>(java.lang.String.class,
java.nio.charset.Charset.class), this);
registry.addConverter(new TypeConvertible<>(java.io.File.class,
java.nio.file.Path.class), this);
registry.addConverter(new TypeConvertible<>(java.lang.Long.class,
java.sql.Timestamp.class), this);
registry.addConverter(new TypeConvertible<>(java.lang.Long.class,
java.time.Duration.class), this);
@@ -1003,6 +1008,10 @@ public final class CamelBaseBulkConverterLoader
implements TypeConverterLoader,
if (from == java.io.InputStream.class) {
return this;
}
+ } else if (to == java.nio.charset.Charset.class) {
+ if (from == java.lang.String.class) {
+ return this;
+ }
} else if (to == java.nio.file.Path.class) {
if (from == java.io.File.class) {
return this;
diff --git
a/core/camel-base/src/main/java/org/apache/camel/converter/IOConverter.java
b/core/camel-base/src/main/java/org/apache/camel/converter/IOConverter.java
index a1e9b66edcba..2ed01407f492 100644
--- a/core/camel-base/src/main/java/org/apache/camel/converter/IOConverter.java
+++ b/core/camel-base/src/main/java/org/apache/camel/converter/IOConverter.java
@@ -356,4 +356,9 @@ public final class IOConverter {
return path.toFile();
}
+ @Converter(order = 45)
+ public static Charset toCharset(String name) {
+ return Charset.forName(name);
+ }
+
}
diff --git
a/core/camel-core/src/test/java/org/apache/camel/converter/IOConverterTest.java
b/core/camel-core/src/test/java/org/apache/camel/converter/IOConverterTest.java
index 5081f151cf3d..41ac8a9ce52e 100644
---
a/core/camel-core/src/test/java/org/apache/camel/converter/IOConverterTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/converter/IOConverterTest.java
@@ -29,6 +29,7 @@ import java.io.Reader;
import java.io.StringReader;
import java.io.Writer;
import java.net.URL;
+import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -279,4 +280,11 @@ public class IOConverterTest extends ContextTestSupport {
assertEquals("log4j2.properties", p.getFileName().toString());
}
+ @Test
+ public void testToCharset() {
+ Charset c = IOConverter.toCharset("UTF-8");
+ assertNotNull(c);
+ assertEquals("UTF-8", c.name());
+ }
+
}