Repository: camel Updated Branches: refs/heads/camel-2.15.x 2eaeaee25 -> b8ecc4abc refs/heads/master c6b570e9a -> 897c4167a
CAMEL-8512: Simple - Add exchange as function to access the exchange easily Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6d23c13c Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6d23c13c Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6d23c13c Branch: refs/heads/master Commit: 6d23c13c5d01d6d314c94a0d015a884507c52e16 Parents: c6b570e Author: Claus Ibsen <davscl...@apache.org> Authored: Thu Mar 19 08:01:41 2015 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu Mar 19 08:29:57 2015 +0100 ---------------------------------------------------------------------- .../apache/camel/builder/ExpressionBuilder.java | 21 +++++++++++++++++++- .../simple/ast/SimpleFunctionExpression.java | 12 +++++++++++ .../camel/language/simple/SimpleTest.java | 17 ++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/6d23c13c/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java index c22ad80..98b6087 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java @@ -877,7 +877,7 @@ public final class ExpressionBuilder { * Returns the expression for the exchanges camelContext invoking methods defined * in a simple OGNL notation * - * @param ognl methods to invoke on the body in a simple OGNL syntax + * @param ognl methods to invoke on the context in a simple OGNL syntax */ public static Expression camelContextOgnlExpression(final String ognl) { return new ExpressionAdapter() { @@ -897,6 +897,25 @@ public final class ExpressionBuilder { } /** + * Returns the expression for the exchange invoking methods defined + * in a simple OGNL notation + * + * @param ognl methods to invoke on the exchange in a simple OGNL syntax + */ + public static Expression exchangeOgnlExpression(final String ognl) { + return new ExpressionAdapter() { + public Object evaluate(Exchange exchange) { + return new MethodCallExpression(exchange, ognl).evaluate(exchange); + } + + @Override + public String toString() { + return "exchangeOgnl(" + ognl + ")"; + } + }; + } + + /** * Returns the expression for the exchanges inbound message body converted * to the given type */ http://git-wip-us.apache.org/repos/asf/camel/blob/6d23c13c/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java b/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java index d05356d..8d10ca7 100644 --- a/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java +++ b/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java @@ -128,6 +128,16 @@ public class SimpleFunctionExpression extends LiteralExpression { return ExpressionBuilder.systemEnvironmentExpression(remainder); } + // exchange OGNL + remainder = ifStartsWithReturnRemainder("exchange", function); + if (remainder != null) { + boolean invalid = OgnlHelper.isInvalidValidOgnlExpression(remainder); + if (invalid) { + throw new SimpleParserException("Valid syntax: ${exchange.OGNL} was: " + function, token.getIndex()); + } + return ExpressionBuilder.exchangeOgnlExpression(remainder); + } + // file: prefix remainder = ifStartsWithReturnRemainder("file:", function); if (remainder != null) { @@ -324,6 +334,8 @@ public class SimpleFunctionExpression extends LiteralExpression { return ExpressionBuilder.messageIdExpression(); } else if (ObjectHelper.equal(expression, "exchangeId")) { return ExpressionBuilder.exchangeIdExpression(); + } else if (ObjectHelper.equal(expression, "exchange")) { + return ExpressionBuilder.exchangeExpression(); } else if (ObjectHelper.equal(expression, "exception")) { return ExpressionBuilder.exchangeExceptionExpression(); } else if (ObjectHelper.equal(expression, "exception.message")) { http://git-wip-us.apache.org/repos/asf/camel/blob/6d23c13c/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 cce849d..351efec 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 @@ -125,6 +125,23 @@ public class SimpleTest extends LanguageTestSupport { } } + public void testExchangeExpression() throws Exception { + Expression exp = SimpleLanguage.simple("${exchange}"); + assertNotNull(exp); + assertEquals(exchange, exp.evaluate(exchange, Object.class)); + + assertExpression("exchange", exchange); + } + + public void testExchangeOgnlExpression() throws Exception { + Expression exp = SimpleLanguage.simple("${exchange.exchangeId}"); + assertNotNull(exp); + assertEquals(exchange.getExchangeId(), exp.evaluate(exchange, Object.class)); + + assertExpression("exchange.exchangeId", exchange.getExchangeId()); + assertExpression("exchange.class.name", "org.apache.camel.impl.DefaultExchange"); + } + public void testBodyExpression() throws Exception { Expression exp = SimpleLanguage.simple("${body}"); assertNotNull(exp);