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");

Reply via email to