[[Expression-Expressions]]
Expressions
~~~~~~~~~~~

Expressions and Predicates can then be used to
create the various link:enterprise-integration-patterns.html[Enterprise
Integration Patterns] in the DSL or
Xml Configuration like the
Recipient List. +
 To support dynamic rules Camel supports pluggable
http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Expression.html[Expression]
strategies using a variety of different Languages.

[[Expression-API]]
API
^^^

If you are outside of the DSL and want to create your own
expressions you can either implement the
http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Expression.html[Expression
interface], reuse one of the other builders or try the
http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/builder/ExpressionBuilder.html[ExpressionBuilder
class].

[[Expression-Expression]]
Expression
++++++++++

The API for a Camel Expression is defined in the
`org.apache.camel.Expression` interface as shown:

[source,java]
-------------------------------------------------------------------------------
public interface Expression {

    /**
     * Returns the value of the expression on the given exchange
     *
     * @param exchange the message exchange on which to evaluate the expression
     * @param type the expected type of the evaluation result
     * @return the value of the expression
     */
    <T> T evaluate(Exchange exchange, Class<T> type);
}
-------------------------------------------------------------------------------

[[Expression-Predicate]]
Predicate
+++++++++

The API for a Camel Predicate is defined in the
`org.apache.camel.Predicate` interface as shown:

[source,java]
-------------------------------------------------------------------------------
public interface Predicate {

    /**
     * Evaluates the predicate on the message exchange and returns true if this
     * exchange matches the predicate
     * 
     * @param exchange the message exchange
     * @return true if the predicate matches
     */
    boolean matches(Exchange exchange);

}
-------------------------------------------------------------------------------

[[Expression-ExpressionLanguages]]
Expression Languages
^^^^^^^^^^^^^^^^^^^^

The following languages are supported out of the box

* <<bean-language,Bean Language>> for using Java for expressions
* <<constant-language,Constant>>
* the unified <<el-language,EL>> from JSP and JSF
* <<header-language,Header>>
* <<jsonpath-language,JSonPath>>
* <<jxpath-language,JXPath>>
* <<mvel-component,Mvel>>
* <<ognl-language,OGNL>>
* <<ref-language,Ref Language>>
* ExchangeProperty
/ Property
* Scripting Languages such as
** BeanShell
** JavaScript
** <<groovy-language,Groovy>>
** <<python-language,Python>>
** <<php-language,PHP>>
** <<ruby-language,Ruby>>
* <<simple-language,Simple>>
** <<file-language,File Language>>
* <<spel-language,Spring Expression Language>>
* <<sql-component,SQL>>
* Tokenizer
* <<xpath-language,XPath>>
* <<xquery-component,XQuery>>
* VTD-XML

Most of these languages is also supported used as
link:annotation-based-expression-language.html[Annotation Based
Expression Language].

[[Expression-UsingExpressionsinyourIDE]]
Using Expressions in your IDE
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

To use different expression and predicates in your IDE you need to
perform a static import of the builder class for the language(s) you
wish to use.

[width="100%",cols="20%,80%",options="header",]
|=======================================================================
|Language(s) |Builder class to import

|Scripting Languages such as
BeanShell, JavaScript,
<<groovy-language,Groovy>>, <<groovy-language,PHP>>, <<groovy-language,Python>>
and <<ruby-language,Ruby>> |http://camel.apache.org/maven/current/camel-script/apidocs/org/apache/camel/builder/script/ScriptBuilder.html[org.apache.camel.builder.script.ScriptBuilder]

|<<sql-component,SQL>> |http://camel.apache.org/maven/current/camel-josql/apidocs/org/apache/camel/builder/sql/SqlBuilder.html[org.apache.camel.builder.josql.SqlBuilder]

|<<xpath-language,XPath>> |http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/builder/xml/XPathBuilder.html[org.apache.camel.builder.xml.XPathBuilder]

|<<xquery-component,XQuery>> |http://camel.apache.org/maven/current/camel-saxon/apidocs/org/apache/camel/builder/saxon/XQueryBuilder.html[org.apache.camel.builder.saxon.XQueryBuilder]
|=======================================================================

[[Expression-SeeAlso]]
See Also
++++++++

* Predicate

