Updated Branches: refs/heads/camel-2.11.x 1b33dee5c -> ddeae97f7 refs/heads/master d16f6d646 -> e1cb42118
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/e1cb4211 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e1cb4211 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e1cb4211 Branch: refs/heads/master Commit: e1cb42118907772fae29fb72d74efb198c2c9c3c Parents: d16f6d6 Author: Claus Ibsen <davscl...@apache.org> Authored: Tue Jun 25 10:41:59 2013 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Tue Jun 25 10:41:59 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/e1cb4211/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 dc9eb04..9ea84cc 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 @@ -217,6 +217,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/e1cb4211/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/e1cb4211/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"; }