Repository: camel Updated Branches: refs/heads/master b9c2a4bda -> f3b10c550
CAMEL-8037: Type converter for enum is now case insensitive Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c79aaa12 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c79aaa12 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c79aaa12 Branch: refs/heads/master Commit: c79aaa1263d003c8fba4d44875f0958dc0af15b3 Parents: b9c2a4b Author: Claus Ibsen <davscl...@apache.org> Authored: Wed Nov 12 08:20:46 2014 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Nov 12 08:20:46 2014 +0100 ---------------------------------------------------------------------- .../camel/impl/converter/EnumTypeConverter.java | 11 ++++++++++- .../apache/camel/converter/EnumConverterTest.java | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/c79aaa12/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java b/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java index 9ee39f4..a595d23 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java +++ b/camel-core/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java @@ -25,7 +25,6 @@ import org.apache.camel.util.ObjectHelper; /** * A type converter which is used to convert from String to enum type - * @version */ public class EnumTypeConverter extends TypeConverterSupport { @@ -33,6 +32,16 @@ public class EnumTypeConverter extends TypeConverterSupport { public <T> T convertTo(Class<T> type, Exchange exchange, Object value) { if (type.isEnum() && value != null) { String text = value.toString(); + Class<Enum> enumClass = (Class<Enum>) type; + + // we want to match case insensitive for enums + for (Enum enumValue : enumClass.getEnumConstants()) { + if (enumValue.name().equalsIgnoreCase(text)) { + return type.cast(enumValue); + } + } + + // fallback to the JDK valueOf which is case-sensitive and throws exception if not found Method method; try { method = type.getMethod("valueOf", String.class); http://git-wip-us.apache.org/repos/asf/camel/blob/c79aaa12/camel-core/src/test/java/org/apache/camel/converter/EnumConverterTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/converter/EnumConverterTest.java b/camel-core/src/test/java/org/apache/camel/converter/EnumConverterTest.java index f2eb30e..6678f1f 100644 --- a/camel-core/src/test/java/org/apache/camel/converter/EnumConverterTest.java +++ b/camel-core/src/test/java/org/apache/camel/converter/EnumConverterTest.java @@ -38,6 +38,21 @@ public class EnumConverterTest extends ContextTestSupport { assertEquals(LoggingLevel.WARN, level); } + public void testCaseInsensitive() throws Exception { + Exchange exchange = new DefaultExchange(context); + LoggingLevel level = context.getTypeConverter().mandatoryConvertTo(LoggingLevel.class, exchange, "Warn"); + assertEquals(LoggingLevel.WARN, level); + + level = context.getTypeConverter().mandatoryConvertTo(LoggingLevel.class, exchange, "warn"); + assertEquals(LoggingLevel.WARN, level); + + level = context.getTypeConverter().mandatoryConvertTo(LoggingLevel.class, exchange, "wARn"); + assertEquals(LoggingLevel.WARN, level); + + level = context.getTypeConverter().mandatoryConvertTo(LoggingLevel.class, exchange, "inFO"); + assertEquals(LoggingLevel.INFO, level); + } + public void testMandatoryConvertFailed() throws Exception { try { context.getTypeConverter().mandatoryConvertTo(LoggingLevel.class, "XXX");