<commit_before>[[ognl-language]]
= OGNL Language

*Since Camel 1.1*

Camel allows http://commons.apache.org/proper/commons-ognl/[OGNL] to be
used as an Expression or
Predicate the DSL or
Xml Configuration.

You could use OGNL to create an Predicate in a
Message Filter or as an
Expression for a
Recipient List

You can use OGNL dot notation to invoke operations. If you for instance
have a body that contains a POJO that has a `getFamilyName` method then
you can construct the syntax as follows:

[source,java]
----------------------------------------
"request.body.familyName"
   // or 
"getRequest().getBody().getFamilyName()"
----------------------------------------

== OGNL Options


// language options: START
The OGNL language supports 1 options, which are listed below.



[width="100%",cols="2,1m,1m,6",options="header"]
|===
| Name | Default | Java Type | Description
| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
|===
// language options: END
// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-ognl-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 2 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.language.ognl.enabled* | Whether to enable auto configuration of the ognl language. This is enabled by default. |  | Boolean
| *camel.language.ognl.trim* | Whether to trim the value to remove leading and trailing whitespaces and line breaks | true | Boolean
|===
// spring-boot-auto-configure options: END




== Variables

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Variable |Type |Description

|*this* |Exchange |the Exchange is the root object

|exchange |Exchange |the Exchange object

|exception |Throwable |the Exchange exception (if any)

|exchangeId |String |the exchange id

|fault |Message |the Fault message (if any)

|request |Message |the exchange.in message

|response |Message |the exchange.out message (if any)

|properties |Map |the exchange properties

|property(name) |Object |the property by the given name

|property(name, type) |Type |the property by the given name as the given type
|=======================================================================

== Samples

For example you could use OGNL inside a xref:manual::filter-eip.adoc[Message
Filter] in XML

[source,java]
---------------------------------------------
<route>
  <from uri="seda:foo"/>
  <filter>
    <ognl>request.headers.foo == 'bar'</ognl>
    <to uri="seda:bar"/>
  </filter>
</route>
---------------------------------------------

And the sample using Java DSL:

[source,java]
---------------------------------------------------------------------------------
   from("seda:foo").filter().ognl("request.headers.foo == 'bar'").to("seda:bar");
---------------------------------------------------------------------------------

== Loading script from external resource

*Since Camel 2.11*

You can externalize the script and have Camel load it from a resource
such as `"classpath:"`, `"file:"`, or `"http:"`. +
 This is done using the following syntax: `"resource:scheme:location"`,
eg to refer to a file on the classpath you can do:

[source,java]
------------------------------------------------------------
.setHeader("myHeader").ognl("resource:classpath:myognl.txt")
------------------------------------------------------------

== Dependencies

To use OGNL in your camel routes you need to add the a dependency on
*camel-ognl* which implements the OGNL language.

If you use maven you could just add the following to your pom.xml,
substituting the version number for the latest & greatest release (see
the download page for the latest versions).

[source,java]
-------------------------------------
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-ognl</artifactId>
  <version>x.x.x</version>
</dependency>
-------------------------------------

Otherwise, you'll also need
http://repo2.maven.org/maven2/org/apache/servicemix/bundles/org.apache.servicemix.bundles.ognl/2.7.3_4/org.apache.servicemix.bundles.ognl-2.7.3_4.jar[OGNL]<commit_msg>CAMEL-14412 - Maven central now requires HTTPS<commit_after>[[ognl-language]]
= OGNL Language

*Since Camel 1.1*

Camel allows http://commons.apache.org/proper/commons-ognl/[OGNL] to be
used as an Expression or
Predicate the DSL or
Xml Configuration.

You could use OGNL to create an Predicate in a
Message Filter or as an
Expression for a
Recipient List

You can use OGNL dot notation to invoke operations. If you for instance
have a body that contains a POJO that has a `getFamilyName` method then
you can construct the syntax as follows:

[source,java]
----------------------------------------
"request.body.familyName"
   // or 
"getRequest().getBody().getFamilyName()"
----------------------------------------

== OGNL Options


// language options: START
The OGNL language supports 1 options, which are listed below.



[width="100%",cols="2,1m,1m,6",options="header"]
|===
| Name | Default | Java Type | Description
| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
|===
// language options: END
// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-ognl-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 2 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.language.ognl.enabled* | Whether to enable auto configuration of the ognl language. This is enabled by default. |  | Boolean
| *camel.language.ognl.trim* | Whether to trim the value to remove leading and trailing whitespaces and line breaks | true | Boolean
|===
// spring-boot-auto-configure options: END




== Variables

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Variable |Type |Description

|*this* |Exchange |the Exchange is the root object

|exchange |Exchange |the Exchange object

|exception |Throwable |the Exchange exception (if any)

|exchangeId |String |the exchange id

|fault |Message |the Fault message (if any)

|request |Message |the exchange.in message

|response |Message |the exchange.out message (if any)

|properties |Map |the exchange properties

|property(name) |Object |the property by the given name

|property(name, type) |Type |the property by the given name as the given type
|=======================================================================

== Samples

For example you could use OGNL inside a xref:manual::filter-eip.adoc[Message
Filter] in XML

[source,java]
---------------------------------------------
<route>
  <from uri="seda:foo"/>
  <filter>
    <ognl>request.headers.foo == 'bar'</ognl>
    <to uri="seda:bar"/>
  </filter>
</route>
---------------------------------------------

And the sample using Java DSL:

[source,java]
---------------------------------------------------------------------------------
   from("seda:foo").filter().ognl("request.headers.foo == 'bar'").to("seda:bar");
---------------------------------------------------------------------------------

== Loading script from external resource

*Since Camel 2.11*

You can externalize the script and have Camel load it from a resource
such as `"classpath:"`, `"file:"`, or `"http:"`. +
 This is done using the following syntax: `"resource:scheme:location"`,
eg to refer to a file on the classpath you can do:

[source,java]
------------------------------------------------------------
.setHeader("myHeader").ognl("resource:classpath:myognl.txt")
------------------------------------------------------------

== Dependencies

To use OGNL in your camel routes you need to add the a dependency on
*camel-ognl* which implements the OGNL language.

If you use maven you could just add the following to your pom.xml,
substituting the version number for the latest & greatest release (see
the download page for the latest versions).

[source,java]
-------------------------------------
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-ognl</artifactId>
  <version>x.x.x</version>
</dependency>
-------------------------------------

Otherwise, you'll also need
https://repo1.maven.org/maven2/org/apache/servicemix/bundles/org.apache.servicemix.bundles.ognl/2.7.3_4/org.apache.servicemix.bundles.ognl-2.7.3_4.jar[OGNL]
{'fraction_non_alphanumeric': 0.2498904949627683, 'fraction_numerical': 0.009307928164695577, 'mean_word_length': 2.7292772560228666, 'pattern_counts': {'":': 0, '<': 53, '<?xml version=': 0, '>': 53, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 4}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5212974', 'n_tokens_mistral': 2598, 'n_tokens_neox': 2445, 'n_words': 862}