This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch bi in repository https://gitbox.apache.org/repos/asf/camel.git
commit 1f76cfc704d90162ff4b037007dfbe312947826d Author: Claus Ibsen <[email protected]> AuthorDate: Mon Oct 20 11:31:31 2025 +0200 CAMEL-22571: camel-core/camel-beanio - Add type converter for Charset --- .../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 d393ccfaec01..84ac3ebdac41 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 @@ -426,6 +426,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); @@ -631,6 +635,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); @@ -999,6 +1004,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()); + } + }
