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 2017/01/11 21:10:33 UTC

camel git commit: CAMEL-10698: Add information in DSL whether an expression is to be used as expression or predicate. This allows us to understand this for eg the validate goal of camel-maven-plugin or others.

Repository: camel
Updated Branches:
  refs/heads/master 96ee31409 -> dce92c8d7


CAMEL-10698: Add information in DSL whether an expression is to be used as expression or predicate. This allows us to understand this for eg the validate goal of camel-maven-plugin or others.


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

Branch: refs/heads/master
Commit: dce92c8d77dc098cbf879efaa5e290a5cb5e2470
Parents: 96ee314
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Jan 11 22:09:44 2017 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Jan 11 22:09:44 2017 +0100

----------------------------------------------------------------------
 .../apache/camel/model/AggregateDefinition.java |  4 ++
 .../org/apache/camel/model/CatchDefinition.java |  5 ++
 .../apache/camel/model/ChoiceDefinition.java    |  3 ++
 .../apache/camel/model/FilterDefinition.java    |  2 +-
 .../InterceptSendToEndpointDefinition.java      |  1 +
 .../camel/model/OnCompletionDefinition.java     |  2 +
 .../camel/model/OnExceptionDefinition.java      | 11 +++++
 .../apache/camel/model/ProcessorDefinition.java |  9 ++++
 .../org/apache/camel/model/TryDefinition.java   |  3 ++
 .../apache/camel/model/ValidateDefinition.java  |  2 +-
 .../org/apache/camel/model/WhenDefinition.java  |  2 +-
 .../model/WhenSkipSendToEndpointDefinition.java |  2 +-
 .../org/apache/camel/parser/ParserResult.java   | 12 +++++
 .../apache/camel/parser/RouteBuilderParser.java | 19 ++++---
 .../parser/helper/CamelJavaParserHelper.java    | 52 +++++++++++++++++++-
 .../RoasterSimpleRouteBuilderConfigureTest.java |  2 +
 .../org/apache/camel/maven/ValidateMojo.java    | 11 ++++-
 .../java/org/apache/camel/spi/Metadata.java     | 17 +++++++
 18 files changed, 145 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/AggregateDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/AggregateDefinition.java b/camel-core/src/main/java/org/apache/camel/model/AggregateDefinition.java
index 2b5b97c..f97a459 100644
--- a/camel-core/src/main/java/org/apache/camel/model/AggregateDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/AggregateDefinition.java
@@ -61,6 +61,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
     @XmlElement(name = "correlationExpression", required = true)
     private ExpressionSubElementDefinition correlationExpression;
     @XmlElement(name = "completionPredicate")
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     private ExpressionSubElementDefinition completionPredicate;
     @XmlElement(name = "completionTimeout")
     private ExpressionSubElementDefinition completionTimeoutExpression;
