This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch js
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 781f7c28554f46ea33d24aa497e924a7444f3174
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Sat Nov 19 11:02:47 2022 +0100

    CAMEL-18718: camel-javascript
---
 bom/camel-bom/pom.xml                              |  5 ++
 .../org/apache/camel/catalog/languages.properties  |  1 +
 .../org/apache/camel/catalog/languages/js.json     | 25 ++++++
 .../org/apache/camel/catalog/models.properties     |  1 +
 .../org/apache/camel/catalog/models/aggregate.json |  8 +-
 .../org/apache/camel/catalog/models/delay.json     |  2 +-
 .../apache/camel/catalog/models/dynamicRouter.json |  2 +-
 .../org/apache/camel/catalog/models/enrich.json    |  2 +-
 .../org/apache/camel/catalog/models/filter.json    |  2 +-
 .../camel/catalog/models/idempotentConsumer.json   |  2 +-
 .../org/apache/camel/catalog/models/js.json        | 22 ++++++
 .../org/apache/camel/catalog/models/loop.json      |  2 +-
 .../apache/camel/catalog/models/onException.json   |  6 +-
 .../apache/camel/catalog/models/pollEnrich.json    |  2 +-
 .../camel/catalog/models/propertyExpression.json   |  2 +-
 .../apache/camel/catalog/models/recipientList.json |  2 +-
 .../apache/camel/catalog/models/resequence.json    |  2 +-
 .../apache/camel/catalog/models/routingSlip.json   |  2 +-
 .../org/apache/camel/catalog/models/script.json    |  2 +-
 .../org/apache/camel/catalog/models/setBody.json   |  2 +-
 .../org/apache/camel/catalog/models/setHeader.json |  2 +-
 .../apache/camel/catalog/models/setProperty.json   |  2 +-
 .../org/apache/camel/catalog/models/sort.json      |  2 +-
 .../org/apache/camel/catalog/models/split.json     |  2 +-
 .../org/apache/camel/catalog/models/sticky.json    |  2 +-
 .../org/apache/camel/catalog/models/throttle.json  |  4 +-
 .../org/apache/camel/catalog/models/transform.json |  2 +-
 .../org/apache/camel/catalog/models/validate.json  |  2 +-
 .../org/apache/camel/catalog/models/when.json      |  2 +-
 .../catalog/models/whenSkipSendToEndpoint.json     |  2 +-
 .../apache/camel/catalog/schemas/camel-spring.xsd  | 91 ++++++++++++++++++++++
 .../org/apache/camel/main/languages.properties     |  1 +
 .../modules/languages/examples/json/js.json        |  1 +
 docs/components/modules/languages/nav.adoc         |  1 +
 .../modules/languages/pages/js-language.adoc       |  1 +
 .../deserializers/ExpressionDeserializers.java     |  5 ++
 .../dsl/yaml/deserializers/ModelDeserializers.java | 75 ++++++++++++++++++
 .../deserializers/ModelDeserializersResolver.java  |  2 +
 .../generated/resources/schema/camel-yaml-dsl.json | 31 ++++++++
 .../generated/resources/schema/camelYamlDsl.json   | 31 ++++++++
 40 files changed, 324 insertions(+), 31 deletions(-)

diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index 9519ece2eaf..dc1f5912422 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -1153,6 +1153,11 @@
         <artifactId>camel-java-joor-dsl</artifactId>
         <version>${project.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-javascript</artifactId>
+        <version>${project.version}</version>
+      </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
         <artifactId>camel-jaxb</artifactId>
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages.properties
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages.properties
index 6446daa6c39..8aa9f4d1a08 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages.properties
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages.properties
@@ -9,6 +9,7 @@ header
 hl7terser
 joor
 jq
+js
 jsonpath
 mvel
 ognl
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/js.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/js.json
new file mode 100644
index 00000000000..3685b166e79
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/js.json
@@ -0,0 +1,25 @@
+{
+  "language": {
+    "kind": "language",
+    "name": "js",
+    "title": "JavaScript",
+    "description": "Evaluates a JavaScript expression.",
+    "deprecated": false,
+    "firstVersion": "3.20.0",
+    "label": "language,javascript",
+    "javaType": "org.apache.camel.language.js.JavaScriptLanguage",
+    "supportLevel": "Experimental",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-javascript",
+    "version": "3.20.0-SNAPSHOT",
+    "modelName": "js",
+    "modelJavaType": "org.apache.camel.model.language.JavaScriptExpression"
+  },
+  "properties": {
+    "expression": { "kind": "value", "displayName": "Expression", "required": 
true, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The expression value in 
your chosen language syntax" },
+    "resultType": { "kind": "attribute", "displayName": "Result Type", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the class of the result type (type from output)" },
+    "headerName": { "kind": "attribute", "displayName": "Header Name", 
"label": "advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of header to use as input, instead of the message body It 
has as higher precedent than the propertyName if both are set." },
+    "trim": { "kind": "attribute", "displayName": "Trim", "label": "advanced", 
"required": false, "type": "boolean", "javaType": "java.lang.Boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether to trim the value to remove leading and trailing 
whitespaces and line breaks" },
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the id of this node" }
+  }
+}
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
index 2b523bcd46f..7f67f88211a 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
@@ -76,6 +76,7 @@ jacksonXml
 jaxb
 joor
 jq
+js
 json
 jsonApi
 jsonpath
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/aggregate.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/aggregate.json
index 577644e3213..d2380091e9b 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/aggregate.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/aggregate.json
@@ -12,10 +12,10 @@
     "output": false
   },
   "properties": {
-    "correlationExpression": { "kind": "expression", "displayName": 
"Correlation Expression", "required": true, "type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secre [...]
-    "completionPredicate": { "kind": "expression", "displayName": "Completion 
Predicate", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ 
"constant", "csimple", "datasonnet", "exchangeProperty", "groovy", "header", 
"hl7terser", "joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", 
"python", "ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" 
], "deprecated": false, "autowir [...]
-    "completionTimeoutExpression": { "kind": "expression", "displayName": 
"Completion Timeout Expression", "label": "advanced", "required": false, 
"type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated" [...]
-    "completionSizeExpression": { "kind": "expression", "displayName": 
"Completion Size Expression", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", 
"oneOf": [ "constant", "csimple", "datasonnet", "exchangeProperty", "groovy", 
"header", "hl7terser", "joor", "jq", "jsonpath", "language", "method", "mvel", 
"ognl", "python", "ref", "simple", "spel", "tokenize", "xpath", "xquery", 
"xtokenize" ], "deprecated": fals [...]
+    "correlationExpression": { "kind": "expression", "displayName": 
"Correlation Expression", "required": true, "type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false,  [...]
+    "completionPredicate": { "kind": "expression", "displayName": "Completion 
Predicate", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ 
"constant", "csimple", "datasonnet", "exchangeProperty", "groovy", "header", 
"hl7terser", "joor", "jq", "js", "jsonpath", "language", "method", "mvel", 
"ognl", "python", "ref", "simple", "spel", "tokenize", "xpath", "xquery", 
"xtokenize" ], "deprecated": false, "a [...]
+    "completionTimeoutExpression": { "kind": "expression", "displayName": 
"Completion Timeout Expression", "label": "advanced", "required": false, 
"type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], "depre 
[...]
+    "completionSizeExpression": { "kind": "expression", "displayName": 
"Completion Size Expression", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", 
"oneOf": [ "constant", "csimple", "datasonnet", "exchangeProperty", "groovy", 
"header", "hl7terser", "joor", "jq", "js", "jsonpath", "language", "method", 
"mvel", "ognl", "python", "ref", "simple", "spel", "tokenize", "xpath", 
"xquery", "xtokenize" ], "deprecated" [...]
     "optimisticLockRetryPolicy": { "kind": "element", "displayName": 
"Optimistic Lock Retry Policy", "label": "advanced", "required": false, "type": 
"object", "javaType": 
"org.apache.camel.model.OptimisticLockRetryPolicyDefinition", "deprecated": 
false, "autowired": false, "secret": false, "description": "Allows to configure 
retry settings when using optimistic locking." },
     "parallelProcessing": { "kind": "attribute", "displayName": "Parallel 
Processing", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "When aggregated are completed they are 
being send out of the aggregator. This option indicates whether or not Camel 
should use a thread pool with multiple threads for concurrency. If no custom 
thread pool has been specified then Camel cr [...]
     "optimisticLocking": { "kind": "attribute", "displayName": "Optimistic 
Locking", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Turns on using optimistic locking, which 
requires the aggregationRepository being used, is supporting this by 
implementing org.apache.camel.spi.OptimisticLockingAggregationRepository ." },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/delay.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/delay.json
index 00eca477962..0315584dc70 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/delay.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/delay.json
@@ -12,7 +12,7 @@
     "output": false
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "asyncDelayed": { "kind": "attribute", "displayName": "Async Delayed", 
"label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "description": "Enables asynchronous delay which means 
the thread will not block while delaying." },
     "callerRunsWhenRejected": { "kind": "attribute", "displayName": "Caller 
Runs When Rejected", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether or not the 
caller should run the task when it was rejected by the thread pool. Is by 
default true" },
     "executorService": { "kind": "attribute", "displayName": "Executor 
Service", "label": "advanced", "required": false, "type": "object", "javaType": 
"java.util.concurrent.ExecutorService", "deprecated": false, "autowired": 
false, "secret": false, "description": "To use a custom Thread Pool if 
asyncDelay has been enabled." },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dynamicRouter.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dynamicRouter.json
index cc730f76bab..7623b6806e8 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dynamicRouter.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dynamicRouter.json
@@ -12,7 +12,7 @@
     "output": false
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "uriDelimiter": { "kind": "attribute", "displayName": "Uri Delimiter", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": ",", 
"description": "Sets the uri delimiter to use" },
     "ignoreInvalidEndpoints": { "kind": "attribute", "displayName": "Ignore 
Invalid Endpoints", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Ignore the invalidate 
endpoint exception when try to create a producer with that endpoint" },
     "cacheSize": { "kind": "attribute", "displayName": "Cache Size", "label": 
"advanced", "required": false, "type": "integer", "javaType": 
"java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, 
"description": "Sets the maximum size used by the 
org.apache.camel.spi.ProducerCache which is used to cache and reuse producers 
when using this dynamic router, when uris are reused. Beware that when using 
dynamic endpoints then it affects how well the cache can be utilized [...]
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/enrich.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/enrich.json
index 7ca4e860f34..c5a0c989b12 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/enrich.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/enrich.json
@@ -12,7 +12,7 @@
     "output": false
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "aggregationStrategy": { "kind": "attribute", "displayName": "Aggregation 
Strategy", "required": false, "type": "object", "javaType": 
"org.apache.camel.AggregationStrategy", "deprecated": false, "autowired": 
false, "secret": false, "description": "Sets the AggregationStrategy to be used 
to merge the reply from the external service, into a single outgoing message. 
By default Camel will use the reply from the external service as outgoing 
message." },
     "aggregationStrategyMethodName": { "kind": "attribute", "displayName": 
"Aggregation Strategy Method Name", "label": "advanced", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "This option can be used to 
explicit declare the method name to use, when using POJOs as the 
AggregationStrategy." },
     "aggregationStrategyMethodAllowNull": { "kind": "attribute", 
"displayName": "Aggregation Strategy Method Allow Null", "label": "advanced", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "If 
this option is false then the aggregate method is not used if there was no data 
to enrich. If this option is true then null values is used as the oldExchange 
(when no data to enrich), when using POJOs as [...]
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/filter.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/filter.json
index 99b67302c02..6542f53a766 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/filter.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/filter.json
@@ -12,7 +12,7 @@
     "output": true
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "asPredicate" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "asPred [...]
     "statusPropertyName": { "kind": "attribute", "displayName": "Status 
Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of exchange property to use for storing 
the status of the filtering. Setting this allows to know if the filter 
predicate evaluated as true or false." },
     "disabled": { "kind": "attribute", "displayName": "Disabled", "label": 
"advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to disable this EIP from the 
route during build time. Once an EIP has been disabled then it cannot be 
enabled later at runtime." },
     "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the id of this node" 
},
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/idempotentConsumer.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/idempotentConsumer.json
index d0c0da37468..c3364d3d512 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/idempotentConsumer.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/idempotentConsumer.json
@@ -12,7 +12,7 @@
     "output": true
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "idempotentRepository": { "kind": "attribute", "displayName": "Idempotent 
Repository", "required": false, "type": "object", "javaType": 
"org.apache.camel.spi.IdempotentRepository", "deprecated": false, "autowired": 
false, "secret": false, "description": "Sets the reference name of the message 
id repository" },
     "eager": { "kind": "attribute", "displayName": "Eager", "label": 
"advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "description": "Sets whether to eagerly add the key to 
the idempotent repository or wait until the exchange is complete. Eager is 
default enabled." },
     "completionEager": { "kind": "attribute", "displayName": "Completion 
Eager", "label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Sets whether to complete the idempotent 
consumer eager or when the exchange is done. If this option is true to complete 
eager, then the idempotent consumer will trigger its completion when the 
exchange reached the end of t [...]
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/js.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/js.json
new file mode 100644
index 00000000000..7a3f1324f03
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/js.json
@@ -0,0 +1,22 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "js",
+    "title": "JavaScript",
+    "description": "Evaluates a JavaScript expression.",
+    "deprecated": false,
+    "firstVersion": "3.20.0",
+    "label": "language,javascript",
+    "javaType": "org.apache.camel.model.language.JavaScriptExpression",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "expression": { "kind": "value", "displayName": "Expression", "required": 
true, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The expression value in 
your chosen language syntax" },
+    "resultType": { "kind": "attribute", "displayName": "Result Type", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the class of the result type (type from output)" },
+    "headerName": { "kind": "attribute", "displayName": "Header Name", 
"label": "advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of header to use as input, instead of the message body It 
has as higher precedent than the propertyName if both are set." },
+    "trim": { "kind": "attribute", "displayName": "Trim", "label": "advanced", 
"required": false, "type": "boolean", "javaType": "java.lang.Boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether to trim the value to remove leading and trailing 
whitespaces and line breaks" },
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the id of this node" }
+  }
+}
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/loop.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/loop.json
index dc7c1aef4ea..0c933fa4dbf 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/loop.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/loop.json
@@ -12,7 +12,7 @@
     "output": true
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "copy": { "kind": "attribute", "displayName": "Copy", "label": "advanced", 
"required": false, "type": "boolean", "javaType": "java.lang.Boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "If the copy attribute is true, a copy of the input 
Exchange is used for each iteration. That means each iteration will start from 
a copy of the same message. By default loop will loop the same exchange all 
over, so each iteration may have differ [...]
     "doWhile": { "kind": "attribute", "displayName": "Do While", "label": 
"advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Enables the while loop that loops until 
the predicate evaluates to false or null." },
     "breakOnShutdown": { "kind": "attribute", "displayName": "Break On 
Shutdown", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "If the breakOnShutdown 
attribute is true, then the loop will not iterate until it reaches the end when 
Camel is shut down." },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/onException.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/onException.json
index 9bba8ef8a6f..52beaddbb82 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/onException.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/onException.json
@@ -14,11 +14,11 @@
   "properties": {
     "exception": { "kind": "element", "displayName": "Exception", "required": 
true, "type": "array", "javaType": "java.util.List<java.lang.String>", 
"deprecated": false, "autowired": false, "secret": false, "description": "A set 
of exceptions to react upon." },
     "onWhen": { "kind": "element", "displayName": "On When", "required": 
false, "type": "object", "javaType": "org.apache.camel.model.WhenDefinition", 
"deprecated": false, "autowired": false, "secret": false, "asPredicate": true, 
"description": "Sets an additional predicate that should be true before the 
onException is triggered. To be used for fine grained controlling whether a 
thrown exception should be intercepted by this exception type or not." },
-    "retryWhile": { "kind": "expression", "displayName": "Retry While", 
"label": "advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secre [...]
+    "retryWhile": { "kind": "expression", "displayName": "Retry While", 
"label": "advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false,  [...]
     "redeliveryPolicy": { "kind": "element", "displayName": "Redelivery 
Policy", "required": false, "type": "object", "javaType": 
"org.apache.camel.model.RedeliveryPolicyDefinition", "deprecated": false, 
"autowired": false, "secret": false, "description": "Used for configuring 
redelivery options" },
     "redeliveryPolicyRef": { "kind": "attribute", "displayName": "Redelivery 
Policy Ref", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Sets a reference to a redelivery policy to 
lookup in the org.apache.camel.spi.Registry to be used." },
-    "handled": { "kind": "expression", "displayName": "Handled", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "asPredicate": tr 
[...]
-    "continued": { "kind": "expression", "displayName": "Continued", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": [...]
+    "handled": { "kind": "expression", "displayName": "Handled", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "asPredicat [...]
+    "continued": { "kind": "expression", "displayName": "Continued", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "se [...]
     "onRedeliveryRef": { "kind": "attribute", "displayName": "On Redelivery 
Ref", "label": "advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Sets a reference to a processor that should be processed before 
a redelivery attempt. Can be used to change the org.apache.camel.Exchange 
before its being redelivered." },
     "onExceptionOccurredRef": { "kind": "attribute", "displayName": "On 
Exception Occurred Ref", "label": "advanced", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "Sets a reference to a processor that 
should be processed just after an exception occurred. Can be used to perform 
custom logging about the occurred exception at the exact time it happened. 
Important: Any exception thrown from this  [...]
     "useOriginalMessage": { "kind": "attribute", "displayName": "Use Original 
Message", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Will use the original 
input org.apache.camel.Message (original body and headers) when an 
org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only 
applies when all redeliveries attempt have fail [...]
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/pollEnrich.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/pollEnrich.json
index 26bf02c48d1..66b307b2463 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/pollEnrich.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/pollEnrich.json
@@ -12,7 +12,7 @@
     "output": false
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "aggregationStrategy": { "kind": "attribute", "displayName": "Aggregation 
Strategy", "required": false, "type": "object", "javaType": 
"org.apache.camel.AggregationStrategy", "deprecated": false, "autowired": 
false, "secret": false, "description": "Sets the AggregationStrategy to be used 
to merge the reply from the external service, into a single outgoing message. 
By default Camel will use the reply from the external service as outgoing 
message." },
     "aggregationStrategyMethodName": { "kind": "attribute", "displayName": 
"Aggregation Strategy Method Name", "label": "advanced", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "This option can be used to 
explicit declare the method name to use, when using POJOs as the 
AggregationStrategy." },
     "aggregationStrategyMethodAllowNull": { "kind": "attribute", 
"displayName": "Aggregation Strategy Method Allow Null", "label": "advanced", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "If 
this option is false then the aggregate method is not used if there was no data 
to enrich. If this option is true then null values is used as the oldExchange 
(when no data to enrich), when using POJOs as [...]
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/propertyExpression.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/propertyExpression.json
index 21f2483e0c1..2657cf9e785 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/propertyExpression.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/propertyExpression.json
@@ -13,6 +13,6 @@
   },
   "properties": {
     "key": { "kind": "attribute", "displayName": "Key", "required": true, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Property key" },
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
   }
 }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/recipientList.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/recipientList.json
index ed7610b650f..13b1135ecb2 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/recipientList.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/recipientList.json
@@ -12,7 +12,7 @@
     "output": false
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "delimiter": { "kind": "attribute", "displayName": "Delimiter", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": ",", 
"description": "Delimiter used if the Expression returned multiple endpoints. 
Can be turned off using the value false. The default value is ," },
     "aggregationStrategy": { "kind": "attribute", "displayName": "Aggregation 
Strategy", "required": false, "type": "object", "javaType": 
"org.apache.camel.AggregationStrategy", "deprecated": false, "autowired": 
false, "secret": false, "description": "Sets the AggregationStrategy to be used 
to assemble the replies from the recipients, into a single outgoing message 
from the RecipientList. By default Camel will use the last reply as the 
outgoing message. You can also use a POJO as the Agg [...]
     "aggregationStrategyMethodName": { "kind": "attribute", "displayName": 
"Aggregation Strategy Method Name", "label": "advanced", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "This option can be used to 
explicit declare the method name to use, when using POJOs as the 
AggregationStrategy." },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/resequence.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/resequence.json
index 5f2f494e432..6b78755e679 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/resequence.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/resequence.json
@@ -12,7 +12,7 @@
     "output": false
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "resequencerConfig": { "kind": "element", "displayName": "Resequencer 
Config", "required": true, "type": "object", "javaType": 
"org.apache.camel.model.config.ResequencerConfig", "oneOf": [ "batch-config", 
"stream-config" ], "deprecated": false, "autowired": false, "secret": false, 
"description": "To configure the resequencer in using either batch or stream 
configuration. Will by default use batch configuration." },
     "disabled": { "kind": "attribute", "displayName": "Disabled", "label": 
"advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to disable this EIP from the 
route during build time. Once an EIP has been disabled then it cannot be 
enabled later at runtime." },
     "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the id of this node" 
},
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/routingSlip.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/routingSlip.json
index 8d0dd993d98..974f94be574 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/routingSlip.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/routingSlip.json
@@ -12,7 +12,7 @@
     "output": false
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "uriDelimiter": { "kind": "attribute", "displayName": "Uri Delimiter", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": ",", 
"description": "Sets the uri delimiter to use" },
     "ignoreInvalidEndpoints": { "kind": "attribute", "displayName": "Ignore 
Invalid Endpoints", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Ignore the invalidate 
endpoint exception when try to create a producer with that endpoint" },
     "cacheSize": { "kind": "attribute", "displayName": "Cache Size", "label": 
"advanced", "required": false, "type": "integer", "javaType": 
"java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, 
"description": "Sets the maximum size used by the 
org.apache.camel.spi.ProducerCache which is used to cache and reuse producers 
when using this routing slip, when uris are reused. Beware that when using 
dynamic endpoints then it affects how well the cache can be utilized.  [...]
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/script.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/script.json
index 95d1ffbdb7b..11fc21b7d4e 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/script.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/script.json
@@ -12,7 +12,7 @@
     "output": false
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "disabled": { "kind": "attribute", "displayName": "Disabled", "label": 
"advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to disable this EIP from the 
route during build time. Once an EIP has been disabled then it cannot be 
enabled later at runtime." },
     "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the id of this node" 
},
     "description": { "kind": "element", "displayName": "Description", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.model.DescriptionDefinition", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the description of 
this node" }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setBody.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setBody.json
index 15525668830..6d8ed0d59c3 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setBody.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setBody.json
@@ -12,7 +12,7 @@
     "output": false
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "disabled": { "kind": "attribute", "displayName": "Disabled", "label": 
"advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to disable this EIP from the 
route during build time. Once an EIP has been disabled then it cannot be 
enabled later at runtime." },
     "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the id of this node" 
},
     "description": { "kind": "element", "displayName": "Description", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.model.DescriptionDefinition", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the description of 
this node" }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setHeader.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setHeader.json
index 371383bd8cb..1ecd0e1c5fc 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setHeader.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setHeader.json
@@ -13,7 +13,7 @@
   },
   "properties": {
     "name": { "kind": "attribute", "displayName": "Name", "required": true, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Name of message header to 
set a new value The simple language can be used to define a dynamic evaluated 
header name to be used. Otherwise a constant name will be used." },
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "disabled": { "kind": "attribute", "displayName": "Disabled", "label": 
"advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to disable this EIP from the 
route during build time. Once an EIP has been disabled then it cannot be 
enabled later at runtime." },
     "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the id of this node" 
},
     "description": { "kind": "element", "displayName": "Description", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.model.DescriptionDefinition", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the description of 
this node" }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setProperty.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setProperty.json
index ac0af44399b..f5a1a930cf4 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setProperty.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setProperty.json
@@ -13,7 +13,7 @@
   },
   "properties": {
     "name": { "kind": "attribute", "displayName": "Name", "required": true, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Name of exchange property 
to set a new value. The simple language can be used to define a dynamic 
evaluated exchange property name to be used. Otherwise a constant name will be 
used." },
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "disabled": { "kind": "attribute", "displayName": "Disabled", "label": 
"advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to disable this EIP from the 
route during build time. Once an EIP has been disabled then it cannot be 
enabled later at runtime." },
     "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the id of this node" 
},
     "description": { "kind": "element", "displayName": "Description", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.model.DescriptionDefinition", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the description of 
this node" }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/sort.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/sort.json
index 1e32fb1c628..3d066ff5ee1 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/sort.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/sort.json
@@ -12,7 +12,7 @@
     "output": false
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "comparator": { "kind": "attribute", "displayName": "Comparator", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"java.util.Comparator", "deprecated": false, "autowired": false, "secret": 
false, "description": "Sets the comparator to use for sorting" },
     "disabled": { "kind": "attribute", "displayName": "Disabled", "label": 
"advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to disable this EIP from the 
route during build time. Once an EIP has been disabled then it cannot be 
enabled later at runtime." },
     "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the id of this node" 
},
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/split.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/split.json
index 2d51cb25754..5087b2b7ed2 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/split.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/split.json
@@ -12,7 +12,7 @@
     "output": true
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "delimiter": { "kind": "attribute", "displayName": "Delimiter", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": ",", 
"description": "Delimiter used in splitting messages. Can be turned off using 
the value false. The default value is ," },
     "aggregationStrategy": { "kind": "attribute", "displayName": "Aggregation 
Strategy", "required": false, "type": "object", "javaType": 
"org.apache.camel.AggregationStrategy", "deprecated": false, "autowired": 
false, "secret": false, "description": "Sets a reference to the 
AggregationStrategy to be used to assemble the replies from the split messages, 
into a single outgoing message from the Splitter. By default Camel will use the 
original incoming message to the splitter (leave it unch [...]
     "aggregationStrategyMethodName": { "kind": "attribute", "displayName": 
"Aggregation Strategy Method Name", "label": "advanced", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "This option can be used to 
explicit declare the method name to use, when using POJOs as the 
AggregationStrategy." },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/sticky.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/sticky.json
index b11a16259d1..e21f83548b7 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/sticky.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/sticky.json
@@ -12,7 +12,7 @@
     "output": false
   },
   "properties": {
-    "correlationExpression": { "kind": "expression", "displayName": 
"Correlation Expression", "required": true, "type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secre [...]
+    "correlationExpression": { "kind": "expression", "displayName": 
"Correlation Expression", "required": true, "type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false,  [...]
     "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The id of this node" }
   }
 }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/throttle.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/throttle.json
index 475e36a0c3e..65f6fb24cf6 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/throttle.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/throttle.json
@@ -12,8 +12,8 @@
     "output": false
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
-    "correlationExpression": { "kind": "expression", "displayName": 
"Correlation Expression", "required": false, "type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secr [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
+    "correlationExpression": { "kind": "expression", "displayName": 
"Correlation Expression", "required": false, "type": "object", "javaType": 
"org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, [...]
     "executorService": { "kind": "attribute", "displayName": "Executor 
Service", "label": "advanced", "required": false, "type": "object", "javaType": 
"java.util.concurrent.ExecutorService", "deprecated": false, "autowired": 
false, "secret": false, "description": "To use a custom thread pool 
(ScheduledExecutorService) by the throttler." },
     "timePeriodMillis": { "kind": "attribute", "displayName": "Time Period 
Millis", "required": false, "type": "duration", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"1000", "description": "Sets the time period during which the maximum request 
count is valid for" },
     "asyncDelayed": { "kind": "attribute", "displayName": "Async Delayed", 
"label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Enables asynchronous delay which means 
the thread will not block while delaying." },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/transform.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/transform.json
index f089c763aa8..3b7e59cc9ba 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/transform.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/transform.json
@@ -12,7 +12,7 @@
     "output": false
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "description" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "descri [...]
     "disabled": { "kind": "attribute", "displayName": "Disabled", "label": 
"advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to disable this EIP from the 
route during build time. Once an EIP has been disabled then it cannot be 
enabled later at runtime." },
     "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the id of this node" 
},
     "description": { "kind": "element", "displayName": "Description", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.model.DescriptionDefinition", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the description of 
this node" }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/validate.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/validate.json
index 4a6c0c3fa7e..ecf34a81886 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/validate.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/validate.json
@@ -12,7 +12,7 @@
     "output": false
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "asPredicate" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "asPred [...]
     "predicateExceptionFactory": { "kind": "attribute", "displayName": 
"Predicate Exception Factory", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.camel.spi.PredicateExceptionFactory", 
"deprecated": false, "autowired": false, "secret": false, "description": "The 
bean id of custom PredicateExceptionFactory to use for creating the exception 
when the validation fails. By default, Camel will throw 
PredicateValidationException. By using a custom factory yo [...]
     "disabled": { "kind": "attribute", "displayName": "Disabled", "label": 
"advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to disable this EIP from the 
route during build time. Once an EIP has been disabled then it cannot be 
enabled later at runtime." },
     "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the id of this node" 
},
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/when.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/when.json
index 0353f03abfd..9b20748fbbc 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/when.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/when.json
@@ -12,7 +12,7 @@
     "output": true
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "asPredicate" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "asPred [...]
     "disabled": { "kind": "attribute", "displayName": "Disabled", "label": 
"advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to disable this EIP from the 
route during build time. Once an EIP has been disabled then it cannot be 
enabled later at runtime." },
     "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the id of this node" 
},
     "description": { "kind": "element", "displayName": "Description", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.model.DescriptionDefinition", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the description of 
this node" }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/whenSkipSendToEndpoint.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/whenSkipSendToEndpoint.json
index affe0f498b5..c0edc73e17c 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/whenSkipSendToEndpoint.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/whenSkipSendToEndpoint.json
@@ -12,7 +12,7 @@
     "output": true
   },
   "properties": {
-    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "asPredicate" [...]
+    "expression": { "kind": "expression", "displayName": "Expression", 
"required": true, "type": "object", "javaType": 
"org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", 
"csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", 
"joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", 
"ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], 
"deprecated": false, "autowired": false, "secret": false, "asPred [...]
     "disabled": { "kind": "attribute", "displayName": "Disabled", "label": 
"advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to disable this EIP from the 
route during build time. Once an EIP has been disabled then it cannot be 
enabled later at runtime." },
     "id": { "kind": "attribute", "displayName": "Id", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the id of this node" 
},
     "description": { "kind": "element", "displayName": "Description", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.model.DescriptionDefinition", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the description of 
this node" }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
index 9a333cd58c8..0283f1ccdca 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
@@ -860,6 +860,16 @@ Evaluates a JQ expression against a JSON message body.
     </xs:annotation>
   </xs:element>
     
+  <xs:element name="js" type="tns:javaScriptExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        <![CDATA[
+Evaluates a JavaScript expression.
+      ]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+    
   <xs:element name="json" type="tns:jsonDataFormat">
     <xs:annotation>
       <xs:documentation xml:lang="en">
@@ -4519,6 +4529,8 @@ CamelContext or the route using it. Default value: false
             
       <xs:element ref="tns:hl7terser"/>
             
+      <xs:element ref="tns:js"/>
+            
       <xs:element ref="tns:joor"/>
             
       <xs:element ref="tns:jq"/>
@@ -4985,6 +4997,8 @@ should be intercepted by this exception type or not.
                         
             <xs:element ref="tns:hl7terser"/>
                         
+            <xs:element ref="tns:js"/>
+                        
             <xs:element ref="tns:joor"/>
                         
             <xs:element ref="tns:jq"/>
@@ -6125,6 +6139,8 @@ To use a specific charset when converting.
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
@@ -6219,6 +6235,8 @@ To use a custom Thread Pool if asyncDelay has been 
enabled.
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
@@ -6325,6 +6343,8 @@ producers.
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
@@ -7127,6 +7147,8 @@ default WARN. Default value: WARN
                         
             <xs:element ref="tns:hl7terser"/>
                         
+            <xs:element ref="tns:js"/>
+                        
             <xs:element ref="tns:joor"/>
                         
             <xs:element ref="tns:jq"/>
@@ -7556,6 +7578,8 @@ Global option value.
                         
             <xs:element ref="tns:hl7terser"/>
                         
+            <xs:element ref="tns:js"/>
+                        
             <xs:element ref="tns:joor"/>
                         
             <xs:element ref="tns:jq"/>
@@ -8904,6 +8928,8 @@ To refer to a custom logger instance to lookup from the 
registry.
                         
             <xs:element ref="tns:hl7terser"/>
                         
+            <xs:element ref="tns:js"/>
+                        
             <xs:element ref="tns:joor"/>
                         
             <xs:element ref="tns:jq"/>
@@ -14744,6 +14770,8 @@ Sets a reference to use for lookup the policy in the 
registry.
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
@@ -14942,6 +14970,8 @@ by their type in the registry by prefixing with #type: 
syntax, eg
             
       <xs:element ref="tns:hl7terser"/>
             
+      <xs:element ref="tns:js"/>
+            
       <xs:element ref="tns:joor"/>
             
       <xs:element ref="tns:jq"/>
@@ -15010,6 +15040,8 @@ Property key.
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
@@ -15400,6 +15432,8 @@ Name of property to remove.
                         
             <xs:element ref="tns:hl7terser"/>
                         
+            <xs:element ref="tns:js"/>
+                        
             <xs:element ref="tns:joor"/>
                         
             <xs:element ref="tns:jq"/>
@@ -16387,6 +16421,8 @@ Description of the parameter.
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
@@ -16785,6 +16821,8 @@ after this many received.
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
@@ -16847,6 +16885,8 @@ after this many received.
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
@@ -16934,6 +16974,8 @@ forward.
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
@@ -17008,6 +17050,8 @@ will be used.
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
@@ -17082,6 +17126,8 @@ constant name will be used.
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
@@ -17156,6 +17202,8 @@ Sets the comparator to use for sorting.
                         
             <xs:element ref="tns:hl7terser"/>
                         
+            <xs:element ref="tns:js"/>
+                        
             <xs:element ref="tns:joor"/>
                         
             <xs:element ref="tns:jq"/>
@@ -18017,6 +18065,8 @@ rejection handler. Is by default true. Default value: 
true
                         
             <xs:element ref="tns:hl7terser"/>
                         
+            <xs:element ref="tns:js"/>
+                        
             <xs:element ref="tns:joor"/>
                         
             <xs:element ref="tns:jq"/>
@@ -18469,6 +18519,8 @@ Sets a reference to use for lookup the policy in the 
registry.
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
@@ -18798,6 +18850,8 @@ value: false
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
@@ -19825,6 +19879,8 @@ Set the base path to store in ZK.
                         
             <xs:element ref="tns:hl7terser"/>
                         
+            <xs:element ref="tns:js"/>
+                        
             <xs:element ref="tns:joor"/>
                         
             <xs:element ref="tns:jq"/>
@@ -20313,6 +20369,39 @@ type is com.datasonnet.document.Document.
       
   </xs:complexType>
     
+  <xs:complexType name="javaScriptExpression">
+        
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:expression">
+                
+        <xs:attribute name="resultType" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+              <![CDATA[
+Sets the class of the result type (type from output).
+            ]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="headerName" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+              <![CDATA[
+Name of header to use as input, instead of the message body It has as higher
+precedent than the propertyName if both are set.
+            ]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+              
+      </xs:extension>
+          
+    </xs:simpleContent>
+      
+  </xs:complexType>
+    
   <xs:complexType name="joorExpression">
         
     <xs:simpleContent>
@@ -22679,6 +22768,8 @@ To configure a special tag for the operations within 
this rest definition.
                     
           <xs:element ref="tns:hl7terser"/>
                     
+          <xs:element ref="tns:js"/>
+                    
           <xs:element ref="tns:joor"/>
                     
           <xs:element ref="tns:jq"/>
diff --git 
a/core/camel-main/src/generated/resources/org/apache/camel/main/languages.properties
 
b/core/camel-main/src/generated/resources/org/apache/camel/main/languages.properties
index 6446daa6c39..8aa9f4d1a08 100644
--- 
a/core/camel-main/src/generated/resources/org/apache/camel/main/languages.properties
+++ 
b/core/camel-main/src/generated/resources/org/apache/camel/main/languages.properties
@@ -9,6 +9,7 @@ header
 hl7terser
 joor
 jq
+js
 jsonpath
 mvel
 ognl
diff --git a/docs/components/modules/languages/examples/json/js.json 
b/docs/components/modules/languages/examples/json/js.json
new file mode 120000
index 00000000000..1d19e4112ce
--- /dev/null
+++ b/docs/components/modules/languages/examples/json/js.json
@@ -0,0 +1 @@
+../../../../../../components/camel-javascript/src/generated/resources/org/apache/camel/language/js/js.json
\ No newline at end of file
diff --git a/docs/components/modules/languages/nav.adoc 
b/docs/components/modules/languages/nav.adoc
index 0d46c753515..ebd713e3bf7 100644
--- a/docs/components/modules/languages/nav.adoc
+++ b/docs/components/modules/languages/nav.adoc
@@ -11,6 +11,7 @@
 ** xref:groovy-language.adoc[Groovy]
 ** xref:header-language.adoc[Header]
 ** xref:hl7terser-language.adoc[HL7 Terser]
+** xref:js-language.adoc[JavaScript]
 ** xref:joor-language.adoc[jOOR]
 ** xref:jq-language.adoc[JQ]
 ** xref:jsonpath-language.adoc[JSONPath]
diff --git a/docs/components/modules/languages/pages/js-language.adoc 
b/docs/components/modules/languages/pages/js-language.adoc
new file mode 120000
index 00000000000..24d8b01fea5
--- /dev/null
+++ b/docs/components/modules/languages/pages/js-language.adoc
@@ -0,0 +1 @@
+../../../../../components/camel-javascript/src/main/docs/js-language.adoc
\ No newline at end of file
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ExpressionDeserializers.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ExpressionDeserializers.java
index 95ab456258b..99e43fd38cf 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ExpressionDeserializers.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ExpressionDeserializers.java
@@ -66,6 +66,9 @@ public final class ExpressionDeserializers extends 
YamlDeserializerSupport {
             case "jq": {
                 return asType(node, 
org.apache.camel.model.language.JqExpression.class);
             }
+            case "js": {
+                return asType(node, 
org.apache.camel.model.language.JavaScriptExpression.class);
+            }
             case "jsonpath": {
                 return asType(node, 
org.apache.camel.model.language.JsonPathExpression.class);
             }
@@ -132,6 +135,7 @@ public final class ExpressionDeserializers extends 
YamlDeserializerSupport {
                     @YamlProperty(name = "hl7terser", type = 
"object:org.apache.camel.model.language.Hl7TerserExpression"),
                     @YamlProperty(name = "joor", type = 
"object:org.apache.camel.model.language.JoorExpression"),
                     @YamlProperty(name = "jq", type = 
"object:org.apache.camel.model.language.JqExpression"),
+                    @YamlProperty(name = "js", type = 
"object:org.apache.camel.model.language.JavaScriptExpression"),
                     @YamlProperty(name = "jsonpath", type = 
"object:org.apache.camel.model.language.JsonPathExpression"),
                     @YamlProperty(name = "language", type = 
"object:org.apache.camel.model.language.LanguageExpression"),
                     @YamlProperty(name = "method", type = 
"object:org.apache.camel.model.language.MethodCallExpression"),
@@ -168,6 +172,7 @@ public final class ExpressionDeserializers extends 
YamlDeserializerSupport {
                     @YamlProperty(name = "hl7terser", type = 
"object:org.apache.camel.model.language.Hl7TerserExpression"),
                     @YamlProperty(name = "joor", type = 
"object:org.apache.camel.model.language.JoorExpression"),
                     @YamlProperty(name = "jq", type = 
"object:org.apache.camel.model.language.JqExpression"),
+                    @YamlProperty(name = "js", type = 
"object:org.apache.camel.model.language.JavaScriptExpression"),
                     @YamlProperty(name = "jsonpath", type = 
"object:org.apache.camel.model.language.JsonPathExpression"),
                     @YamlProperty(name = "language", type = 
"object:org.apache.camel.model.language.LanguageExpression"),
                     @YamlProperty(name = "method", type = 
"object:org.apache.camel.model.language.MethodCallExpression"),
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
index cd155034841..e1cfc357cdd 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
@@ -179,6 +179,7 @@ import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.model.language.GroovyExpression;
 import org.apache.camel.model.language.HeaderExpression;
 import org.apache.camel.model.language.Hl7TerserExpression;
+import org.apache.camel.model.language.JavaScriptExpression;
 import org.apache.camel.model.language.JoorExpression;
 import org.apache.camel.model.language.JqExpression;
 import org.apache.camel.model.language.JsonPathExpression;
@@ -6940,6 +6941,80 @@ public final class ModelDeserializers extends 
YamlDeserializerSupport {
         }
     }
 
+    @YamlType(
+            nodes = "js",
+            inline = true,
+            types = org.apache.camel.model.language.JavaScriptExpression.class,
+            order = 
org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
+            properties = {
+                    @YamlProperty(name = "expression", type = "string", 
required = true),
+                    @YamlProperty(name = "header-name", type = "string"),
+                    @YamlProperty(name = "id", type = "string"),
+                    @YamlProperty(name = "result-type", type = "string"),
+                    @YamlProperty(name = "trim", type = "boolean")
+            }
+    )
+    public static class JavaScriptExpressionDeserializer extends 
YamlDeserializerBase<JavaScriptExpression> {
+        public JavaScriptExpressionDeserializer() {
+            super(JavaScriptExpression.class);
+        }
+
+        @Override
+        protected JavaScriptExpression newInstance() {
+            return new JavaScriptExpression();
+        }
+
+        @Override
+        protected JavaScriptExpression newInstance(String value) {
+            return new JavaScriptExpression(value);
+        }
+
+        @Override
+        protected boolean setProperty(JavaScriptExpression target, String 
propertyKey,
+                String propertyName, Node node) {
+            switch(propertyKey) {
+                case "expression": {
+                    String val = asText(node);
+                    target.setExpression(val);
+                    break;
+                }
+                case "header-name": {
+                    String val = asText(node);
+                    target.setHeaderName(val);
+                    break;
+                }
+                case "id": {
+                    String val = asText(node);
+                    target.setId(val);
+                    break;
+                }
+                case "result-type": {
+                    String val = asText(node);
+                    target.setResultTypeName(val);
+                    break;
+                }
+                case "trim": {
+                    String val = asText(node);
+                    target.setTrim(val);
+                    break;
+                }
+                default: {
+                    ExpressionDefinition ed = target.getExpressionType();
+                    if (ed != null) {
+                        throw new 
org.apache.camel.dsl.yaml.common.exception.DuplicateFieldException(node, 
propertyName, "as an expression");
+                    }
+                    ed = 
ExpressionDeserializers.constructExpressionType(propertyKey, node);
+                    if (ed != null) {
+                        target.setExpressionType(ed);
+                    } else {
+                        return false;
+                    }
+                }
+            }
+            return true;
+        }
+    }
+
     @YamlType(
             nodes = "jaxb",
             types = org.apache.camel.model.dataformat.JaxbDataFormat.class,
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
index 06b55cac63a..b3ef7d0f564 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
@@ -204,6 +204,8 @@ public final class ModelDeserializersResolver implements 
YamlDeserializerResolve
             case "jackson-xml": return new 
ModelDeserializers.JacksonXMLDataFormatDeserializer();
             case "jacksonXml": return new 
ModelDeserializers.JacksonXMLDataFormatDeserializer();
             case "org.apache.camel.model.dataformat.JacksonXMLDataFormat": 
return new ModelDeserializers.JacksonXMLDataFormatDeserializer();
+            case "js": return new 
ModelDeserializers.JavaScriptExpressionDeserializer();
+            case "org.apache.camel.model.language.JavaScriptExpression": 
return new ModelDeserializers.JavaScriptExpressionDeserializer();
             case "jaxb": return new 
ModelDeserializers.JaxbDataFormatDeserializer();
             case "org.apache.camel.model.dataformat.JaxbDataFormat": return 
new ModelDeserializers.JaxbDataFormatDeserializer();
             case "joor": return new 
ModelDeserializers.JoorExpressionDeserializer();
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
index 36aefdb47a9..dad7035bd23 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
@@ -906,6 +906,9 @@
           "jq" : {
             "$ref" : 
"#/items/definitions/org.apache.camel.model.language.JqExpression"
           },
+          "js" : {
+            "$ref" : 
"#/items/definitions/org.apache.camel.model.language.JavaScriptExpression"
+          },
           "jsonpath" : {
             "$ref" : 
"#/items/definitions/org.apache.camel.model.language.JsonPathExpression"
           },
@@ -6306,6 +6309,9 @@
           "jq" : {
             "$ref" : 
"#/items/definitions/org.apache.camel.model.language.JqExpression"
           },
+          "js" : {
+            "$ref" : 
"#/items/definitions/org.apache.camel.model.language.JavaScriptExpression"
+          },
           "jsonpath" : {
             "$ref" : 
"#/items/definitions/org.apache.camel.model.language.JsonPathExpression"
           },
@@ -6404,6 +6410,31 @@
         } ],
         "required" : [ "expression" ]
       },
+      "org.apache.camel.model.language.JavaScriptExpression" : {
+        "oneOf" : [ {
+          "type" : "string"
+        }, {
+          "type" : "object",
+          "properties" : {
+            "expression" : {
+              "type" : "string"
+            },
+            "header-name" : {
+              "type" : "string"
+            },
+            "id" : {
+              "type" : "string"
+            },
+            "result-type" : {
+              "type" : "string"
+            },
+            "trim" : {
+              "type" : "boolean"
+            }
+          }
+        } ],
+        "required" : [ "expression" ]
+      },
       "org.apache.camel.model.language.JoorExpression" : {
         "oneOf" : [ {
           "type" : "string"
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
index 7fbdd3f82bb..6b43c54a9af 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
@@ -810,6 +810,9 @@
           "jq" : {
             "$ref" : 
"#/items/definitions/org.apache.camel.model.language.JqExpression"
           },
+          "js" : {
+            "$ref" : 
"#/items/definitions/org.apache.camel.model.language.JavaScriptExpression"
+          },
           "jsonpath" : {
             "$ref" : 
"#/items/definitions/org.apache.camel.model.language.JsonPathExpression"
           },
@@ -6207,6 +6210,9 @@
           "jq" : {
             "$ref" : 
"#/items/definitions/org.apache.camel.model.language.JqExpression"
           },
+          "js" : {
+            "$ref" : 
"#/items/definitions/org.apache.camel.model.language.JavaScriptExpression"
+          },
           "jsonpath" : {
             "$ref" : 
"#/items/definitions/org.apache.camel.model.language.JsonPathExpression"
           },
@@ -6305,6 +6311,31 @@
         } ],
         "required" : [ "expression" ]
       },
+      "org.apache.camel.model.language.JavaScriptExpression" : {
+        "oneOf" : [ {
+          "type" : "string"
+        }, {
+          "type" : "object",
+          "properties" : {
+            "expression" : {
+              "type" : "string"
+            },
+            "headerName" : {
+              "type" : "string"
+            },
+            "id" : {
+              "type" : "string"
+            },
+            "resultType" : {
+              "type" : "string"
+            },
+            "trim" : {
+              "type" : "boolean"
+            }
+          }
+        } ],
+        "required" : [ "expression" ]
+      },
       "org.apache.camel.model.language.JoorExpression" : {
         "oneOf" : [ {
           "type" : "string"

Reply via email to