You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/06/25 10:48:19 UTC

[2/2] git commit: CAMEL-6481: Added support for array length field in simple language.

CAMEL-6481: Added support for array length field in simple language.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ddeae97f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ddeae97f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ddeae97f

Branch: refs/heads/camel-2.11.x
Commit: ddeae97f7facde525f752b356cf78148ebaee40c
Parents: 1b33dee
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jun 25 10:41:59 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jun 25 10:47:39 2013 +0200

----------------------------------------------------------------------
 .../org/apache/camel/component/bean/BeanInfo.java     | 14 ++++++++++++++
 .../main/java/org/apache/camel/util/ObjectHelper.java |  4 ++++
 .../org/apache/camel/language/simple/SimpleTest.java  | 10 ++++++++++
 3 files changed, 28 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ddeae97f/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java b/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
index a511943..59e9588 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
@@ -216,6 +216,20 @@ public class BeanInfo {
                 } catch (NoSuchMethodException e) {
                     throw new MethodNotFoundException(exchange, pojo, "getClass");
                 }
+            // special for length on an array type
+            } else if ("length".equals(name) && pojo.getClass().isArray()) {
+                try {
+                    // need to use arrayLength method from ObjectHelper as Camel's bean OGNL support is method invocation based
+                    // and not for accessing fields. And hence we need to create a MethodInfo instance with a method to call
+                    // and therefore use arrayLength from ObjectHelper to return the array length field.
+                    Method method = ObjectHelper.class.getMethod("arrayLength", Object[].class);
+                    ParameterInfo pi = new ParameterInfo(0, Object[].class, null, ExpressionBuilder.mandatoryBodyExpression(Object[].class, true));
+                    List<ParameterInfo> lpi = new ArrayList<ParameterInfo>(1);
+                    lpi.add(pi);
+                    methodInfo = new MethodInfo(exchange.getContext(), pojo.getClass(), method, lpi, lpi, false, false);
+                } catch (NoSuchMethodException e) {
+                    throw new MethodNotFoundException(exchange, pojo, "getClass");
+                }
             } else {
                 List<MethodInfo> methods = getOperations(name);
                 if (methods != null && methods.size() == 1) {

http://git-wip-us.apache.org/repos/asf/camel/blob/ddeae97f/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java b/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
index b55a2bd..cec7fab 100644
--- a/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
@@ -1120,6 +1120,10 @@ public final class ObjectHelper {
         return PRIMITIVE_ARRAY_TYPES.contains(clazz);
     }
 
+    public static int arrayLength(Object[] pojo) {
+        return pojo.length;
+    }
+
     /**
      * Converts primitive types such as int to its wrapper type like
      * {@link Integer}

http://git-wip-us.apache.org/repos/asf/camel/blob/ddeae97f/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
index 8cf75d9..0dcba7f8 100644
--- a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
+++ b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
@@ -1234,6 +1234,16 @@ public class SimpleTest extends LanguageTestSupport {
         assertExpression("${type:org.apache.camel.ExchangePattern.UNKNOWN}", null);
     }
 
+    public void testStringArrayLength() throws Exception {
+        exchange.getIn().setBody(new String[]{"foo", "bar"});
+        assertExpression("${body[0]}", "foo");
+        assertExpression("${body[1]}", "bar");
+        assertExpression("${body.length}", 2);
+
+        exchange.getIn().setBody(new String[]{"foo", "bar", "beer"});
+        assertExpression("${body.length}", 3);
+    }
+
     protected String getLanguageName() {
         return "simple";
     }