| [[ScriptingLanguages-ScriptingLanguages]] |
| Scripting Languages |
| ~~~~~~~~~~~~~~~~~~~ |
| |
| Camel supports a number of scripting languages which can be used to |
| create an link:expression.html[Expression] or |
| link:predicate.html[Predicate] via the standard |
| http://jcp.org/en/jsr/detail?id=223[JSR 223] which is a standard part of |
| Java 6. |
| |
| The following scripting languages are integrated into the DSL: |
| |
| [width="100%",cols="50%,50%",options="header",] |
| |======================================================================= |
| |Language |DSL keyword |
| |
| |EL |`el` |
| |
| |Groovy |`groovy` |
| |
| |JavaScript |`javaScript` |
| |
| |JoSQL |`sql` |
| |
| |JXPath |`jxpath` |
| |
| |MVEL |`mvel` |
| |
| |OGNL |`ognl` |
| |
| |PHP |`php` |
| |
| |Python |`python` |
| |
| |Ruby |`ruby` |
| |
| |XPath |`xpath` |
| |
| |XQuery |`xquery` |
| |======================================================================= |
| |
| However any http://jcp.org/en/jsr/detail?id=223[JSR 223] scripting |
| language can be used using the generic DSL methods. |
| |
| [[ScriptingLanguages-ScriptContext]] |
| ScriptContext |
| ^^^^^^^^^^^^^ |
| |
| The JSR-223 scripting languages ScriptContext is pre configured with the |
| following attributes all set at `ENGINE_SCOPE`: |
| |
| [width="100%",cols="30%,30%,40%",options="header",] |
| |======================================================================= |
| |Attribute |Type |Value |
| |
| |context |`org.apache.camel.CamelContext` |The Camel Context ( It cannot be used in groovy) |
| |
| |camelContext |`org.apache.camel.CamelContext` |The Camel Context |
| |
| |exchange |`org.apache.camel.Exchange` |The current Exchange |
| |
| |request |`org.apache.camel.Message` |The message (IN message) |
| |
| |response |`org.apache.camel.Message` |*Deprecated*: The OUT message. The OUT message if null by default. Use |
| IN message instead. |
| |
| |properties |`org.apache.camel.builder.script.PropertiesFunction` |*Camel 2.9:* Function with a `resolve` method to make it easier to use |
| Camels link:properties.html[Properties] component from scripts. See |
| further below for example. |
| |======================================================================= |
| |
| See link:scripting-languages.html[Scripting Languages] for the list of |
| languages with explicit DSL support. |
| |
| [[ScriptingLanguages-AdditionalargumentstoScriptingEngine]] |
| Additional arguments to ScriptingEngine |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| *Available as of Camel 2.8* |
| |
| You can provide additional arguments to the `ScriptingEngine` using a |
| header on the Camel message with the key `CamelScriptArguments`. |
| See this example: |
| |
| [[ScriptingLanguages-Usingpropertiesfunction]] |
| Using properties function |
| ^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| *Available as of Camel 2.9* |
| |
| If you need to use the link:properties.html[Properties] component from a |
| script to lookup property placeholders, then its a bit cumbersome to do |
| so. For example to set a header name myHeader with a value from a property |
| placeholder, which key is provided in a header named "foo". |
| |
| {% raw %} |
| [source,java] |
| -------------------------------------------------------------------------------------------------------------- |
| .setHeader("myHeader").groovy("context.resolvePropertyPlaceholders('{{' + request.headers.get('foo') + '}}')") |
| -------------------------------------------------------------------------------------------------------------- |
| {% endraw %} |
| |
| From Camel 2.9 onwards you can now use the properties function and the |
| same example is simpler: |
| |
| [source,java] |
| ------------------------------------------------------------------------------- |
| .setHeader("myHeader").groovy("properties.resolve(request.headers.get('foo'))") |
| ------------------------------------------------------------------------------- |
| |
| [[ScriptingLanguages-Loadingscriptfromexternalresource]] |
| Loading script from external resource |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| *Available as of 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").groovy("resource:classpath:mygroovy.groovy") |
| ------------------------------------------------------------------- |
| |
| [[ScriptingLanguages-Howtogettheresultfrommultiplestatementsscript]] |
| How to get the result from multiple statements script |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| *Available as of Camel 2.14* |
| |
| As the scripteengine evale method just return a Null if it runs a |
| multiple statments script. Camel now look up the value of script result |
| by using the key of "result" from the value set. If you have multiple |
| statements script, you need to make sure you set the value of result |
| variable as the script return value. |
| |
| [source,text] |
| ------------------------------------------------------------- |
| bar = "baz"; |
| # some other statements ... |
| # camel take the result value as the script evaluation result |
| result = body * 2 + 1 |
| ------------------------------------------------------------- |
| |
| |
| |
| [[ScriptingLanguages-Dependencies]] |
| Dependencies |
| ^^^^^^^^^^^^ |
| |
| To use scripting languages in your camel routes you need to add the a |
| dependency on *camel-script* which integrates the JSR-223 scripting |
| engine. |
| |
| If you use maven you could just add the following to your pom.xml, |
| substituting the version number for the latest & greatest release (see |
| link:download.html[the download page for the latest versions]). |
| |
| [source,xml] |
| --------------------------------------- |
| <dependency> |
| <groupId>org.apache.camel</groupId> |
| <artifactId>camel-script</artifactId> |
| <version>x.x.x</version> |
| </dependency> |
| --------------------------------------- |
| |
| [[ScriptingLanguages-SeeAlso]] |
| See Also |
| ~~~~~~~~ |
| |
| * link:languages.html[Languages] |
| * link:dsl.html[DSL] |
| * link:xml-configuration.html[Xml Configuration] |
| |