You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by cm...@apache.org on 2011/03/25 09:04:21 UTC

svn commit: r1085277 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/builder/ExpressionBuilder.java main/java/org/apache/camel/language/bean/BeanExpression.java test/java/org/apache/camel/language/SimpleTest.java

Author: cmoulliard
Date: Fri Mar 25 08:04:21 2011
New Revision: 1085277

URL: http://svn.apache.org/viewvc?rev=1085277&view=rev
Log:
camel-3802: Improve code to support keys with dots in when using Simple language and OGNL

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java?rev=1085277&r1=1085276&r2=1085277&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java Fri Mar 25 08:04:21 2011
@@ -19,12 +19,7 @@ package org.apache.camel.builder;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.text.SimpleDateFormat;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-import java.util.Scanner;
+import java.util.*;
 import java.util.regex.Pattern;
 
 import org.apache.camel.Component;
@@ -181,8 +176,19 @@ public final class ExpressionBuilder {
                     return header;
                 }
 
-                // split into first name
-                List<String> methods = OgnlHelper.splitOgnl(ognl);
+                // Split ognl except
+                // when this is not a Map, Array
+                // and we would like to keep the dots
+                // within the key name
+                List<String> methods;
+
+                if (ognl.startsWith("[") && ognl.endsWith("]")) {
+                   methods = new ArrayList<String>();
+                   methods.add(ognl);
+                } else {
+                   methods = OgnlHelper.splitOgnl(ognl);
+                }
+
                 // remove any OGNL operators so we got the pure key name
                 String key = OgnlHelper.removeOperators(methods.get(0));
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java?rev=1085277&r1=1085276&r2=1085277&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java Fri Mar 25 08:04:21 2011
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.language.bean;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -180,7 +181,20 @@ public class BeanExpression implements E
 
             // loop and invoke each method
             Object beanToCall = bean;
-            List<String> methods = OgnlHelper.splitOgnl(ognl);
+
+            // Split ognl except
+            // when this is not a Map, Array
+            // and we would like to keep the dots
+            // within the key name
+            List<String> methods;
+
+            if (ognl.startsWith("[") && ognl.endsWith("]")) {
+               methods = new ArrayList<String>();
+               methods.add(ognl);
+            } else {
+               methods = OgnlHelper.splitOgnl(ognl);
+            }
+
             for (String methodName : methods) {
                 BeanHolder holder = new ConstantBeanHolder(beanToCall, exchange.getContext());
 

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java?rev=1085277&r1=1085276&r2=1085277&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java Fri Mar 25 08:04:21 2011
@@ -389,6 +389,14 @@ public class SimpleTest extends Language
         assertExpression("${header.unknown[cool]}", null);
     }
 
+    public void testOGNLHeaderMapWithDot() throws Exception {
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("this.code","This code");
+        exchange.getIn().setHeader("wicket", map);
+
+        assertExpression("${header.wicket[this.code]}","This code");
+    }
+
     public void testOGNLHeaderMapNotMap() throws Exception {
         try {
             assertExpression("${header.foo[bar]}", null);
@@ -417,6 +425,14 @@ public class SimpleTest extends Language
         assertExpression("${in.body[foo]}", "Camel");
         assertExpression("${in.body[bar]}", 6);
     }
+
+    public void testBodyOGNLAsMapWithDot() throws Exception {
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("foo.bar", "Camel");
+        exchange.getIn().setBody(map);
+
+        assertExpression("${in.body[foo.bar]}", "Camel");
+    }
     
     public void testBodyOGNLAsMapShorthand() throws Exception {
         Map<String, Object> map = new HashMap<String, Object>();