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 f9346ac691e CAMEL-18104: camel-core - Add more type converters from byte[] to general object types, which helps Camel Kafka Connector and Kafka users. f9346ac691e is described below commit f9346ac691e1b58b4bb858deb0a2eb48986141f7 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu May 12 22:15:07 2022 +0200 CAMEL-18104: camel-core - Add more type converters from byte[] to general object types, which helps Camel Kafka Connector and Kafka users. --- .../converter/CamelBaseBulkConverterLoader.java | 92 +++++++++++++--- .../apache/camel/converter/ObjectConverter.java | 116 +++++++++++++++++---- .../camel/converter/ObjectConverterTest.java | 23 ++-- .../java/org/apache/camel/util/ObjectHelper.java | 6 ++ 4 files changed, 196 insertions(+), 41 deletions(-) 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 707a0deafa6..ed451969320 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 @@ -42,7 +42,7 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, @Override public int size() { - return 109; + return 120; } @Override @@ -96,6 +96,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (value instanceof java.lang.String) { return org.apache.camel.converter.ObjectConverter.toCharArray((java.lang.String) value); } + if (value instanceof byte[]) { + return org.apache.camel.converter.ObjectConverter.toCharArray((byte[]) value, exchange); + } } else if (to == java.lang.Object[].class) { if (value instanceof java.util.Collection) { return org.apache.camel.converter.CollectionConverter.toArray((java.util.Collection) value); @@ -108,6 +111,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (value instanceof java.lang.String) { return org.apache.camel.converter.ObjectConverter.toChar((java.lang.String) value); } + if (value instanceof byte[]) { + return org.apache.camel.converter.ObjectConverter.toChar((byte[]) value); + } } else if (to == java.io.BufferedReader.class) { if (value instanceof java.io.File) { return org.apache.camel.converter.IOConverter.toReader((java.io.File) value, exchange); @@ -190,6 +196,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (value instanceof java.lang.String) { return org.apache.camel.converter.ObjectConverter.toBoolean((java.lang.String) value); } + if (value instanceof byte[]) { + return org.apache.camel.converter.ObjectConverter.toBoolean((byte[]) value, exchange); + } } else if (to == java.lang.Byte.class) { if (value instanceof java.lang.Number) { Object obj = org.apache.camel.converter.ObjectConverter.toByte((java.lang.Number) value); @@ -202,10 +211,16 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (value instanceof java.lang.String) { return org.apache.camel.converter.ObjectConverter.toByte((java.lang.String) value); } + if (value instanceof byte[]) { + return org.apache.camel.converter.ObjectConverter.toByte((byte[]) value, exchange); + } } else if (to == java.lang.Character.class || to == char.class) { if (value instanceof java.lang.String) { return org.apache.camel.converter.ObjectConverter.toCharacter((java.lang.String) value); } + if (value instanceof byte[]) { + return org.apache.camel.converter.ObjectConverter.toCharacter((byte[]) value); + } } else if (to == java.lang.Class.class) { if (value instanceof java.lang.String) { return org.apache.camel.converter.ObjectConverter.toClass((java.lang.String) value, camelContext); @@ -217,6 +232,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (value instanceof java.lang.String) { return org.apache.camel.converter.ObjectConverter.toDouble((java.lang.String) value); } + if (value instanceof byte[]) { + return org.apache.camel.converter.ObjectConverter.toDouble((byte[]) value, exchange); + } } else if (to == java.lang.Float.class || to == float.class) { if (value instanceof java.lang.Number) { return org.apache.camel.converter.ObjectConverter.toFloat((java.lang.Number) value); @@ -224,6 +242,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (value instanceof java.lang.String) { return org.apache.camel.converter.ObjectConverter.toFloat((java.lang.String) value); } + if (value instanceof byte[]) { + return org.apache.camel.converter.ObjectConverter.toFloat((byte[]) value, exchange); + } } else if (to == java.lang.Integer.class || to == int.class) { if (value instanceof java.lang.Number) { Object obj = org.apache.camel.converter.ObjectConverter.toInteger((java.lang.Number) value); @@ -236,6 +257,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (value instanceof java.lang.String) { return org.apache.camel.converter.ObjectConverter.toInteger((java.lang.String) value); } + if (value instanceof byte[]) { + return org.apache.camel.converter.ObjectConverter.toInteger((byte[]) value, exchange); + } } else if (to == java.lang.Iterable.class) { if (value instanceof java.lang.Object) { return org.apache.camel.converter.ObjectConverter.iterable(value); @@ -261,10 +285,16 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (value instanceof java.lang.String) { return org.apache.camel.converter.ObjectConverter.toLong((java.lang.String) value); } + if (value instanceof byte[]) { + return org.apache.camel.converter.ObjectConverter.toLong((byte[]) value, exchange); + } } else if (to == java.lang.Number.class) { if (value instanceof java.lang.String) { return org.apache.camel.converter.ObjectConverter.toNumber((java.lang.String) value); } + if (value instanceof byte[]) { + return org.apache.camel.converter.ObjectConverter.toNumber((byte[]) value, exchange); + } } else if (to == java.lang.Short.class) { if (value instanceof java.lang.Number) { Object obj = org.apache.camel.converter.ObjectConverter.toShort((java.lang.Number) value); @@ -277,6 +307,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (value instanceof java.lang.String) { return org.apache.camel.converter.ObjectConverter.toShort((java.lang.String) value); } + if (value instanceof byte[]) { + return org.apache.camel.converter.ObjectConverter.toShort((byte[]) value, exchange); + } } else if (to == java.lang.String.class) { if (value instanceof java.net.URI) { return org.apache.camel.converter.UriTypeConverter.toString((java.net.URI) value); @@ -308,15 +341,18 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (value instanceof java.io.Reader) { return org.apache.camel.converter.IOConverter.toString((java.io.Reader) value); } + if (value instanceof java.io.InputStream) { + return org.apache.camel.converter.IOConverter.toString((java.io.InputStream) value, exchange); + } + if (value instanceof java.io.ByteArrayOutputStream) { + return org.apache.camel.converter.IOConverter.toString((java.io.ByteArrayOutputStream) value, exchange); + } if (value instanceof java.lang.Integer) { return org.apache.camel.converter.ObjectConverter.toString((java.lang.Integer) value); } if (value instanceof java.lang.Long) { return org.apache.camel.converter.ObjectConverter.toString((java.lang.Long) value); } - if (value instanceof java.io.InputStream) { - return org.apache.camel.converter.IOConverter.toString((java.io.InputStream) value, exchange); - } if (value instanceof java.lang.Boolean) { return org.apache.camel.converter.ObjectConverter.toString((java.lang.Boolean) value); } @@ -326,9 +362,6 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (value instanceof java.lang.StringBuilder) { return org.apache.camel.converter.ObjectConverter.toString((java.lang.StringBuilder) value); } - if (value instanceof java.io.ByteArrayOutputStream) { - return org.apache.camel.converter.IOConverter.toString((java.io.ByteArrayOutputStream) value, exchange); - } } else if (to == java.math.BigInteger.class) { if (value instanceof java.lang.Object) { Object obj = org.apache.camel.converter.ObjectConverter.toBigInteger(value); @@ -496,6 +529,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (from == java.lang.String.class) { return this; } + if (from == byte[].class) { + return this; + } } else if (to == java.lang.Object[].class) { if (from == java.util.Collection.class) { return this; @@ -508,6 +544,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (from == java.lang.String.class) { return this; } + if (from == byte[].class) { + return this; + } } else if (to == java.io.BufferedReader.class) { if (from == java.io.File.class) { return this; @@ -590,6 +629,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (from == java.lang.String.class) { return this; } + if (from == byte[].class) { + return this; + } } else if (to == java.lang.Byte.class) { if (from == java.lang.Number.class) { return this; @@ -597,10 +639,16 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (from == java.lang.String.class) { return this; } + if (from == byte[].class) { + return this; + } } else if (to == java.lang.Character.class || to == char.class) { if (from == java.lang.String.class) { return this; } + if (from == byte[].class) { + return this; + } } else if (to == java.lang.Class.class) { if (from == java.lang.String.class) { return this; @@ -612,6 +660,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (from == java.lang.String.class) { return this; } + if (from == byte[].class) { + return this; + } } else if (to == java.lang.Float.class || to == float.class) { if (from == java.lang.Number.class) { return this; @@ -619,6 +670,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (from == java.lang.String.class) { return this; } + if (from == byte[].class) { + return this; + } } else if (to == java.lang.Integer.class || to == int.class) { if (from == java.lang.Number.class) { return this; @@ -626,6 +680,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (from == java.lang.String.class) { return this; } + if (from == byte[].class) { + return this; + } } else if (to == java.lang.Iterable.class) { if (from == java.lang.Object.class) { return this; @@ -646,10 +703,16 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (from == java.lang.String.class) { return this; } + if (from == byte[].class) { + return this; + } } else if (to == java.lang.Number.class) { if (from == java.lang.String.class) { return this; } + if (from == byte[].class) { + return this; + } } else if (to == java.lang.Short.class) { if (from == java.lang.Number.class) { return this; @@ -657,6 +720,9 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (from == java.lang.String.class) { return this; } + if (from == byte[].class) { + return this; + } } else if (to == java.lang.String.class) { if (from == java.net.URI.class) { return this; @@ -688,13 +754,16 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (from == java.io.Reader.class) { return this; } - if (from == java.lang.Integer.class) { + if (from == java.io.InputStream.class) { return this; } - if (from == java.lang.Long.class) { + if (from == java.io.ByteArrayOutputStream.class) { return this; } - if (from == java.io.InputStream.class) { + if (from == java.lang.Integer.class) { + return this; + } + if (from == java.lang.Long.class) { return this; } if (from == java.lang.Boolean.class) { @@ -706,9 +775,6 @@ public final class CamelBaseBulkConverterLoader implements TypeConverterLoader, if (from == java.lang.StringBuilder.class) { return this; } - if (from == java.io.ByteArrayOutputStream.class) { - return this; - } } else if (to == java.math.BigInteger.class) { if (from == java.lang.Object.class) { return this; diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/ObjectConverter.java b/core/camel-base/src/main/java/org/apache/camel/converter/ObjectConverter.java index 8b6873b40fc..2d75065897b 100644 --- a/core/camel-base/src/main/java/org/apache/camel/converter/ObjectConverter.java +++ b/core/camel-base/src/main/java/org/apache/camel/converter/ObjectConverter.java @@ -16,11 +16,14 @@ */ package org.apache.camel.converter; +import java.io.IOException; import java.math.BigInteger; import java.util.Iterator; import org.apache.camel.CamelContext; import org.apache.camel.Converter; +import org.apache.camel.Exchange; +import org.apache.camel.support.ExchangeHelper; import org.apache.camel.support.ObjectHelper; /** @@ -90,16 +93,33 @@ public final class ObjectConverter { } @Converter(order = 7) + public static Byte toByte(byte[] value, Exchange exchange) throws IOException { + String str = new String(value, ExchangeHelper.getCharsetName(exchange)); + return Byte.valueOf(str); + } + + @Converter(order = 8) public static char[] toCharArray(String value) { return value.toCharArray(); } - @Converter(order = 8) + @Converter(order = 9) + public static char[] toCharArray(byte[] value, Exchange exchange) throws IOException { + String str = new String(value, ExchangeHelper.getCharsetName(exchange)); + return str.toCharArray(); + } + + @Converter(order = 10) public static Character toCharacter(String value) { return toChar(value); } - @Converter(order = 9) + @Converter(order = 11) + public static Character toCharacter(byte[] value) { + return toChar(value); + } + + @Converter(order = 12) public static char toChar(String value) { // must be string with the length of 1 if (value.length() != 1) { @@ -108,7 +128,17 @@ public final class ObjectConverter { return value.charAt(0); } - @Converter(order = 10) + @Converter(order = 13) + public static char toChar(byte[] value) { + // must be string with the length of 1 + if (value.length != 1) { + throw new IllegalArgumentException("byte[] must have exactly a length of 1: " + value.length); + } + byte b = value[0]; + return (char) b; + } + + @Converter(order = 14) public static String fromCharArray(char[] value) { return new String(value); } @@ -116,7 +146,7 @@ public final class ObjectConverter { /** * Returns the converted value, or null if the value is null */ - @Converter(order = 11) + @Converter(order = 15) public static Class<?> toClass(String value, CamelContext camelContext) { // prefer to use class resolver API if (camelContext != null) { @@ -129,7 +159,7 @@ public final class ObjectConverter { /** * Returns the converted value, or null if the value is null */ - @Converter(order = 12, allowNull = true) + @Converter(order = 16, allowNull = true) public static Short toShort(Number value) { if (org.apache.camel.util.ObjectHelper.isNaN(value)) { return null; @@ -137,15 +167,21 @@ public final class ObjectConverter { return value.shortValue(); } - @Converter(order = 13) + @Converter(order = 17) public static Short toShort(String value) { return Short.valueOf(value); } + @Converter(order = 18) + public static Short toShort(byte[] value, Exchange exchange) throws IOException { + String str = new String(value, ExchangeHelper.getCharsetName(exchange)); + return Short.valueOf(str); + } + /** * Returns the converted value, or null if the value is null */ - @Converter(order = 14, allowNull = true) + @Converter(order = 19, allowNull = true) public static Integer toInteger(Number value) { if (org.apache.camel.util.ObjectHelper.isNaN(value)) { return null; @@ -153,15 +189,21 @@ public final class ObjectConverter { return value.intValue(); } - @Converter(order = 15) + @Converter(order = 20) public static Integer toInteger(String value) { return Integer.valueOf(value); } + @Converter(order = 21) + public static Integer toInteger(byte[] value, Exchange exchange) throws IOException { + String str = new String(value, ExchangeHelper.getCharsetName(exchange)); + return Integer.valueOf(str); + } + /** * Returns the converted value, or null if the value is null */ - @Converter(order = 16, allowNull = true) + @Converter(order = 22, allowNull = true) public static Long toLong(Number value) { if (org.apache.camel.util.ObjectHelper.isNaN(value)) { return null; @@ -169,15 +211,21 @@ public final class ObjectConverter { return value.longValue(); } - @Converter(order = 17) + @Converter(order = 23) public static Long toLong(String value) { return Long.valueOf(value); } + @Converter(order = 24) + public static Long toLong(byte[] value, Exchange exchange) throws IOException { + String str = new String(value, ExchangeHelper.getCharsetName(exchange)); + return Long.valueOf(str); + } + /** * Returns the converted value, or null if the value is null */ - @Converter(order = 18, allowNull = true) + @Converter(order = 25, allowNull = true) public static BigInteger toBigInteger(Object value) { if (org.apache.camel.util.ObjectHelper.isNaN(value)) { return null; @@ -201,7 +249,7 @@ public final class ObjectConverter { /** * Returns the converted value, or null if the value is null */ - @Converter(order = 19) + @Converter(order = 26) public static Float toFloat(Number value) { if (org.apache.camel.util.ObjectHelper.isNaN(value)) { return Float.NaN; @@ -209,15 +257,21 @@ public final class ObjectConverter { return value.floatValue(); } - @Converter(order = 20) + @Converter(order = 27) public static Float toFloat(String value) { return Float.valueOf(value); } + @Converter(order = 28) + public static Float toFloat(byte[] value, Exchange exchange) throws IOException { + String str = new String(value, ExchangeHelper.getCharsetName(exchange)); + return Float.valueOf(str); + } + /** * Returns the converted value, or null if the value is null */ - @Converter(order = 21) + @Converter(order = 29) public static Double toDouble(Number value) { if (org.apache.camel.util.ObjectHelper.isNaN(value)) { return Double.NaN; @@ -225,44 +279,56 @@ public final class ObjectConverter { return value.doubleValue(); } - @Converter(order = 22) + @Converter(order = 30) public static Double toDouble(String value) { return Double.valueOf(value); } + @Converter(order = 31) + public static Double toDouble(byte[] value, Exchange exchange) throws IOException { + String str = new String(value, ExchangeHelper.getCharsetName(exchange)); + return Double.valueOf(str); + } + // add fast type converters from most common used - @Converter(order = 23) + @Converter(order = 32) public static String toString(Integer value) { return value.toString(); } - @Converter(order = 24) + @Converter(order = 33) public static String toString(Long value) { return value.toString(); } - @Converter(order = 25) + @Converter(order = 34) public static String toString(Boolean value) { return value.toString(); } - @Converter(order = 26) + @Converter(order = 35) public static String toString(StringBuffer value) { return value.toString(); } - @Converter(order = 27) + @Converter(order = 36) public static String toString(StringBuilder value) { return value.toString(); } - @Converter(order = 28) + @Converter(order = 37) public static Boolean toBoolean(String value) { return org.apache.camel.util.ObjectHelper.toBoolean(value); } - @Converter(order = 29) + @Converter(order = 38) + public static Boolean toBoolean(byte[] value, Exchange exchange) throws IOException { + String str = new String(value, ExchangeHelper.getCharsetName(exchange)); + return toBoolean(str); + } + + @Converter(order = 39) public static Number toNumber(String text) { // what kind of numeric is it boolean dot = text.indexOf('.') != -1; @@ -279,4 +345,10 @@ public final class ObjectConverter { } } + @Converter(order = 40) + public static Number toNumber(byte[] value, Exchange exchange) throws IOException { + String str = new String(value, ExchangeHelper.getCharsetName(exchange)); + return toNumber(str); + } + } diff --git a/core/camel-core/src/test/java/org/apache/camel/converter/ObjectConverterTest.java b/core/camel-core/src/test/java/org/apache/camel/converter/ObjectConverterTest.java index fb966026257..02e49152638 100644 --- a/core/camel-core/src/test/java/org/apache/camel/converter/ObjectConverterTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/converter/ObjectConverterTest.java @@ -17,6 +17,7 @@ package org.apache.camel.converter; import java.math.BigInteger; +import java.nio.charset.StandardCharsets; import java.util.Date; import java.util.Iterator; import java.util.stream.Stream; @@ -59,10 +60,11 @@ public class ObjectConverterTest { } @Test - public void testToByte() { + public void testToByte() throws Exception { assertEquals(Byte.valueOf("4"), ObjectConverter.toByte(Byte.valueOf("4"))); assertEquals(Byte.valueOf("4"), ObjectConverter.toByte(Integer.valueOf("4"))); assertEquals(Byte.valueOf("4"), ObjectConverter.toByte("4")); + assertEquals(Byte.valueOf("4"), ObjectConverter.toByte("4".getBytes(StandardCharsets.UTF_8), null)); } @Test @@ -72,50 +74,55 @@ public class ObjectConverterTest { } @Test - public void testToShort() { + public void testToShort() throws Exception { assertEquals(Short.valueOf("4"), ObjectConverter.toShort(Short.valueOf("4"))); assertEquals(Short.valueOf("4"), ObjectConverter.toShort(Integer.valueOf("4"))); assertEquals(Short.valueOf("4"), ObjectConverter.toShort("4")); + assertEquals(Short.valueOf("4"), ObjectConverter.toShort("4".getBytes(StandardCharsets.UTF_8), null)); assertEquals(null, ObjectConverter.toShort(Double.NaN)); assertEquals(null, ObjectConverter.toShort(Float.NaN)); assertEquals(Short.valueOf("4"), ObjectConverter.toShort(Short.valueOf("4"))); } @Test - public void testToInteger() { + public void testToInteger() throws Exception { assertEquals(Integer.valueOf("4"), ObjectConverter.toInteger(Integer.valueOf("4"))); assertEquals(Integer.valueOf("4"), ObjectConverter.toInteger(Long.valueOf("4"))); assertEquals(Integer.valueOf("4"), ObjectConverter.toInteger("4")); + assertEquals(Integer.valueOf("4"), ObjectConverter.toInteger("4".getBytes(StandardCharsets.UTF_8), null)); assertEquals(null, ObjectConverter.toInteger(Double.NaN)); assertEquals(null, ObjectConverter.toInteger(Float.NaN)); assertEquals(Integer.valueOf("4"), ObjectConverter.toInteger(Integer.valueOf("4"))); } @Test - public void testToLong() { + public void testToLong() throws Exception { assertEquals(Long.valueOf("4"), ObjectConverter.toLong(Long.valueOf("4"))); assertEquals(Long.valueOf("4"), ObjectConverter.toLong(Integer.valueOf("4"))); assertEquals(Long.valueOf("4"), ObjectConverter.toLong("4")); + assertEquals(Long.valueOf("4"), ObjectConverter.toLong("4".getBytes(StandardCharsets.UTF_8), null)); assertEquals(null, ObjectConverter.toLong(Double.NaN)); assertEquals(null, ObjectConverter.toLong(Float.NaN)); assertEquals(Long.valueOf("4"), ObjectConverter.toLong(Long.valueOf("4"))); } @Test - public void testToFloat() { + public void testToFloat() throws Exception { assertEquals(Float.valueOf("4"), ObjectConverter.toFloat(Float.valueOf("4"))); assertEquals(Float.valueOf("4"), ObjectConverter.toFloat(Integer.valueOf("4"))); assertEquals(Float.valueOf("4"), ObjectConverter.toFloat("4")); + assertEquals(Float.valueOf("4"), ObjectConverter.toFloat("4".getBytes(StandardCharsets.UTF_8), null)); assertEquals((Float) Float.NaN, ObjectConverter.toFloat(Double.NaN)); assertEquals((Float) Float.NaN, ObjectConverter.toFloat(Float.NaN)); assertEquals(Float.valueOf("4"), ObjectConverter.toFloat(Float.valueOf("4"))); } @Test - public void testToDouble() { + public void testToDouble() throws Exception { assertEquals(Double.valueOf("4"), ObjectConverter.toDouble(Double.valueOf("4"))); assertEquals(Double.valueOf("4"), ObjectConverter.toDouble(Integer.valueOf("4"))); assertEquals(Double.valueOf("4"), ObjectConverter.toDouble("4")); + assertEquals(Double.valueOf("4"), ObjectConverter.toDouble("4".getBytes(StandardCharsets.UTF_8), null)); assertEquals((Double) Double.NaN, ObjectConverter.toDouble(Double.NaN)); assertEquals((Double) Double.NaN, ObjectConverter.toDouble(Float.NaN)); assertEquals(Double.valueOf("4"), ObjectConverter.toDouble(Double.valueOf("4"))); @@ -145,7 +152,9 @@ public class ObjectConverterTest { @Test public void testToChar() { assertEquals('A', ObjectConverter.toChar("A")); + assertEquals('A', ObjectConverter.toChar("A".getBytes(StandardCharsets.UTF_8))); assertEquals(Character.valueOf('A'), ObjectConverter.toCharacter("A")); + assertEquals(Character.valueOf('A'), ObjectConverter.toCharacter("A".getBytes(StandardCharsets.UTF_8))); } @Test @@ -159,6 +168,7 @@ public class ObjectConverterTest { @Test public void testToBoolean() throws Exception { assertTrue(ObjectConverter.toBoolean("true")); + assertTrue(ObjectConverter.toBoolean("true".getBytes(StandardCharsets.UTF_8))); assertTrue(ObjectConverter.toBoolean("TRUE")); assertFalse(ObjectConverter.toBoolean("false")); assertFalse(ObjectConverter.toBoolean("FALSE")); @@ -167,6 +177,7 @@ public class ObjectConverterTest { assertNull(ObjectConverter.toBoolean("yes")); assertTrue(ObjectConverter.toBool("true")); + assertTrue(ObjectConverter.toBool("true".getBytes(StandardCharsets.UTF_8))); assertTrue(ObjectConverter.toBool("TRUE")); assertFalse(ObjectConverter.toBool("false")); assertFalse(ObjectConverter.toBool("FALSE")); diff --git a/core/camel-util/src/main/java/org/apache/camel/util/ObjectHelper.java b/core/camel-util/src/main/java/org/apache/camel/util/ObjectHelper.java index 5c94b9271d1..173b44ab0ed 100644 --- a/core/camel-util/src/main/java/org/apache/camel/util/ObjectHelper.java +++ b/core/camel-util/src/main/java/org/apache/camel/util/ObjectHelper.java @@ -123,6 +123,12 @@ public final class ObjectHelper { if (value instanceof Boolean) { return (Boolean) value; } + if (value instanceof byte[]) { + String str = new String((byte[]) value); + if ("true".equalsIgnoreCase(str) || "false".equalsIgnoreCase(str)) { + return Boolean.valueOf(str); + } + } if (value instanceof String) { // we only want to accept true or false as accepted values String str = (String) value;