@@ -889,6 +890,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
     /**
      * Sets the predicate used to determine if the aggregation is completed
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public AggregateDefinition completionPredicate(Predicate predicate) {
         checkNoCompletedPredicate();
         setCompletionPredicate(new ExpressionSubElementDefinition(predicate));
@@ -901,6 +903,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      *
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public PredicateClause<AggregateDefinition> completionPredicate() {
         PredicateClause<AggregateDefinition> clause = new PredicateClause<>(this);
         completionPredicate(clause);
@@ -913,6 +916,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      *
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public PredicateClause<AggregateDefinition> completion() {
         return completionPredicate();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java b/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java
index 92837a0..96b849a 100644
--- a/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java
@@ -47,8 +47,10 @@ public class CatchDefinition extends ProcessorDefinition<CatchDefinition> {
     @XmlElement(name = "exception")
     private List<String> exceptions = new ArrayList<String>();
     @XmlElement(name = "onWhen")
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     private WhenDefinition onWhen;
     @XmlElement(name = "handled")
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     private ExpressionSubElementDefinition handled;
     @XmlElementRef
     private List<ProcessorDefinition<?>> outputs = new ArrayList<ProcessorDefinition<?>>();
@@ -173,6 +175,7 @@ public class CatchDefinition extends ProcessorDefinition<CatchDefinition> {
      * @param predicate  predicate that determines true or false
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public CatchDefinition onWhen(Predicate predicate) {
         setOnWhen(new WhenDefinition(predicate));
         return this;
@@ -201,6 +204,7 @@ public class CatchDefinition extends ProcessorDefinition<CatchDefinition> {
      * from a {@link Processor} or use the {@link ProcessorDefinition#throwException(Exception)}
      */
     @Deprecated
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public CatchDefinition handled(Predicate handled) {
         setHandledPolicy(handled);
         return this;
@@ -215,6 +219,7 @@ public class CatchDefinition extends ProcessorDefinition<CatchDefinition> {
      * from a {@link Processor} or use the {@link ProcessorDefinition#throwException(Exception)}
      */
     @Deprecated
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public CatchDefinition handled(Expression handled) {
         setHandledPolicy(ExpressionToPredicateAdapter.toPredicate(handled));
         return this;

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java b/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
index 60370cc..ef7f1f0 100644
--- a/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
@@ -45,6 +45,7 @@ import org.apache.camel.util.ObjectHelper;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
     @XmlElementRef
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     private List<WhenDefinition> whenClauses = new ArrayList<WhenDefinition>();
     @XmlElement
     private OtherwiseDefinition otherwise;
@@ -179,6 +180,7 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
      * @param predicate the predicate
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public ChoiceDefinition when(Predicate predicate) {
         addClause(new WhenDefinition(predicate));
         return this;
@@ -189,6 +191,7 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
      *
      * @return expression to be used as builder to configure the when node
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public ExpressionClause<ChoiceDefinition> when() {
         ExpressionClause<ChoiceDefinition> clause = new ExpressionClause<ChoiceDefinition>(this);
         addClause(new WhenDefinition(clause));

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/FilterDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/FilterDefinition.java b/camel-core/src/main/java/org/apache/camel/model/FilterDefinition.java
index 01bcdce..e5a18fd 100644
--- a/camel-core/src/main/java/org/apache/camel/model/FilterDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/FilterDefinition.java
@@ -32,7 +32,7 @@ import org.apache.camel.spi.RouteContext;
  *
  * @version 
  */
-@Metadata(label = "eip,routing")
+@Metadata(label = "eip,routing", expressionMode = Metadata.ExpressionMode.predicate)
 @XmlRootElement(name = "filter")
 @XmlAccessorType(XmlAccessType.FIELD)
 public class FilterDefinition extends ExpressionNode {

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java b/camel-core/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java
index a79401d..e751182 100644
--- a/camel-core/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java
@@ -149,6 +149,7 @@ public class InterceptSendToEndpointDefinition extends OutputDefinition<Intercep
      * @param predicate  the predicate
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public InterceptSendToEndpointDefinition when(Predicate predicate) {
         WhenDefinition when = new WhenDefinition(predicate);
         addOutput(when);

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java b/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
index a37e912..cf8f104 100644
--- a/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
@@ -54,6 +54,7 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi
     @XmlAttribute
     private Boolean onFailureOnly;
     @XmlElement(name = "onWhen")
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     private WhenDefinition onWhen;
     @XmlAttribute
     private Boolean parallelProcessing;
@@ -249,6 +250,7 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi
      * @param predicate predicate that determines true or false
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public OnCompletionDefinition onWhen(Predicate predicate) {
         setOnWhen(new WhenDefinition(predicate));
         return this;

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java b/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
index 9ed6ebe..d8d0de8 100644
--- a/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
@@ -59,16 +59,20 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
     @XmlElement(name = "exception", required = true)
     private List<String> exceptions = new ArrayList<String>();
     @XmlElement(name = "onWhen")
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     private WhenDefinition onWhen;
     @XmlElement(name = "retryWhile")
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     private ExpressionSubElementDefinition retryWhile;
     @XmlElement(name = "redeliveryPolicy")
     private RedeliveryPolicyDefinition redeliveryPolicyType;
     @XmlAttribute(name = "redeliveryPolicyRef")
     private String redeliveryPolicyRef;
     @XmlElement(name = "handled")
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     private ExpressionSubElementDefinition handled;
     @XmlElement(name = "continued")
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     private ExpressionSubElementDefinition continued;
     @XmlAttribute(name = "onRedeliveryRef")
     private String onRedeliveryRef;
@@ -295,6 +299,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
      * @param handled predicate that determines true or false
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public OnExceptionDefinition handled(Predicate handled) {
         setHandledPolicy(handled);
         return this;
@@ -306,6 +311,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
      * @param handled expression that determines true or false
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public OnExceptionDefinition handled(Expression handled) {
         setHandledPolicy(ExpressionToPredicateAdapter.toPredicate(handled));
         return this;
@@ -319,6 +325,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
      * @param continued continued or not
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public OnExceptionDefinition continued(boolean continued) {
         Expression expression = ExpressionBuilder.constantExpression(Boolean.toString(continued));
         return continued(expression);
@@ -332,6 +339,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
      * @param continued predicate that determines true or false
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public OnExceptionDefinition continued(Predicate continued) {
         setContinuedPolicy(continued);
         return this;
@@ -345,6 +353,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
      * @param continued expression that determines true or false
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public OnExceptionDefinition continued(Expression continued) {
         setContinuedPolicy(ExpressionToPredicateAdapter.toPredicate(continued));
         return this;
@@ -359,6 +368,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
      * @param predicate predicate that determines true or false
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public OnExceptionDefinition onWhen(Predicate predicate) {
         setOnWhen(new WhenDefinition(predicate));
         return this;
@@ -372,6 +382,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
      * @param retryWhile predicate that determines when to stop retrying
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public OnExceptionDefinition retryWhile(Predicate retryWhile) {
         setRetryWhilePolicy(retryWhile);
         return this;

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
index bf2b315..641d3fd 100644
--- a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
@@ -70,6 +70,7 @@ import org.apache.camel.spi.IdAware;
 import org.apache.camel.spi.IdempotentRepository;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.LifecycleStrategy;
+import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.Policy;
 import org.apache.camel.spi.RouteContext;
 import org.slf4j.Logger;
@@ -1460,6 +1461,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      *
      * @return the clause used to create the filter expression
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public ExpressionClause<? extends FilterDefinition> filter() {
         FilterDefinition filter = new FilterDefinition();
         addOutput(filter);
@@ -1474,6 +1476,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      * @param predicate  predicate to use
      * @return the builder 
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public FilterDefinition filter(Predicate predicate) {
         FilterDefinition filter = new FilterDefinition(predicate);
         addOutput(filter);
@@ -1488,6 +1491,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      * @param expression  the predicate expression to use
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public FilterDefinition filter(ExpressionDefinition expression) {
         FilterDefinition filter = new FilterDefinition(expression);
         addOutput(filter);
@@ -1503,6 +1507,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      * @param expression   the expression
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public FilterDefinition filter(String language, String expression) {
         return filter(new LanguageExpression(language, expression));
     }
@@ -1515,6 +1520,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      * @param expression  the expression
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public ValidateDefinition validate(Expression expression) {
         ValidateDefinition answer = new ValidateDefinition(expression);
         addOutput(answer);
@@ -1529,6 +1535,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      * @param predicate  the predicate
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public ValidateDefinition validate(Predicate predicate) {
         ValidateDefinition answer = new ValidateDefinition(predicate);
         addOutput(answer);
@@ -1542,6 +1549,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      *
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public ExpressionClause<ValidateDefinition> validate() {
         ValidateDefinition answer = new ValidateDefinition();
         addOutput(answer);
@@ -2236,6 +2244,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      * @param predicate the while loop predicate
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public LoopDefinition loopDoWhile(Predicate predicate) {
         LoopDefinition loop = new LoopDefinition(predicate);
         addOutput(loop);

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java b/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java
index 3b9158b..b34b190 100644
--- a/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java
@@ -148,6 +148,7 @@ public class TryDefinition extends OutputDefinition<TryDefinition> {
      * @param predicate  predicate that determines true or false
      * @return the builder
      */
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public TryDefinition onWhen(Predicate predicate) {
         // we must use a delegate so we can use the fluent builder based on TryDefinition
         // to configure all with try .. catch .. finally
@@ -183,6 +184,7 @@ public class TryDefinition extends OutputDefinition<TryDefinition> {
      * from a {@link Processor} or use the {@link ProcessorDefinition#throwException(Exception)}
      */
     @Deprecated
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public TryDefinition handled(Predicate handled) {
         // we must use a delegate so we can use the fluent builder based on TryDefinition
         // to configure all with try .. catch .. finally
@@ -204,6 +206,7 @@ public class TryDefinition extends OutputDefinition<TryDefinition> {
      * from a {@link Processor} or use the {@link ProcessorDefinition#throwException(Exception)}
      */
     @Deprecated
+    @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
     public TryDefinition handled(Expression handled) {
         return handled(ExpressionToPredicateAdapter.toPredicate(handled));
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java b/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java
index 532e9c6..5ac9924 100644
--- a/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java
@@ -32,7 +32,7 @@ import org.apache.camel.spi.RouteContext;
  *
  * @version 
  */
-@Metadata(label = "eip,transformation")
+@Metadata(label = "eip,transformation", expressionMode = Metadata.ExpressionMode.predicate)
 @XmlRootElement(name = "validate")
 @XmlAccessorType(XmlAccessType.FIELD)
 public class ValidateDefinition extends NoOutputExpressionNode {

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/WhenDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/WhenDefinition.java b/camel-core/src/main/java/org/apache/camel/model/WhenDefinition.java
index e0f1494..aca3933 100644
--- a/camel-core/src/main/java/org/apache/camel/model/WhenDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/WhenDefinition.java
@@ -29,7 +29,7 @@ import org.apache.camel.spi.RouteContext;
  * 
  * @version 
  */
-@Metadata(label = "eip,routing")
+@Metadata(label = "eip,routing", expressionMode = Metadata.ExpressionMode.predicate)
 @XmlRootElement(name = "when")
 public class WhenDefinition extends ExpressionNode {
 

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/WhenSkipSendToEndpointDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/WhenSkipSendToEndpointDefinition.java b/camel-core/src/main/java/org/apache/camel/model/WhenSkipSendToEndpointDefinition.java
index b607da2..ff124f7 100644
--- a/camel-core/src/main/java/org/apache/camel/model/WhenSkipSendToEndpointDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/WhenSkipSendToEndpointDefinition.java
@@ -27,7 +27,7 @@ import org.apache.camel.spi.RouteContext;
 /**
  * Predicate to determine if the message should be sent or not to the endpoint, when using interceptSentToEndpoint.
  */
-@Metadata(label = "configuration")
+@Metadata(label = "configuration", expressionMode = Metadata.ExpressionMode.predicate)
 @XmlRootElement(name = "whenSkipSendToEndpoint")
 public class WhenSkipSendToEndpointDefinition extends WhenDefinition {
 

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java
----------------------------------------------------------------------
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java
index 4ef2fc4..71088d2 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java
@@ -25,6 +25,7 @@ public class ParserResult {
     private boolean parsed;
     private int position;
     private String element;
+    private Boolean predicate;
 
     public ParserResult(String node, int position, String element) {
         this(node, position, element, true);
@@ -66,6 +67,17 @@ public class ParserResult {
         return node;
     }
 
+    public Boolean getPredicate() {
+        return predicate;
+    }
+
+    /**
+     * Tells if it was an expression which is intended to be used as a predicate (determined from camel-core mode)
+     */
+    public void setPredicate(Boolean predicate) {
+        this.predicate = predicate;
+    }
+
     public String toString() {
         return element;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
----------------------------------------------------------------------
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
index 36fc443..dd15697 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
@@ -249,17 +249,22 @@ public final class RouteBuilderParser {
                         fileName = fileName.substring(baseDir.length() + 1);
                     }
 
-                    CamelSimpleExpressionDetails details = new CamelSimpleExpressionDetails();
-                    details.setFileName(fileName);
-                    details.setClassName(clazz.getQualifiedName());
-                    details.setMethodName("configure");
+                    CamelSimpleExpressionDetails detail = new CamelSimpleExpressionDetails();
+                    detail.setFileName(fileName);
+                    detail.setClassName(clazz.getQualifiedName());
+                    detail.setMethodName("configure");
                     int line = findLineNumber(fullyQualifiedFileName, result.getPosition());
                     if (line > -1) {
-                        details.setLineNumber("" + line);
+                        detail.setLineNumber("" + line);
                     }
-                    details.setSimple(result.getElement());
+                    detail.setSimple(result.getElement());
+
+                    boolean predicate = result.getPredicate() != null ? result.getPredicate() : false;
+                    boolean expression = !predicate;
+                    detail.setPredicate(predicate);
+                    detail.setExpression(expression);
 
-                    simpleExpressions.add(details);
+                    simpleExpressions.add(detail);
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
----------------------------------------------------------------------
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
index 92452b6..a1f7b59 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
@@ -32,6 +32,8 @@ import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.ClassInstanceCrea
 import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.Expression;
 import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.ExpressionStatement;
 import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.FieldDeclaration;
+import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.IAnnotationBinding;
+import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.ITypeBinding;
 import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.InfixExpression;
 import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.MemberValuePair;
 import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.MethodDeclaration;
@@ -429,8 +431,37 @@ public final class CamelJavaParserHelper {
                 Object arg = args.get(0);
                 String simple = getLiteralValue(clazz, block, (Expression) arg);
                 if (!Strings.isBlank(simple)) {
+                    // is this a simple expression that is called as a predicate or expression
+                    boolean predicate = false;
+                    Expression parent = mi.getExpression();
+                    if (parent == null) {
+                        // maybe its an argument
+                        // simple maybe be passed in as an argument
+                        List list = mi.arguments();
+                        // must be a single argument
+                        if (list != null && list.size() == 1) {
+                            ASTNode o = (ASTNode) list.get(0);
+                            ASTNode p = o.getParent();
+                            if (p instanceof MethodInvocation) {
+                                // this is simple
+                                String pName = ((MethodInvocation) p).getName().getIdentifier();
+                                if ("simple".equals(pName)) {
+                                    // okay find the parent of simple which is the method that uses simple
+                                    parent = (Expression) p.getParent();
+                                }
+                            }
+                        }
+                    }
+                    if (parent != null && parent instanceof MethodInvocation) {
+                        MethodInvocation emi = (MethodInvocation) parent;
+                        String parentName = emi.getName().getIdentifier();
+                        predicate = isSimplePredicate(parentName);
+                    }
+
                     int position = ((Expression) arg).getStartPosition();
-                    expressions.add(new ParserResult(node, position, simple));
+                    ParserResult result = new ParserResult(node, position, simple);
+                    result.setPredicate(predicate);
+                    expressions.add(result);
                 }
             }
         }
@@ -447,6 +478,25 @@ public final class CamelJavaParserHelper {
         }
     }
 
+    /**
+     * Using simple expressions in the Java DSL may be used in certain places as predicate only
+     */
+    private static boolean isSimplePredicate(String name) {
+        if (name == null) {
+            return false;
+        }
+        if (name.equals("completionPredicate") || name.equals("completion")) {
+            return true;
+        }
+        if (name.equals("onWhen") || name.equals("when") || name.equals("handled") || name.equals("continued")) {
+            return true;
+        }
+        if (name.equals("retryWhile") || name.equals("filter") || name.equals("validate") || name.equals("loopDoWhile")) {
+            return true;
+        }
+        return false;
+    }
+
     @SuppressWarnings("unchecked")
     private static FieldSource<JavaClassSource> getField(JavaClassSource clazz, Block block, SimpleName ref) {
         String fieldName = ref.getIdentifier();

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterSimpleRouteBuilderConfigureTest.java
----------------------------------------------------------------------
diff --git a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterSimpleRouteBuilderConfigureTest.java b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterSimpleRouteBuilderConfigureTest.java
index 14d63af..a3f6f55 100644
--- a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterSimpleRouteBuilderConfigureTest.java
+++ b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterSimpleRouteBuilderConfigureTest.java
@@ -46,8 +46,10 @@ public class RoasterSimpleRouteBuilderConfigureTest {
             LOG.info("  Line: " + findLineNumber(simple.getPosition()));
         }
         Assert.assertEquals("${body} > 100", list.get(0).getElement());
+        Assert.assertEquals(true, list.get(0).getPredicate());
         Assert.assertEquals(27, findLineNumber(list.get(0).getPosition()));
         Assert.assertEquals("${body} > 200", list.get(1).getElement());
+        Assert.assertEquals(true, list.get(1).getPredicate());
         Assert.assertEquals(30, findLineNumber(list.get(1).getPosition()));
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java
----------------------------------------------------------------------
diff --git a/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java b/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java
index 9d41a9d..3c8eca2 100644
--- a/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java
+++ b/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java
@@ -400,8 +400,15 @@ public class ValidateMojo extends AbstractExecMojo {
 
         int simpleErrors = 0;
         for (CamelSimpleExpressionDetails detail : simpleExpressions) {
-            getLog().debug("Validating simple expression: " + detail.getSimple());
-            SimpleValidationResult result = catalog.validateSimpleExpression(detail.getSimple());
+            SimpleValidationResult result;
+            boolean predicate = detail.isPredicate();
+            if (predicate) {
+                getLog().debug("Validating simple predicate: " + detail.getSimple());
+                result = catalog.validateSimplePredicate(detail.getSimple());
+            } else {
+                getLog().debug("Validating simple expression: " + detail.getSimple());
+                result = catalog.validateSimpleExpression(detail.getSimple());
+            }
             if (!result.isSuccess()) {
                 simpleErrors++;
 

http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java
----------------------------------------------------------------------
diff --git a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java
index 241361e..03efe2a 100644
--- a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java
+++ b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java
@@ -33,6 +33,15 @@ import java.lang.annotation.Target;
 public @interface Metadata {
 
     /**
+     * The expression mode to use as either expression or predicate.
+     */
+    enum ExpressionMode {
+
+        expression, predicate;
+
+    }
+
+    /**
      * To define one or more labels.
      * <p/>
      * Multiple labels can be defined as a comma separated value.
@@ -76,4 +85,12 @@ public @interface Metadata {
      */
     boolean secret() default false;
 
+    /**
+     * Used by EIPs to mark whether an expression is used as expression or predicate.
+     * <p/>
+     * For example a message transformer uses the {@link ExpressionMode#expression} mode,
+     * while a content based router uses {@link ExpressionMode#predicate}.
+     */
+    ExpressionMode expressionMode() default ExpressionMode.expression;
+
 }