[[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:
