# Language

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 SlipRouting Slip or Dynamic RouterDynamic 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 Groovy or JavaScript languages.

## URI format

    language://languageName[:script][?options]

## URI Options

The component supports the following options.

Name | Default Value | Type | Description
--- | --- | --- | ---
`languageName` | `null` | `String` | The name of the Language to use, such as `simple`, `groovy`, `javascript` etc. This option is mandatory.
`script` | `null` | `String` | The script to execute.
`transform` | `true` | `boolean` | Whether or not the result of the script should be used as the new message body. By setting to `false` the script is executed but the result of the script is discarded.

## Message Headers

The following message headers can be used to affect the behavior of the component

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 Simple language to Message TranslatorMessage Translator a message:

    from("direct:start").to("language:simple:Hello ${body}").to("mock:result");

In case you want to convert the message body type you can do this as well:

    from("direct:start").to("language:simple:${mandatoryBodyAs(String)}").to("mock:result");

You can also use the Groovy language, such as this example where the input message will by multiplied with 2:

    from("direct:start").to("language:groovy:request.body * 2").to("mock:result");

You can also provide the script as a header as shown below. Here we use XPath language to extract the text from the `<foo>` tag.

    Object out = producer.requestBodyAndHeader("language:xpath", "<foo>Hello World</foo>", Exchange.LANGUAGE_SCRIPT, "/foo/text()");
    assertEquals("Hello World", out);

- Languages

- Routing SlipRouting Slip

- Dynamic RouterDynamic Router