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 2020/10/02 10:35:06 UTC

[camel] 01/04: CAMEL-15606: camel-core - Simple with bean function should resolve language once

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 502f579f2f67a7aa84e9500183a0146071045cfa
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Oct 2 11:21:26 2020 +0200

    CAMEL-15606: camel-core - Simple with bean function should resolve language once
---
 .../camel/impl/engine/AbstractCamelContext.java    |  1 +
 .../camel/language/simple/BaseSimpleParser.java    |  5 +-
 .../language/simple/SimpleExpressionParser.java    |  7 ++-
 .../camel/language/simple/SimpleLanguage.java      |  4 +-
 .../language/simple/SimplePredicateParser.java     |  7 ++-
 .../language/simple/ast/BinaryExpression.java      | 65 +++++++++++-----------
 .../language/simple/ast/BooleanExpression.java     |  5 +-
 .../camel/language/simple/ast/CompositeNodes.java  |  7 ++-
 .../camel/language/simple/ast/DoubleQuoteEnd.java  |  3 +-
 .../language/simple/ast/DoubleQuoteStart.java      |  5 +-
 .../language/simple/ast/LiteralExpression.java     |  3 +-
 .../language/simple/ast/LogicalExpression.java     |  7 ++-
 .../camel/language/simple/ast/NullExpression.java  | 27 +++++----
 .../language/simple/ast/NumericExpression.java     |  3 +-
 .../language/simple/ast/SimpleFunctionEnd.java     |  3 +-
 .../simple/ast/SimpleFunctionExpression.java       | 21 +++----
 .../language/simple/ast/SimpleFunctionStart.java   | 17 +++---
 .../camel/language/simple/ast/SimpleNode.java      |  8 ++-
 .../camel/language/simple/ast/SingleQuoteEnd.java  |  3 +-
 .../language/simple/ast/SingleQuoteStart.java      |  5 +-
 .../camel/language/simple/ast/UnaryExpression.java | 21 +++----
 .../simple/SimpleBackwardsCompatibleTest.java      |  4 +-
 .../simple/SimpleParserExpressionInvalidTest.java  | 10 ++--
 .../simple/SimpleParserExpressionTest.java         | 44 +++++++--------
 .../simple/SimpleParserPredicateInvalidTest.java   | 14 ++---
 .../language/simple/SimpleParserPredicateTest.java | 50 ++++++++---------
 .../simple/SimpleParserRegexpPredicateTest.java    |  2 +-
 27 files changed, 188 insertions(+), 163 deletions(-)

diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 93c92b5..8e4e940 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -1638,6 +1638,7 @@ public abstract class AbstractCamelContext extends BaseService
     @Override
     public Language resolveLanguage(String language) {
         LOG.debug("Resolving language: {}", language);
+        System.out.println("Resolving language: " + language);
 
         Language answer;
         synchronized (languages) {
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/BaseSimpleParser.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/BaseSimpleParser.java
index f57aeb6..5214eda 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/BaseSimpleParser.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/BaseSimpleParser.java
@@ -22,6 +22,7 @@ import java.util.Collections;
 import java.util.Deque;
 import java.util.List;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.language.simple.ast.Block;
 import org.apache.camel.language.simple.ast.BlockEnd;
 import org.apache.camel.language.simple.ast.BlockStart;
@@ -40,6 +41,7 @@ import org.apache.camel.language.simple.types.TokenType;
  */
 public abstract class BaseSimpleParser {
 
+    protected CamelContext camelContext;
     protected final String expression;
     protected final List<SimpleToken> tokens = new ArrayList<>();
     protected final List<SimpleNode> nodes = new ArrayList<>();
@@ -48,7 +50,8 @@ public abstract class BaseSimpleParser {
     protected int index;
     protected boolean allowEscape;
 
-    protected BaseSimpleParser(String expression, boolean allowEscape) {
+    protected BaseSimpleParser(CamelContext camelContext, String expression, boolean allowEscape) {
+        this.camelContext = camelContext;
         this.expression = expression;
         this.allowEscape = allowEscape;
     }
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java
index 7b50084..6b88e1b 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java
@@ -21,6 +21,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.ast.LiteralExpression;
 import org.apache.camel.language.simple.ast.LiteralNode;
@@ -42,9 +43,9 @@ public class SimpleExpressionParser extends BaseSimpleParser {
     // use caches to avoid re-parsing the same expressions over and over again
     private Map<String, Expression> cacheExpression;
 
-    public SimpleExpressionParser(String expression, boolean allowEscape,
+    public SimpleExpressionParser(CamelContext camelContext, String expression, boolean allowEscape,
                                   Map<String, Expression> cacheExpression) {
-        super(expression, allowEscape);
+        super(camelContext, expression, allowEscape);
         this.cacheExpression = cacheExpression;
     }
 
@@ -161,7 +162,7 @@ public class SimpleExpressionParser extends BaseSimpleParser {
     private List<Expression> createExpressions() {
         List<Expression> answer = new ArrayList<>();
         for (SimpleNode token : nodes) {
-            Expression exp = token.createExpression(expression);
+            Expression exp = token.createExpression(camelContext, expression);
             if (exp != null) {
                 answer.add(exp);
             }
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
index 5466d58..2f1e16d 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
@@ -104,7 +104,7 @@ public class SimpleLanguage extends LanguageSupport implements StaticService {
 
             expression = loadResource(expression);
 
-            SimplePredicateParser parser = new SimplePredicateParser(expression, allowEscape, cacheExpression);
+            SimplePredicateParser parser = new SimplePredicateParser(getCamelContext(), expression, allowEscape, cacheExpression);
             answer = parser.parsePredicate();
 
             if (cachePredicate != null && answer != null) {
@@ -124,7 +124,7 @@ public class SimpleLanguage extends LanguageSupport implements StaticService {
 
             expression = loadResource(expression);
 
-            SimpleExpressionParser parser = new SimpleExpressionParser(expression, allowEscape, cacheExpression);
+            SimpleExpressionParser parser = new SimpleExpressionParser(getCamelContext(), expression, allowEscape, cacheExpression);
             answer = parser.parseExpression();
 
             if (cacheExpression != null && answer != null) {
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
index 226aae2..392953b 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
 import org.apache.camel.language.simple.ast.BinaryExpression;
@@ -62,8 +63,8 @@ public class SimplePredicateParser extends BaseSimpleParser {
     // use caches to avoid re-parsing the same expressions over and over again
     private Map<String, Expression> cacheExpression;
 
-    public SimplePredicateParser(String expression, boolean allowEscape, Map<String, Expression> cacheExpression) {
-        super(expression, allowEscape);
+    public SimplePredicateParser(CamelContext camelContext, String expression, boolean allowEscape, Map<String, Expression> cacheExpression) {
+        super(camelContext, expression, allowEscape);
         this.cacheExpression = cacheExpression;
     }
 
@@ -467,7 +468,7 @@ public class SimplePredicateParser extends BaseSimpleParser {
     private List<Predicate> createPredicates() {
         List<Predicate> answer = new ArrayList<>();
         for (SimpleNode node : nodes) {
-            Expression exp = node.createExpression(expression);
+            Expression exp = node.createExpression(camelContext, expression);
             if (exp != null) {
                 Predicate predicate = ExpressionToPredicateAdapter.toPredicate(exp);
                 answer.add(predicate);
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/BinaryExpression.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/BinaryExpression.java
index cf5c54a..f0fbaeb 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/BinaryExpression.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/BinaryExpression.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
@@ -71,57 +72,57 @@ public class BinaryExpression extends BaseSimpleNode {
     }
 
     @Override
-    public Expression createExpression(String expression) {
+    public Expression createExpression(CamelContext camelContext, String expression) {
         org.apache.camel.util.ObjectHelper.notNull(left, "left node", this);
         org.apache.camel.util.ObjectHelper.notNull(right, "right node", this);
 
-        final Expression leftExp = left.createExpression(expression);
-        final Expression rightExp = right.createExpression(expression);
+        final Expression leftExp = left.createExpression(camelContext, expression);
+        final Expression rightExp = right.createExpression(camelContext, expression);
 
         if (operator == BinaryOperatorType.EQ) {
-            return createExpression(leftExp, rightExp, PredicateBuilder.isEqualTo(leftExp, rightExp));
+            return createExpression(camelContext, leftExp, rightExp, PredicateBuilder.isEqualTo(leftExp, rightExp));
         } else if (operator == BinaryOperatorType.EQ_IGNORE) {
-            return createExpression(leftExp, rightExp, PredicateBuilder.isEqualToIgnoreCase(leftExp, rightExp));
+            return createExpression(camelContext, leftExp, rightExp, PredicateBuilder.isEqualToIgnoreCase(leftExp, rightExp));
         } else if (operator == BinaryOperatorType.GT) {
-            return createExpression(leftExp, rightExp, PredicateBuilder.isGreaterThan(leftExp, rightExp));
+            return createExpression(camelContext, leftExp, rightExp, PredicateBuilder.isGreaterThan(leftExp, rightExp));
         } else if (operator == BinaryOperatorType.GTE) {
-            return createExpression(leftExp, rightExp, PredicateBuilder.isGreaterThanOrEqualTo(leftExp, rightExp));
+            return createExpression(camelContext, leftExp, rightExp, PredicateBuilder.isGreaterThanOrEqualTo(leftExp, rightExp));
         } else if (operator == BinaryOperatorType.LT) {
-            return createExpression(leftExp, rightExp, PredicateBuilder.isLessThan(leftExp, rightExp));
+            return createExpression(camelContext, leftExp, rightExp, PredicateBuilder.isLessThan(leftExp, rightExp));
         } else if (operator == BinaryOperatorType.LTE) {
-            return createExpression(leftExp, rightExp, PredicateBuilder.isLessThanOrEqualTo(leftExp, rightExp));
+            return createExpression(camelContext, leftExp, rightExp, PredicateBuilder.isLessThanOrEqualTo(leftExp, rightExp));
         } else if (operator == BinaryOperatorType.NOT_EQ) {
-            return createExpression(leftExp, rightExp, PredicateBuilder.isNotEqualTo(leftExp, rightExp));
+            return createExpression(camelContext, leftExp, rightExp, PredicateBuilder.isNotEqualTo(leftExp, rightExp));
         } else if (operator == BinaryOperatorType.NOT_EQ_IGNORE) {
-            return createExpression(leftExp, rightExp,
+            return createExpression(camelContext, leftExp, rightExp,
                     PredicateBuilder.not(PredicateBuilder.isEqualToIgnoreCase(leftExp, rightExp)));
         } else if (operator == BinaryOperatorType.CONTAINS) {
-            return createExpression(leftExp, rightExp, PredicateBuilder.contains(leftExp, rightExp));
+            return createExpression(camelContext, leftExp, rightExp, PredicateBuilder.contains(leftExp, rightExp));
         } else if (operator == BinaryOperatorType.NOT_CONTAINS) {
-            return createExpression(leftExp, rightExp, PredicateBuilder.not(PredicateBuilder.contains(leftExp, rightExp)));
+            return createExpression(camelContext, leftExp, rightExp, PredicateBuilder.not(PredicateBuilder.contains(leftExp, rightExp)));
         } else if (operator == BinaryOperatorType.CONTAINS_IGNORECASE) {
-            return createExpression(leftExp, rightExp, PredicateBuilder.containsIgnoreCase(leftExp, rightExp));
+            return createExpression(camelContext, leftExp, rightExp, PredicateBuilder.containsIgnoreCase(leftExp, rightExp));
         } else if (operator == BinaryOperatorType.NOT_CONTAINS_IGNORECASE) {
-            return createExpression(leftExp, rightExp,
+            return createExpression(camelContext, leftExp, rightExp,
                     PredicateBuilder.not(PredicateBuilder.containsIgnoreCase(leftExp, rightExp)));
         } else if (operator == BinaryOperatorType.IS || operator == BinaryOperatorType.NOT_IS) {
-            return createIsExpression(expression, leftExp, rightExp);
+            return createIsExpression(camelContext, expression, leftExp, rightExp);
         } else if (operator == BinaryOperatorType.REGEX || operator == BinaryOperatorType.NOT_REGEX) {
-            return createRegexExpression(leftExp, rightExp);
+            return createRegexExpression(camelContext, leftExp, rightExp);
         } else if (operator == BinaryOperatorType.IN || operator == BinaryOperatorType.NOT_IN) {
-            return createInExpression(leftExp, rightExp);
+            return createInExpression(camelContext, leftExp, rightExp);
         } else if (operator == BinaryOperatorType.RANGE || operator == BinaryOperatorType.NOT_RANGE) {
-            return createRangeExpression(expression, leftExp, rightExp);
+            return createRangeExpression(camelContext, expression, leftExp, rightExp);
         } else if (operator == BinaryOperatorType.STARTS_WITH) {
-            return createExpression(leftExp, rightExp, PredicateBuilder.startsWith(leftExp, rightExp));
+            return createExpression(camelContext, leftExp, rightExp, PredicateBuilder.startsWith(leftExp, rightExp));
         } else if (operator == BinaryOperatorType.ENDS_WITH) {
-            return createExpression(leftExp, rightExp, PredicateBuilder.endsWith(leftExp, rightExp));
+            return createExpression(camelContext, leftExp, rightExp, PredicateBuilder.endsWith(leftExp, rightExp));
         }
 
         throw new SimpleParserException("Unknown binary operator " + operator, token.getIndex());
     }
 
-    private Expression createIsExpression(final String expression, final Expression leftExp, final Expression rightExp) {
+    private Expression createIsExpression(final CamelContext camelContext, final String expression, final Expression leftExp, final Expression rightExp) {
         return new Expression() {
             @Override
             public <T> T evaluate(Exchange exchange, Class<T> type) {
@@ -132,7 +133,7 @@ public class BinaryExpression extends BaseSimpleNode {
                             expression, right.getToken().getIndex(),
                             operator + " operator cannot accept null. A class type must be provided.");
                 }
-                Class<?> rightType = exchange.getContext().getClassResolver().resolveClass(name);
+                Class<?> rightType = camelContext.getClassResolver().resolveClass(name);
                 if (rightType == null) {
                     throw new SimpleIllegalSyntaxException(
                             expression, right.getToken().getIndex(),
@@ -145,7 +146,7 @@ public class BinaryExpression extends BaseSimpleNode {
                 }
                 boolean answer = predicate.matches(exchange);
 
-                return exchange.getContext().getTypeConverter().convertTo(type, answer);
+                return camelContext.getTypeConverter().convertTo(type, answer);
             }
 
             @Override
@@ -155,7 +156,7 @@ public class BinaryExpression extends BaseSimpleNode {
         };
     }
 
-    private Expression createRegexExpression(final Expression leftExp, final Expression rightExp) {
+    private Expression createRegexExpression(final CamelContext camelContext, final Expression leftExp, final Expression rightExp) {
         return new Expression() {
             @Override
             public <T> T evaluate(Exchange exchange, Class<T> type) {
@@ -165,7 +166,7 @@ public class BinaryExpression extends BaseSimpleNode {
                     predicate = PredicateBuilder.not(predicate);
                 }
                 boolean answer = predicate.matches(exchange);
-                return exchange.getContext().getTypeConverter().convertTo(type, answer);
+                return camelContext.getTypeConverter().convertTo(type, answer);
             }
 
             @Override
@@ -175,7 +176,7 @@ public class BinaryExpression extends BaseSimpleNode {
         };
     }
 
-    private Expression createInExpression(final Expression leftExp, final Expression rightExp) {
+    private Expression createInExpression(final CamelContext camelContext, final Expression leftExp, final Expression rightExp) {
         return new Expression() {
             @Override
             public <T> T evaluate(Exchange exchange, Class<T> type) {
@@ -194,7 +195,7 @@ public class BinaryExpression extends BaseSimpleNode {
                     predicate = PredicateBuilder.not(predicate);
                 }
                 boolean answer = predicate.matches(exchange);
-                return exchange.getContext().getTypeConverter().convertTo(type, answer);
+                return camelContext.getTypeConverter().convertTo(type, answer);
             }
 
             @Override
@@ -204,7 +205,7 @@ public class BinaryExpression extends BaseSimpleNode {
         };
     }
 
-    private Expression createRangeExpression(final String expression, final Expression leftExp, final Expression rightExp) {
+    private Expression createRangeExpression(final CamelContext camelContext, final String expression, final Expression leftExp, final Expression rightExp) {
         return new Expression() {
             @Override
             public <T> T evaluate(Exchange exchange, Class<T> type) {
@@ -230,7 +231,7 @@ public class BinaryExpression extends BaseSimpleNode {
                 }
 
                 boolean answer = predicate.matches(exchange);
-                return exchange.getContext().getTypeConverter().convertTo(type, answer);
+                return camelContext.getTypeConverter().convertTo(type, answer);
             }
 
             @Override
@@ -240,12 +241,12 @@ public class BinaryExpression extends BaseSimpleNode {
         };
     }
 
-    private Expression createExpression(final Expression left, final Expression right, final Predicate predicate) {
+    private Expression createExpression(final CamelContext camelContext, final Expression left, final Expression right, final Predicate predicate) {
         return new Expression() {
             @Override
             public <T> T evaluate(Exchange exchange, Class<T> type) {
                 boolean answer = predicate.matches(exchange);
-                return exchange.getContext().getTypeConverter().convertTo(type, answer);
+                return camelContext.getTypeConverter().convertTo(type, answer);
             }
 
             @Override
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/BooleanExpression.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/BooleanExpression.java
index 5c662ee..cf7e3d0 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/BooleanExpression.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/BooleanExpression.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.language.simple.ast;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.types.SimpleParserException;
@@ -34,14 +35,14 @@ public class BooleanExpression extends BaseSimpleNode {
     }
 
     @Override
-    public Expression createExpression(String expression) throws SimpleParserException {
+    public Expression createExpression(CamelContext camelContext, String expression) throws SimpleParserException {
         return new Expression() {
             @Override
             public <T> T evaluate(Exchange exchange, Class<T> type) {
                 if (type == Object.class || type == Boolean.class || type == boolean.class) {
                     return (T) Boolean.valueOf(value);
                 }
-                return exchange.getContext().getTypeConverter().tryConvertTo(type, exchange, value);
+                return camelContext.getTypeConverter().tryConvertTo(type, exchange, value);
             }
 
             @Override
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/CompositeNodes.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/CompositeNodes.java
index 7a2cfb4..d274b74 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/CompositeNodes.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/CompositeNodes.java
@@ -19,6 +19,7 @@ package org.apache.camel.language.simple.ast;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.types.SimpleToken;
 import org.apache.camel.support.builder.ExpressionBuilder;
@@ -52,15 +53,15 @@ public class CompositeNodes extends BaseSimpleNode {
     }
 
     @Override
-    public Expression createExpression(String expression) {
+    public Expression createExpression(CamelContext camelContext, String expression) {
         if (children.isEmpty()) {
             return null;
         } else if (children.size() == 1) {
-            return children.get(0).createExpression(expression);
+            return children.get(0).createExpression(camelContext, expression);
         } else {
             List<Expression> answer = new ArrayList<>();
             for (SimpleNode child : children) {
-                answer.add(child.createExpression(expression));
+                answer.add(child.createExpression(camelContext, expression));
             }
             return ExpressionBuilder.concatExpression(answer);
         }
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/DoubleQuoteEnd.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/DoubleQuoteEnd.java
index dc161b6..62b314f 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/DoubleQuoteEnd.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/DoubleQuoteEnd.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.language.simple.ast;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.types.SimpleToken;
 
@@ -29,7 +30,7 @@ public class DoubleQuoteEnd extends BaseSimpleNode implements BlockEnd {
     }
 
     @Override
-    public Expression createExpression(String expression) {
+    public Expression createExpression(CamelContext camelContext, String expression) {
         return null;
     }
 
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/DoubleQuoteStart.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/DoubleQuoteStart.java
index 3d6b23f..f5a4477 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/DoubleQuoteStart.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/DoubleQuoteStart.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.language.simple.ast;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.types.SimpleToken;
 import org.apache.camel.support.builder.ExpressionBuilder;
@@ -39,10 +40,10 @@ public class DoubleQuoteStart extends BaseSimpleNode implements BlockStart {
     }
 
     @Override
-    public Expression createExpression(String expression) {
+    public Expression createExpression(CamelContext camelContext, String expression) {
         Expression answer = null;
         if (block != null) {
-            answer = block.createExpression(expression);
+            answer = block.createExpression(camelContext, expression);
         }
         if (answer == null) {
             // there quoted literal is empty
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/LiteralExpression.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/LiteralExpression.java
index 157668b..ca9fc19 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/LiteralExpression.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/LiteralExpression.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.language.simple.ast;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.types.SimpleToken;
 import org.apache.camel.support.builder.ExpressionBuilder;
@@ -55,7 +56,7 @@ public class LiteralExpression extends BaseSimpleNode implements LiteralNode {
     }
 
     @Override
-    public Expression createExpression(String expression) {
+    public Expression createExpression(CamelContext camelContext, String expression) {
         return ExpressionBuilder.constantExpression(getText());
     }
 }
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/LogicalExpression.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/LogicalExpression.java
index d6599f1..818166c 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/LogicalExpression.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/LogicalExpression.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.language.simple.ast;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
@@ -60,12 +61,12 @@ public class LogicalExpression extends BaseSimpleNode {
     }
 
     @Override
-    public Expression createExpression(String expression) {
+    public Expression createExpression(CamelContext camelContext, String expression) {
         ObjectHelper.notNull(left, "left node", this);
         ObjectHelper.notNull(right, "right node", this);
 
-        final Expression leftExp = left.createExpression(expression);
-        final Expression rightExp = right.createExpression(expression);
+        final Expression leftExp = left.createExpression(camelContext, expression);
+        final Expression rightExp = right.createExpression(camelContext, expression);
 
         if (operator == LogicalOperatorType.AND) {
             return createAndExpression(leftExp, rightExp);
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/NullExpression.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/NullExpression.java
index b0bceb6..83c0643 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/NullExpression.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/NullExpression.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.language.simple.ast;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.types.SimpleParserException;
@@ -26,22 +27,24 @@ import org.apache.camel.language.simple.types.SimpleToken;
  */
 public class NullExpression extends BaseSimpleNode {
 
+    private static final Expression NULL_EXPRESSION = new Expression() {
+        @Override
+        public <T> T evaluate(Exchange exchange, Class<T> type) {
+            return null;
+        }
+
+        @Override
+        public String toString() {
+            return "null";
+        }
+    };
+
     public NullExpression(SimpleToken token) {
         super(token);
     }
 
     @Override
-    public Expression createExpression(String expression) throws SimpleParserException {
-        return new Expression() {
-            @Override
-            public <T> T evaluate(Exchange exchange, Class<T> type) {
-                return null;
-            }
-
-            @Override
-            public String toString() {
-                return "null";
-            }
-        };
+    public Expression createExpression(CamelContext camelContext, String expression) throws SimpleParserException {
+        return NULL_EXPRESSION;
     }
 }
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/NumericExpression.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/NumericExpression.java
index d50a6d8..e87692c 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/NumericExpression.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/NumericExpression.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.language.simple.ast;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.types.SimpleParserException;
@@ -47,7 +48,7 @@ public class NumericExpression extends BaseSimpleNode {
     }
 
     @Override
-    public Expression createExpression(String expression) throws SimpleParserException {
+    public Expression createExpression(CamelContext camelContext, String expression) throws SimpleParserException {
         return new Expression() {
             @Override
             public <T> T evaluate(Exchange exchange, Class<T> type) {
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionEnd.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionEnd.java
index e2795cf..03c71fc 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionEnd.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionEnd.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.language.simple.ast;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.types.SimpleToken;
 
@@ -29,7 +30,7 @@ public class SimpleFunctionEnd extends BaseSimpleNode implements BlockEnd {
     }
 
     @Override
-    public Expression createExpression(String expression) {
+    public Expression createExpression(CamelContext camelContext, String expression) {
         return null;
     }
 
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
index 5c853f3..5f848e3 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
@@ -18,6 +18,7 @@ package org.apache.camel.language.simple.ast;
 
 import java.util.Map;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.SimpleExpressionBuilder;
 import org.apache.camel.language.simple.types.SimpleParserException;
@@ -46,12 +47,12 @@ public class SimpleFunctionExpression extends LiteralExpression {
      * @param expression not in use
      */
     @Override
-    public Expression createExpression(String expression) {
+    public Expression createExpression(CamelContext camelContext, String expression) {
         String function = text.toString();
 
         Expression answer = cacheExpression != null ? cacheExpression.get(function) : null;
         if (answer == null) {
-            answer = createSimpleExpression(function, true);
+            answer = createSimpleExpression(camelContext, function, true);
             if (cacheExpression != null && answer != null) {
                 cacheExpression.put(function, answer);
             }
@@ -62,19 +63,19 @@ public class SimpleFunctionExpression extends LiteralExpression {
     /**
      * Creates a Camel {@link Expression} based on this model.
      *
-     * @param  expression                                                   not in use
-     * @param  strict                                                       whether to throw exception if the expression
-     *                                                                      was not a function, otherwise <tt>null</tt>
-     *                                                                      is returned
-     * @return                                                              the created {@link Expression}
+     * @param expression not in use
+     * @param strict     whether to throw exception if the expression
+     *                   was not a function, otherwise <tt>null</tt>
+     *                   is returned
+     * @return the created {@link Expression}
      * @throws org.apache.camel.language.simple.types.SimpleParserException should be thrown if error parsing the model
      */
-    public Expression createExpression(String expression, boolean strict) {
+    public Expression createExpression(CamelContext camelContext, String expression, boolean strict) {
         String function = text.toString();
 
         Expression answer = cacheExpression != null ? cacheExpression.get(function) : null;
         if (answer == null) {
-            answer = createSimpleExpression(function, strict);
+            answer = createSimpleExpression(camelContext, function, strict);
             if (cacheExpression != null && answer != null) {
                 cacheExpression.put(function, answer);
             }
@@ -82,7 +83,7 @@ public class SimpleFunctionExpression extends LiteralExpression {
         return answer;
     }
 
-    private Expression createSimpleExpression(String function, boolean strict) {
+    private Expression createSimpleExpression(CamelContext camelContext, String function, boolean strict) {
         // return the function directly if we can create function without analyzing the prefix
         Expression answer = createSimpleExpressionDirectly(function);
         if (answer != null) {
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionStart.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionStart.java
index eef11c3..d10ccdb 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionStart.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionStart.java
@@ -18,6 +18,7 @@ package org.apache.camel.language.simple.ast;
 
 import java.util.Map;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.types.SimpleIllegalSyntaxException;
@@ -53,23 +54,23 @@ public class SimpleFunctionStart extends BaseSimpleNode implements BlockStart {
     }
 
     @Override
-    public Expression createExpression(String expression) {
+    public Expression createExpression(CamelContext camelContext, String expression) {
         // a function can either be a simple literal function, or contain nested functions
         if (block.getChildren().size() == 1 && block.getChildren().get(0) instanceof LiteralNode) {
-            return doCreateLiteralExpression(expression);
+            return doCreateLiteralExpression(camelContext, expression);
         } else {
-            return doCreateCompositeExpression(expression);
+            return doCreateCompositeExpression(camelContext, expression);
         }
     }
 
-    private Expression doCreateLiteralExpression(final String expression) {
+    private Expression doCreateLiteralExpression(CamelContext camelContext, String expression) {
         SimpleFunctionExpression function = new SimpleFunctionExpression(this.getToken(), cacheExpression);
         LiteralNode literal = (LiteralNode) block.getChildren().get(0);
         function.addText(literal.getText());
-        return function.createExpression(expression);
+        return function.createExpression(camelContext, expression);
     }
 
-    private Expression doCreateCompositeExpression(final String expression) {
+    private Expression doCreateCompositeExpression(CamelContext camelContext, String expression) {
         final SimpleToken token = getToken();
         return new Expression() {
             @Override
@@ -92,7 +93,7 @@ public class SimpleFunctionStart extends BaseSimpleNode implements BlockStart {
                     } else if (!lazy || child instanceof SingleQuoteStart || child instanceof DoubleQuoteStart) {
                         try {
                             // pass in null when we evaluate the nested expressions
-                            Expression nested = child.createExpression(null);
+                            Expression nested = child.createExpression(camelContext, null);
                             String text = nested.evaluate(exchange, String.class);
                             if (text != null) {
                                 if (quoteEmbeddedFunctions && !StringHelper.isQuoted(text)) {
@@ -117,7 +118,7 @@ public class SimpleFunctionStart extends BaseSimpleNode implements BlockStart {
                 SimpleFunctionExpression function = new SimpleFunctionExpression(token, cacheExpression);
                 function.addText(exp);
                 try {
-                    return function.createExpression(exp).evaluate(exchange, type);
+                    return function.createExpression(camelContext, exp).evaluate(exchange, type);
                 } catch (SimpleParserException e) {
                     // must rethrow parser exception as illegal syntax with details about the location
                     throw new SimpleIllegalSyntaxException(expression, e.getIndex(), e.getMessage(), e);
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleNode.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleNode.java
index 4d2ca83..afe5921 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleNode.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleNode.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.language.simple.ast;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.types.SimpleParserException;
 import org.apache.camel.language.simple.types.SimpleToken;
@@ -35,10 +36,11 @@ public interface SimpleNode {
     /**
      * Creates a Camel {@link Expression} based on this model.
      *
-     * @param  expression                                                   the input string
-     * @return                                                              the created {@link Expression}
+     * @param camelContext the camel context
+     * @param expression   the input string
+     * @return the created {@link Expression}
      * @throws org.apache.camel.language.simple.types.SimpleParserException should be thrown if error parsing the model
      */
-    Expression createExpression(String expression) throws SimpleParserException;
+    Expression createExpression(CamelContext camelContext, String expression) throws SimpleParserException;
 
 }
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SingleQuoteEnd.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SingleQuoteEnd.java
index 43e1452..b0f590b 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SingleQuoteEnd.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SingleQuoteEnd.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.language.simple.ast;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.types.SimpleToken;
 
@@ -29,7 +30,7 @@ public class SingleQuoteEnd extends BaseSimpleNode implements BlockEnd {
     }
 
     @Override
-    public Expression createExpression(String expression) {
+    public Expression createExpression(CamelContext camelContext, String expression) {
         return null;
     }
 
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SingleQuoteStart.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SingleQuoteStart.java
index a1b4158..ad484ca 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SingleQuoteStart.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SingleQuoteStart.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.language.simple.ast;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.language.simple.types.SimpleToken;
 import org.apache.camel.support.builder.ExpressionBuilder;
@@ -39,10 +40,10 @@ public class SingleQuoteStart extends BaseSimpleNode implements BlockStart {
     }
 
     @Override
-    public Expression createExpression(String expression) {
+    public Expression createExpression(CamelContext camelContext, String expression) {
         Expression answer = null;
         if (block != null) {
-            answer = block.createExpression(expression);
+            answer = block.createExpression(camelContext, expression);
         }
         if (answer == null) {
             // there quoted literal is empty
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/UnaryExpression.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/UnaryExpression.java
index 35457ae..6d8dc16 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/UnaryExpression.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/UnaryExpression.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.language.simple.ast;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.CamelExchangeException;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
@@ -62,21 +63,21 @@ public class UnaryExpression extends BaseSimpleNode {
     }
 
     @Override
-    public Expression createExpression(String expression) {
+    public Expression createExpression(CamelContext camelContext, String expression) {
         ObjectHelper.notNull(left, "left node", this);
 
-        final Expression leftExp = left.createExpression(expression);
+        final Expression leftExp = left.createExpression(camelContext, expression);
 
         if (operator == UnaryOperatorType.INC) {
-            return createIncExpression(leftExp);
+            return createIncExpression(camelContext, leftExp);
         } else if (operator == UnaryOperatorType.DEC) {
-            return createDecExpression(leftExp);
+            return createDecExpression(camelContext, leftExp);
         }
 
         throw new SimpleParserException("Unknown unary operator " + operator, token.getIndex());
     }
 
-    private Expression createIncExpression(final Expression leftExp) {
+    private Expression createIncExpression(CamelContext camelContext, final Expression leftExp) {
         return new Expression() {
             @Override
             public <T> T evaluate(Exchange exchange, Class<T> type) {
@@ -88,13 +89,13 @@ public class UnaryExpression extends BaseSimpleNode {
                     // convert value back to same type as input as we want to preserve type
                     Object left = leftExp.evaluate(exchange, Object.class);
                     try {
-                        left = exchange.getContext().getTypeConverter().mandatoryConvertTo(left.getClass(), exchange, val);
+                        left = camelContext.getTypeConverter().mandatoryConvertTo(left.getClass(), exchange, val);
                     } catch (NoTypeConversionAvailableException e) {
                         throw RuntimeCamelException.wrapRuntimeCamelException(e);
                     }
 
                     // and return the result
-                    return exchange.getContext().getTypeConverter().convertTo(type, left);
+                    return camelContext.getTypeConverter().convertTo(type, left);
                 }
                 // cannot convert the expression as a number
                 Exception cause = new CamelExchangeException("Cannot evaluate " + leftExp + " as a number", exchange);
@@ -108,7 +109,7 @@ public class UnaryExpression extends BaseSimpleNode {
         };
     }
 
-    private Expression createDecExpression(final Expression leftExp) {
+    private Expression createDecExpression(CamelContext camelContext, final Expression leftExp) {
         return new Expression() {
             @Override
             public <T> T evaluate(Exchange exchange, Class<T> type) {
@@ -120,13 +121,13 @@ public class UnaryExpression extends BaseSimpleNode {
                     // convert value back to same type as input as we want to preserve type
                     Object left = leftExp.evaluate(exchange, Object.class);
                     try {
-                        left = exchange.getContext().getTypeConverter().mandatoryConvertTo(left.getClass(), exchange, val);
+                        left = camelContext.getTypeConverter().mandatoryConvertTo(left.getClass(), exchange, val);
                     } catch (NoTypeConversionAvailableException e) {
                         throw RuntimeCamelException.wrapRuntimeCamelException(e);
                     }
 
                     // and return the result
-                    return exchange.getContext().getTypeConverter().convertTo(type, left);
+                    return camelContext.getTypeConverter().convertTo(type, left);
                 }
                 // cannot convert the expression as a number
                 Exception cause = new CamelExchangeException("Cannot evaluate " + leftExp + " as a number", exchange);
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleBackwardsCompatibleTest.java b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleBackwardsCompatibleTest.java
index fae4e5b..97a4a1c 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleBackwardsCompatibleTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleBackwardsCompatibleTest.java
@@ -55,7 +55,7 @@ public class SimpleBackwardsCompatibleTest extends LanguageTestSupport {
         exchange.getIn().setHeader("high", true);
         exchange.getIn().setHeader("foo", 123);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${header.high} == true && ${header.foo} == 123", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${header.high} == true && ${header.foo} == 123", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
@@ -67,7 +67,7 @@ public class SimpleBackwardsCompatibleTest extends LanguageTestSupport {
         exchange.getIn().setHeader("high", true);
         exchange.getIn().setHeader("foo", 123);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${header.high} == false || ${header.foo} == 123", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${header.high} == false || ${header.foo} == 123", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java
index ae6906c..fdcd6c0 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java
@@ -30,7 +30,7 @@ public class SimpleParserExpressionInvalidTest extends ExchangeTestSupport {
 
     @Test
     public void testSimpleUnbalanceFunction() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("${body is a nice day", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "${body is a nice day", true, null);
         try {
             parser.parseExpression();
             fail("Should thrown exception");
@@ -41,7 +41,7 @@ public class SimpleParserExpressionInvalidTest extends ExchangeTestSupport {
 
     @Test
     public void testSimpleNestedUnbalanceFunction() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("${body${foo}", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "${body${foo}", true, null);
         try {
             parser.parseExpression();
             fail("Should thrown exception");
@@ -52,7 +52,7 @@ public class SimpleParserExpressionInvalidTest extends ExchangeTestSupport {
 
     @Test
     public void testSimpleUnknownFunction() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("Hello ${foo} how are you?", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "Hello ${foo} how are you?", true, null);
         try {
             parser.parseExpression();
             fail("Should thrown exception");
@@ -63,7 +63,7 @@ public class SimpleParserExpressionInvalidTest extends ExchangeTestSupport {
 
     @Test
     public void testSimpleNestedUnknownFunction() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("Hello ${bodyAs(${foo})} how are you?", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "Hello ${bodyAs(${foo})} how are you?", true, null);
         try {
             // nested functions can only be syntax evaluated when evaluating an
             // exchange at runtime
@@ -77,7 +77,7 @@ public class SimpleParserExpressionInvalidTest extends ExchangeTestSupport {
 
     @Test
     public void testNoEndFunction() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("Hello ${body", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "Hello ${body", true, null);
         try {
             parser.parseExpression();
             fail("Should thrown exception");
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionTest.java b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionTest.java
index 5a07161..31d5107 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionTest.java
@@ -30,7 +30,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
 
     @Test
     public void testSimpleParserEol() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("Hello", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "Hello", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("Hello", exp.evaluate(exchange, String.class));
@@ -38,7 +38,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
 
     @Test
     public void testSimpleSingleQuote() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("'Hello'", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "'Hello'", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("'Hello'", exp.evaluate(exchange, String.class));
@@ -46,7 +46,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
 
     @Test
     public void testSimpleStringList() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("\"Hello\" \"World\"", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "\"Hello\" \"World\"", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("\"Hello\" \"World\"", exp.evaluate(exchange, String.class));
@@ -55,7 +55,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
     @Test
     public void testSimpleSingleQuoteWithFunction() throws Exception {
         exchange.getIn().setBody("World");
-        SimpleExpressionParser parser = new SimpleExpressionParser("'Hello ${body} how are you?'", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "'Hello ${body} how are you?'", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("'Hello World how are you?'", exp.evaluate(exchange, String.class));
@@ -64,7 +64,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
     @Test
     public void testSimpleSingleQuoteWithFunctionBodyAs() throws Exception {
         exchange.getIn().setBody("World");
-        SimpleExpressionParser parser = new SimpleExpressionParser("'Hello ${bodyAs(String)} how are you?'", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "'Hello ${bodyAs(String)} how are you?'", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("'Hello World how are you?'", exp.evaluate(exchange, String.class));
@@ -72,7 +72,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
 
     @Test
     public void testSimpleSingleQuoteEol() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("'Hello' World", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "'Hello' World", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("'Hello' World", exp.evaluate(exchange, String.class));
@@ -81,7 +81,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
     @Test
     public void testSimpleFunction() throws Exception {
         exchange.getIn().setBody("World");
-        SimpleExpressionParser parser = new SimpleExpressionParser("${body}", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "${body}", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("World", exp.evaluate(exchange, String.class));
@@ -89,7 +89,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
 
     @Test
     public void testSimpleSingleQuoteDollar() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("Pay 200$ today", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "Pay 200$ today", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("Pay 200$ today", exp.evaluate(exchange, String.class));
@@ -97,7 +97,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
 
     @Test
     public void testSimpleSingleQuoteDollarEnd() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("Pay 200$", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "Pay 200$", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("Pay 200$", exp.evaluate(exchange, String.class));
@@ -106,7 +106,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
     @Test
     public void testSimpleUnaryInc() throws Exception {
         exchange.getIn().setBody("122");
-        SimpleExpressionParser parser = new SimpleExpressionParser("${body}++", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "${body}++", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("123", exp.evaluate(exchange, String.class));
@@ -115,7 +115,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
     @Test
     public void testSimpleUnaryDec() throws Exception {
         exchange.getIn().setBody("122");
-        SimpleExpressionParser parser = new SimpleExpressionParser("${body}--", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "${body}--", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("121", exp.evaluate(exchange, String.class));
@@ -124,7 +124,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
     @Test
     public void testSimpleUnaryIncInt() throws Exception {
         exchange.getIn().setBody(122);
-        SimpleExpressionParser parser = new SimpleExpressionParser("${body}++", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "${body}++", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals(Integer.valueOf(123), exp.evaluate(exchange, Integer.class));
@@ -133,7 +133,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
     @Test
     public void testSimpleUnaryDecInt() throws Exception {
         exchange.getIn().setBody(122);
-        SimpleExpressionParser parser = new SimpleExpressionParser("${body}--", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "${body}--", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals(Integer.valueOf(121), exp.evaluate(exchange, Integer.class));
@@ -143,7 +143,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
     public void testHeaderNestedFunction() throws Exception {
         exchange.getIn().setBody("foo");
         exchange.getIn().setHeader("foo", "abc");
-        SimpleExpressionParser parser = new SimpleExpressionParser("${header.${body}}", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "${header.${body}}", true, null);
         Expression exp = parser.parseExpression();
 
         Object obj = exp.evaluate(exchange, Object.class);
@@ -155,7 +155,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
     public void testBodyAsNestedFunction() throws Exception {
         exchange.getIn().setBody("123");
         exchange.getIn().setHeader("foo", "Integer");
-        SimpleExpressionParser parser = new SimpleExpressionParser("${bodyAs(${header.foo})}", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "${bodyAs(${header.foo})}", true, null);
         Expression exp = parser.parseExpression();
 
         Object obj = exp.evaluate(exchange, Object.class);
@@ -171,7 +171,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
         exchange.getIn().setHeader("bar", "e");
         exchange.getIn().setHeader("baz", "ger");
         SimpleExpressionParser parser
-                = new SimpleExpressionParser("${bodyAs(${header.foo}${header.bar}${header.baz})}", true, null);
+                = new SimpleExpressionParser(context, "${bodyAs(${header.foo}${header.bar}${header.baz})}", true, null);
         Expression exp = parser.parseExpression();
 
         Object obj = exp.evaluate(exchange, Object.class);
@@ -185,7 +185,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
         exchange.getIn().setBody("123");
         exchange.getIn().setHeader("foo", "Integer");
         exchange.getIn().setHeader("bar", "foo");
-        SimpleExpressionParser parser = new SimpleExpressionParser("${bodyAs(${header.${header.bar}})}", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "${bodyAs(${header.${header.bar}})}", true, null);
         Expression exp = parser.parseExpression();
 
         Object obj = exp.evaluate(exchange, Object.class);
@@ -202,11 +202,11 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
 
         exchange.getIn().setBody(map);
 
-        SimpleExpressionParser parser = new SimpleExpressionParser("${body[foo]}", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "${body[foo]}", true, null);
         Expression exp = parser.parseExpression();
         assertEquals("123", exp.evaluate(exchange, Object.class));
 
-        parser = new SimpleExpressionParser("${body['foo bar']}", true, null);
+        parser = new SimpleExpressionParser(context, "${body['foo bar']}", true, null);
         exp = parser.parseExpression();
         assertEquals("456", exp.evaluate(exchange, Object.class));
     }
@@ -216,7 +216,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
         exchange.getIn().setHeader("JMSMessageID", "JMSMessageID-123");
         exchange.getIn().setBody("THE MSG ID ${header.JMSMessageID} isA --");
 
-        SimpleExpressionParser parser = new SimpleExpressionParser("THE MSG ID ${header.JMSMessageID} isA --", true, null);
+        SimpleExpressionParser parser = new SimpleExpressionParser(context, "THE MSG ID ${header.JMSMessageID} isA --", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("THE MSG ID JMSMessageID-123 isA --", exp.evaluate(exchange, String.class));
@@ -228,7 +228,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
         exchange.getIn().setBody("------------THE MSG ID ${header.JMSMessageID}------------");
 
         SimpleExpressionParser parser
-                = new SimpleExpressionParser("------------THE MSG ID ${header.JMSMessageID}------------", true, null);
+                = new SimpleExpressionParser(context, "------------THE MSG ID ${header.JMSMessageID}------------", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("------------THE MSG ID JMSMessageID-123------------", exp.evaluate(exchange, String.class));
@@ -240,7 +240,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
         exchange.getIn().setBody("------------ THE MSG ID ${header.JMSMessageID} ------------");
 
         SimpleExpressionParser parser
-                = new SimpleExpressionParser("------------ THE MSG ID ${header.JMSMessageID} ------------", true, null);
+                = new SimpleExpressionParser(context, "------------ THE MSG ID ${header.JMSMessageID} ------------", true, null);
         Expression exp = parser.parseExpression();
 
         assertEquals("------------ THE MSG ID JMSMessageID-123 ------------", exp.evaluate(exchange, String.class));
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateInvalidTest.java b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateInvalidTest.java
index 29b8b94..56938c7 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateInvalidTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateInvalidTest.java
@@ -33,7 +33,7 @@ public class SimpleParserPredicateInvalidTest extends ExchangeTestSupport {
         exchange.getIn().setBody("Hello");
         exchange.getIn().setHeader("high", true);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${header.high} == abc", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${header.high} == abc", true, null);
         try {
             parser.parsePredicate();
             fail("Should thrown exception");
@@ -47,7 +47,7 @@ public class SimpleParserPredicateInvalidTest extends ExchangeTestSupport {
         exchange.getIn().setBody("Hello");
         exchange.getIn().setHeader("high", true);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${header.high} = true", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${header.high} = true", true, null);
         try {
             parser.parsePredicate();
             fail("Should thrown exception");
@@ -60,7 +60,7 @@ public class SimpleParserPredicateInvalidTest extends ExchangeTestSupport {
     public void testSimpleUnevenSingleQuote() throws Exception {
         exchange.getIn().setBody("foo");
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body} == 'foo", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body} == 'foo", true, null);
         try {
             parser.parsePredicate();
             fail("Should thrown exception");
@@ -73,7 +73,7 @@ public class SimpleParserPredicateInvalidTest extends ExchangeTestSupport {
     public void testSimpleUnevenDoubleQuote() throws Exception {
         exchange.getIn().setBody("foo");
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body} == \"foo", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body} == \"foo", true, null);
         try {
             parser.parsePredicate();
             fail("Should thrown exception");
@@ -86,7 +86,7 @@ public class SimpleParserPredicateInvalidTest extends ExchangeTestSupport {
     public void testSimpleTwoAnd() throws Exception {
         exchange.getIn().setBody("foo");
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body} == 'foo' && && ${header} == 123", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body} == 'foo' && && ${header} == 123", true, null);
         try {
             parser.parsePredicate();
             fail("Should thrown exception");
@@ -99,7 +99,7 @@ public class SimpleParserPredicateInvalidTest extends ExchangeTestSupport {
     public void testSimpleTwoOr() throws Exception {
         exchange.getIn().setBody("foo");
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body} == 'foo' || || ${header} == 123", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body} == 'foo' || || ${header} == 123", true, null);
         try {
             parser.parsePredicate();
             fail("Should thrown exception");
@@ -112,7 +112,7 @@ public class SimpleParserPredicateInvalidTest extends ExchangeTestSupport {
     public void testSimpleTwoEq() throws Exception {
         exchange.getIn().setBody("foo");
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body} == == 'foo'", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body} == == 'foo'", true, null);
         try {
             parser.parsePredicate();
             fail("Should thrown exception");
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateTest.java b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateTest.java
index d43a925..7fcb6f3 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateTest.java
@@ -38,11 +38,11 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
     public void testSimpleBooleanValue() throws Exception {
         exchange.getIn().setBody("foo");
 
-        SimplePredicateParser parser = new SimplePredicateParser("true", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "true", true, null);
         Predicate pre = parser.parsePredicate();
         assertTrue(pre.matches(exchange));
 
-        parser = new SimplePredicateParser("false", true, null);
+        parser = new SimplePredicateParser(context, "false", true, null);
         pre = parser.parsePredicate();
         assertFalse(pre.matches(exchange));
     }
@@ -51,7 +51,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
     public void testSimpleEq() throws Exception {
         exchange.getIn().setBody("foo");
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body} == 'foo'", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body} == 'foo'", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange));
@@ -61,7 +61,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
     public void testSimpleEqNumeric() throws Exception {
         exchange.getIn().setBody(123);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body} == 123", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body} == 123", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
@@ -72,7 +72,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
         exchange.getIn().setBody(122);
         exchange.getIn().setHeader("val", 122);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body} == ${header.val}", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body} == ${header.val}", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
@@ -82,7 +82,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
     public void testSimpleEqFunctionNumeric() throws Exception {
         exchange.getIn().setBody(122);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body} == 122", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body} == 122", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
@@ -92,7 +92,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
     public void testSimpleGtFunctionNumeric() throws Exception {
         exchange.getIn().setBody(122);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body} > 120", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body} > 120", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
@@ -102,7 +102,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
     public void testSimpleUnaryInc() throws Exception {
         exchange.getIn().setBody(122);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body}++ == 123", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body}++ == 123", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
@@ -112,7 +112,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
     public void testSimpleUnaryDec() throws Exception {
         exchange.getIn().setBody(122);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body}-- == 121", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body}-- == 121", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
@@ -123,7 +123,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
         exchange.getIn().setBody("Hello");
         exchange.getIn().setHeader("high", true);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${header.high} == true", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${header.high} == true", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
@@ -134,7 +134,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
         exchange.getIn().setBody("Hello");
         exchange.getIn().setHeader("high", true);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${header.high}   ==     true", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${header.high}   ==     true", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
@@ -146,7 +146,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
         exchange.getIn().setHeader("high", true);
         exchange.getIn().setHeader("foo", 123);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${header.high} == true && ${header.foo} == 123", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${header.high} == true && ${header.foo} == 123", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
@@ -158,7 +158,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
         exchange.getIn().setHeader("high", true);
         exchange.getIn().setHeader("foo", 123);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${header.high} == false || ${header.foo} == 123", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${header.high} == false || ${header.foo} == 123", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
@@ -171,7 +171,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
         exchange.getIn().setHeader("foo", 123);
         exchange.getIn().setHeader("bar", "beer");
 
-        SimplePredicateParser parser = new SimplePredicateParser(
+        SimplePredicateParser parser = new SimplePredicateParser(context,
                 "${header.high} == true && ${header.foo} == 123 && ${header.bar} == 'beer'", true, null);
         Predicate pre = parser.parsePredicate();
 
@@ -191,7 +191,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
             }
         }
 
-        SimplePredicateParser parser = new SimplePredicateParser(sb.toString(), true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, sb.toString(), true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
@@ -210,7 +210,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
         }
         sb.append(" || ${body} == 'Hello'");
 
-        SimplePredicateParser parser = new SimplePredicateParser(sb.toString(), true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, sb.toString(), true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange), "Should match");
@@ -220,7 +220,7 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
     public void testSimpleExpressionPredicate() throws Exception {
         exchange.getIn().setBody("Hello");
         exchange.getIn().setHeader("number", "1234");
-        SimplePredicateParser parser = new SimplePredicateParser("${in.header.number} regex '\\d{4}'", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${in.header.number} regex '\\d{4}'", true, null);
         Predicate pre = parser.parsePredicate();
         assertTrue(pre.matches(exchange), "Should match");
     }
@@ -233,21 +233,21 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
 
         exchange.getIn().setBody(map);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body[foo]} == 123", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body[foo]} == 123", true, null);
         Predicate pre = parser.parsePredicate();
         assertTrue(pre.matches(exchange), "Should match");
 
-        parser = new SimplePredicateParser("${body['foo bar']} == 456", true, null);
+        parser = new SimplePredicateParser(context, "${body['foo bar']} == 456", true, null);
         pre = parser.parsePredicate();
         assertTrue(pre.matches(exchange), "Should match");
 
         // the predicate has whitespace in the function
-        parser = new SimplePredicateParser("${body[foo bar]} == 456", true, null);
+        parser = new SimplePredicateParser(context, "${body[foo bar]} == 456", true, null);
         pre = parser.parsePredicate();
         assertTrue(pre.matches(exchange), "Should match");
 
         // no header with that name
-        parser = new SimplePredicateParser("${body[unknown]} == 456", true, null);
+        parser = new SimplePredicateParser(context, "${body[unknown]} == 456", true, null);
         pre = parser.parsePredicate();
         assertFalse(pre.matches(exchange), "Should not match");
     }
@@ -272,22 +272,22 @@ public class SimpleParserPredicateTest extends ExchangeTestSupport {
         map.put("key3", "none");
         exchange.getIn().setBody(map);
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body[key]} in ${ref:myList}", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body[key]} in ${ref:myList}", true, null);
         Predicate pre = parser.parsePredicate();
         assertTrue(pre.matches(exchange), "Should match");
 
-        parser = new SimplePredicateParser("${body[key2]} in ${ref:myList}", true, null);
+        parser = new SimplePredicateParser(context, "${body[key2]} in ${ref:myList}", true, null);
         pre = parser.parsePredicate();
         assertTrue(pre.matches(exchange), "Should match");
 
-        parser = new SimplePredicateParser("${body[key3]} in ${ref:myList}", true, null);
+        parser = new SimplePredicateParser(context, "${body[key3]} in ${ref:myList}", true, null);
         pre = parser.parsePredicate();
         assertFalse(pre.matches(exchange), "Should not match");
     }
 
     @Test
     public void testSimpleInEmpty() throws Exception {
-        SimplePredicateParser parser = new SimplePredicateParser("${body} in ',,gold,silver'", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body} in ',,gold,silver'", true, null);
         Predicate pre = parser.parsePredicate();
 
         exchange.getIn().setBody("gold");
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserRegexpPredicateTest.java b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserRegexpPredicateTest.java
index 1376afb..35ec401 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserRegexpPredicateTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserRegexpPredicateTest.java
@@ -32,7 +32,7 @@ public class SimpleParserRegexpPredicateTest extends ExchangeTestSupport {
     public void testSimpleRegexp() throws Exception {
         exchange.getIn().setBody("12.34.5678");
 
-        SimplePredicateParser parser = new SimplePredicateParser("${body} regex '^\\d{2}\\.\\d{2}\\.\\d{4}$'", true, null);
+        SimplePredicateParser parser = new SimplePredicateParser(context, "${body} regex '^\\d{2}\\.\\d{2}\\.\\d{4}$'", true, null);
         Predicate pre = parser.parsePredicate();
 
         assertTrue(pre.matches(exchange));