| = JavaScript Language |
| :doctitle: JavaScript |
| :shortname: js |
| :artifactid: camel-javascript |
| :description: Evaluates a JavaScript expression |
| :since: 3.20 |
| :supportlevel: Stable |
| :tabs-sync-option: |
| |
| *Since Camel {since}* |
| |
| Camel allows https://www.graalvm.org/javascript/[JavaScript] to be |
| used as an xref:manual::expression.adoc[Expression] or xref:manual::predicate.adoc[Predicate] |
| in Camel routes. |
| |
| For example, you can use JavaScript in a xref:manual::predicate.adoc[Predicate] |
| with the xref:eips:choice-eip.adoc[Content-Based Router] EIP. |
| |
| == JavaScript Options |
| |
| |
| // language options: START |
| include::partial$language-options.adoc[] |
| // language 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 |
| |camelContext |CamelContext |the CamelContext |
| |exchangeId |String |the exchange id |
| |message |Message |the message |
| |request |Message |the message (same as `message`) |
| |body |Object |the message body |
| |header |Map |the message headers (same as `headers`) |
| |headers |Map |the message headers |
| |exchangeProperty |Map |the exchange properties (same as `exchangeProperties`) |
| |exchangeProperties |Map |the exchange properties |
| |variable |Map |the exchange variables (same as `variables`) |
| |variables |Map |the exchange variables |
| |exception |Exception |the exception if the exchange failed (or the caught exception in an error handler), otherwise `null` |
| |context |CamelContext |*Deprecated* use `camelContext` |
| |properties |Map |*Deprecated* use `exchangeProperties` |
| |======================================================================= |
| |
| The variables have the same names as in the xref:groovy-language.adoc[Groovy] language, except `in`, which is a |
| reserved word in JavaScript (use `message` or `request`), and the deprecated `out` and `response`. The deprecated |
| `context` and `properties` still work. |
| |
| The `variable` and `variables` bindings are the exchange-scoped variables (for example set with the |
| xref:eips:setVariable-eip.adoc[Set Variable] EIP). Global and route variables, such as `global:foo`, |
| are not in this map; use `exchange.getVariable('global:foo')` for those. |
| |
| == Examples |
| |
| A JavaScript predicate in a xref:eips:choice-eip.adoc[Content-Based Router]: |
| |
| [source,yaml] |
| ---- |
| - route: |
| from: |
| uri: direct:orders |
| steps: |
| - choice: |
| when: |
| - expression: |
| js: |
| expression: "headers.get('priority') == 'high'" |
| steps: |
| - to: |
| uri: direct:fast |
| otherwise: |
| steps: |
| - to: |
| uri: direct:normal |
| ---- |
| |
| A JavaScript expression that sets the message body from the body and a header: |
| |
| [source,yaml] |
| ---- |
| - route: |
| from: |
| uri: direct:greet |
| steps: |
| - setBody: |
| expression: |
| js: |
| expression: "'Hello ' + body + ', your priority is ' + headers.get('priority')" |
| - to: |
| uri: log:greeting |
| ---- |
| |
| |
| == Dependencies |
| |
| To use JavaScript in your Camel routes, you need to add the dependency on |
| *camel-javascript*, which implements the JavaScript language (JavaScript with GraalVM). |
| |
| If you use Maven, you could add the following to your pom.xml, |
| substituting the version number for the latest & greatest release. |
| |
| [source,xml] |
| ------------------------------------- |
| <dependency> |
| <groupId>org.apache.camel</groupId> |
| <artifactId>camel-javascript</artifactId> |
| <version>x.x.x</version> |
| </dependency> |
| ------------------------------------- |