| [[language-component]] |
| = Language Component |
| :docTitle: Language |
| :artifactId: camel-core |
| :description: The language component allows you to send a message to an endpoint which executes a script by any of the supported Languages in Camel. |
| :since: 2.5 |
| :component-header: Only producer is supported |
| :core: |
| |
| *Since Camel {since}* |
| |
| The language component allows you to send Exchange |
| to an endpoint which executes a script by any of the supported |
| Languages in Camel. + |
| By having a component to execute language scripts, it allows more |
| dynamic routing capabilities. For example by using the |
| Routing Slip or xref:{eip-vc}:eips:dynamicRouter-eip.adoc[Dynamic |
| Router] EIPs you can send messages to `language` endpoints where the |
| script is dynamic defined as well. |
| |
| This component is provided out of the box in `camel-core` and hence no |
| additional JARs is needed. You only have to include additional Camel |
| components if the language of choice mandates it, such as using |
| xref:languages:groovy-language.adoc[Groovy] or xref:languages:groovy-language.adoc[JavaScript] languages. |
| |
| == URI format |
| |
| [source] |
| ---- |
| language://languageName[:script][?options] |
| ---- |
| |
| And from Camel 2.11 onwards you can refer to an external resource for |
| the script using same notation as supported by the other |
| xref:language-component.adoc[Language]s in Camel |
| |
| [source] |
| ---- |
| language://languageName:resource:scheme:location][?options] |
| ---- |
| |
| == URI Options |
| |
| |
| // component options: START |
| The Language component has no options. |
| // component options: END |
| |
| |
| |
| // endpoint options: START |
| The Language endpoint is configured using URI syntax: |
| |
| ---- |
| language:languageName:resourceUri |
| ---- |
| |
| with the following path and query parameters: |
| |
| === Path Parameters (2 parameters): |
| |
| |
| [width="100%",cols="2,5,^1,2",options="header"] |
| |=== |
| | Name | Description | Default | Type |
| | *languageName* | *Required* Sets the name of the language to use | | String |
| | *resourceUri* | Path to the resource, or a reference to lookup a bean in the Registry to use as the resource | | String |
| |=== |
| |
| |
| === Query Parameters (6 parameters): |
| |
| |
| [width="100%",cols="2,5,^1,2",options="header"] |
| |=== |
| | Name | Description | Default | Type |
| | *binary* (producer) | Whether the script is binary content or text content. By default the script is read as text content (eg java.lang.String) | false | boolean |
| | *cacheScript* (producer) | Whether to cache the compiled script and reuse Notice reusing the script can cause side effects from processing one Camel org.apache.camel.Exchange to the next org.apache.camel.Exchange. | false | boolean |
| | *contentCache* (producer) | Sets whether to use resource content cache or not. | false | boolean |
| | *script* (producer) | Sets the script to execute | | String |
| | *transform* (producer) | Whether or not the result of the script should be used as message body. This options is default true. | true | boolean |
| | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean |
| |=== |
| // endpoint options: END |
| |
| |
| == Message Headers |
| |
| The following message headers can be used to affect the behavior of the |
| component |
| |
| [width="100%",cols="10%,90%",options="header",] |
| |=== |
| |Header |Description |
| |
| |`CamelLanguageScript` |The script to execute provided in the header. Takes precedence over |
| script configured on the endpoint. |
| |=== |
| |
| == Examples |
| |
| For example you can use the xref:languages:simple-language.adoc[Simple] language to |
| Message Translator a message: |
| |
| In case you want to convert the message body type you can do this as |
| well: |
| |
| You can also use the xref:languages:groovy-language.adoc[Groovy] language, such as this |
| example where the input message will by multiplied with 2: |
| |
| You can also provide the script as a header as shown below. Here we use |
| xref:languages:xpath-language.adoc[XPath] language to extract the text from the `<foo>` |
| tag. |
| |
| [source,java] |
| ---- |
| Object out = producer.requestBodyAndHeader("language:xpath", "<foo>Hello World</foo>", Exchange.LANGUAGE_SCRIPT, "/foo/text()"); |
| assertEquals("Hello World", out); |
| ---- |
| |
| == Loading scripts from resources |
| |
| *Since Camel 2.9* |
| |
| You can specify a resource uri for a script to load in either the |
| endpoint uri, or in the `Exchange.LANGUAGE_SCRIPT` header. + |
| The uri must start with one of the following schemes: file:, |
| classpath:, or http: |
| |
| For example to load a script from the classpath: |
| |
| By default the script is loaded once and cached. However you can disable |
| the `contentCache` option and have the script loaded on each |
| evaluation. + |
| For example if the file myscript.txt is changed on disk, then the |
| updated script is used: |
| |
| From *Camel 2.11* onwards you can refer to the resource similar to the |
| other xref:language-component.adoc[Language]s in Camel by prefixing with |
| `"resource:"` as shown below: |