--- apiVersion: v1 kind: List items: - apiVersion: v1 kind: ConfigMap metadata: labels: funktion.fabric8.io/kind: Connector provider: fabric8 project: connector-language version: 1.1.29 group: io.fabric8.funktion.connector name: language data: deployment.yml: | --- apiVersion: extensions/v1beta1 kind: Deployment metadata: labels: funktion.fabric8.io/kind: Subscription connector: language spec: replicas: 1 template: metadata: labels: funktion.fabric8.io/kind: Subscription connector: language spec: containers: - image: fabric8/connector-language:1.1.29 name: connector schema.yml: | --- component: kind: component scheme: language syntax: language:languageName:resourceUri title: Language 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. label: core,script deprecated: false async: false producerOnly: true javaType: org.apache.camel.component.language.LanguageComponent groupId: org.apache.camel artifactId: camel-core version: 2.18.1 componentProperties: {} properties: languageName: kind: path group: producer required: true type: string javaType: java.lang.String enum: - bean - constant - el - exchangeProperty - file - groovy - header - javascript - jsonpath - jxpath - mvel - ognl - php - python - ref - ruby - simple - spel - sql - terser - tokenize - xpath - xquery - xtokenize deprecated: false secret: false description: Sets the name of the language to use resourceUri: kind: path group: producer required: false type: string javaType: java.lang.String deprecated: false secret: false description: Path to the resource or a reference to lookup a bean in the Registry to use as the resource binary: kind: parameter group: producer type: boolean javaType: boolean deprecated: false secret: false defaultValue: false description: Whether the script is binary content or text content. By default the script is read as text content (eg java.lang.String) cacheScript: kind: parameter group: producer type: boolean javaType: boolean deprecated: false secret: false defaultValue: false description: 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. contentCache: kind: parameter group: producer type: boolean javaType: boolean deprecated: false secret: false defaultValue: false description: Sets whether to use resource content cache or not. script: kind: parameter group: producer type: string javaType: java.lang.String deprecated: false secret: false description: Sets the script to execute transform: kind: parameter group: producer type: boolean javaType: boolean deprecated: false secret: false defaultValue: true description: Whether or not the result of the script should be used as message body. This options is default true. synchronous: kind: parameter group: advanced label: advanced type: boolean javaType: boolean deprecated: false secret: false defaultValue: false description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported). documentation.adoc: |+ [[Language-Language]] Language ~~~~~~~~ *Available as of Camel 2.5* The language component allows you to send link:exchange.html[Exchange] to an endpoint which executes a script by any of the supported link:languages.html[Languages] in Camel. + By having a component to execute language scripts, it allows more dynamic routing capabilities. For example by using the link:routing-slip.html[Routing Slip] or link:dynamic-router.html[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 link:groovy.html[Groovy] or link:javascript.html[JavaScript] languages. [[Language-URIformat]] URI format ^^^^^^^^^^ [source,java] ------------------------------------------ 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 link:language.html[Language]s in Camel [source,java] ----------------------------------------------------------- language://languageName:resource:scheme:location][?options] ----------------------------------------------------------- [[Language-URIOptions]] URI Options ^^^^^^^^^^^ // component options: START The Language component has no options. // component options: END // endpoint options: START The Language component supports 8 endpoint options which are listed below: {% raw %} [width="100%",cols="2,1,1m,1m,5",options="header"] |======================================================================= | Name | Group | Default | Java Type | Description | languageName | producer | | String | *Required* Sets the name of the language to use | resourceUri | producer | | String | Path to the resource or a reference to lookup a bean in the Registry to use as the resource | binary | producer | false | boolean | Whether the script is binary content or text content. By default the script is read as text content (eg java.lang.String) | cacheScript | producer | false | boolean | 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. | contentCache | producer | false | boolean | Sets whether to use resource content cache or not. | script | producer | | String | Sets the script to execute | transform | producer | true | boolean | Whether or not the result of the script should be used as message body. This options is default true. | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported). |======================================================================= {% endraw %} // endpoint options: END [[Language-MessageHeaders]] 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. |======================================================================= [[Language-Examples]] Examples ^^^^^^^^ For example you can use the link:simple.html[Simple] language to link:message-translator.html[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 link:groovy.html[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 link:xpath.html[XPath] language to extract the text from the `` tag. [source,java] -------------------------------------------------------------------------------------------------------------------------------- Object out = producer.requestBodyAndHeader("language:xpath", "Hello World", Exchange.LANGUAGE_SCRIPT, "/foo/text()"); assertEquals("Hello World", out); -------------------------------------------------------------------------------------------------------------------------------- [[Language-Loadingscriptsfromresources]] Loading scripts from resources ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ *Available as of 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 link:language.html[Language]s in Camel by prefixing with `"resource:"` as shown below: [[Language-SeeAlso]] See Also ^^^^^^^^ * link:configuring-camel.html[Configuring Camel] * link:component.html[Component] * link:endpoint.html[Endpoint] * link:getting-started.html[Getting Started] * link:languages.html[Languages] * link:routing-slip.html[Routing Slip] * link:dynamic-router.html[Dynamic Router] * link:script.html[Script]