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

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


The following commit(s) were added to refs/heads/main by this push:
     new ad22fc95bb3 CAMEL-20376: camel-xpath - XPath language add support for 
variables (#12964)
ad22fc95bb3 is described below

commit ad22fc95bb30a5cb619110308449cb4938948c56
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Jan 31 14:43:27 2024 +0100

    CAMEL-20376: camel-xpath - XPath language add support for variables (#12964)
---
 .../apache/camel/catalog/languages/tokenize.json   |  7 ++---
 .../org/apache/camel/catalog/languages/xpath.json  |  7 ++---
 .../org/apache/camel/catalog/languages/xquery.json |  7 ++---
 .../apache/camel/catalog/languages/xtokenize.json  |  7 ++---
 .../org/apache/camel/catalog/models/tokenize.json  |  7 ++---
 .../org/apache/camel/catalog/models/xpath.json     |  7 ++---
 .../org/apache/camel/catalog/models/xquery.json    |  7 ++---
 .../org/apache/camel/catalog/models/xtokenize.json |  7 ++---
 .../apache/camel/catalog/schemas/camel-spring.xsd  |  9 +++++++
 .../org/apache/camel/language/xquery/xquery.json   |  7 ++---
 .../camel/component/xquery/XQueryBuilder.java      | 23 +++++++++++++----
 .../camel/language/xquery/XQueryLanguage.java      |  8 ++++++
 .../camel/language/xtokenizer/xtokenize.json       |  7 ++---
 .../xtokenizer/XMLTokenExpressionIterator.java     | 12 +++++++++
 .../language/xtokenizer/XMLTokenizeLanguage.java   |  5 ++++
 .../org/apache/camel/language/xpath/xpath.json     |  7 ++---
 .../apache/camel/language/tokenizer/tokenize.json  |  7 ++---
 .../camel/language/tokenizer/TokenizeLanguage.java |  5 ++++
 .../org/apache/camel/model/language/tokenize.json  |  7 ++---
 .../org/apache/camel/model/language/xpath.json     |  7 ++---
 .../org/apache/camel/model/language/xquery.json    |  7 ++---
 .../org/apache/camel/model/language/xtokenize.json |  7 ++---
 .../language/SingleInputExpressionDefinition.java  | 23 +++++++++++++++++
 .../language/TokenizerExpressionReifier.java       |  3 ++-
 .../language/XMLTokenizerExpressionReifier.java    |  3 ++-
 .../reifier/language/XPathExpressionReifier.java   |  3 ++-
 .../reifier/language/XQueryExpressionReifier.java  |  3 ++-
 .../java/org/apache/camel/xml/in/ModelParser.java  |  1 +
 .../java/org/apache/camel/xml/out/ModelWriter.java |  1 +
 .../org/apache/camel/yaml/out/ModelWriter.java     |  1 +
 .../dsl/yaml/deserializers/ModelDeserializers.java | 30 +++++++++++++++++++---
 .../generated/resources/schema/camelYamlDsl.json   | 20 +++++++++++++++
 32 files changed, 202 insertions(+), 60 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/tokenize.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/tokenize.json
index d8681f0a172..3d8cea09bf2 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/tokenize.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/tokenize.json
@@ -26,8 +26,9 @@
     "group": { "index": 7, "kind": "attribute", "displayName": "Group", 
"label": "advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "To group N parts together, for example to split big files into 
chunks of 1000 lines. You can use simple language as the group to support 
dynamic group sizes." },
     "groupDelimiter": { "index": 8, "kind": "attribute", "displayName": "Group 
Delimiter", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Sets the delimiter to use when grouping. If 
this has not been set then token will be used as the delimiter." },
     "skipFirst": { "index": 9, "kind": "attribute", "displayName": "Skip 
First", "label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "To skip the very first element" },
-    "headerName": { "index": 10, "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." },
-    "propertyName": { "index": 11, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 12, "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" }
+    "variableName": { "index": 10, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 11, "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." },
+    "propertyName": { "index": 12, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 13, "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" }
   }
 }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/xpath.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/xpath.json
index 74524b10d47..b90d9ef9185 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/xpath.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/xpath.json
@@ -27,8 +27,9 @@
     "threadSafety": { "index": 8, "kind": "attribute", "displayName": "Thread 
Safety", "label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to enable thread-safety for the 
returned result of the xpath expression. This applies to when using NODESET as 
the result type, and the returned set has multiple elements. In this situation 
there can be threa [...]
     "preCompile": { "index": 9, "kind": "attribute", "displayName": "Pre 
Compile", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether to enable 
pre-compiling the xpath expression during initialization phase. pre-compile is 
enabled by default. This can be used to turn off, for example in cases the 
compilation phase is desired at the starting phas [...]
     "namespace": { "index": 10, "kind": "element", "displayName": "Namespace", 
"label": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Injects the XML 
Namespaces of prefix - uri mappings" },
-    "headerName": { "index": 11, "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." },
-    "propertyName": { "index": 12, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 13, "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" }
+    "variableName": { "index": 11, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 12, "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." },
+    "propertyName": { "index": 13, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 14, "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" }
   }
 }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/xquery.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/xquery.json
index bfdb33faea0..6c282f23bea 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/xquery.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/xquery.json
@@ -22,8 +22,9 @@
     "type": { "index": 3, "kind": "attribute", "displayName": "Type", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the class name of the result type (type from output) The default result type is 
NodeSet" },
     "configurationRef": { "index": 4, "kind": "attribute", "displayName": 
"Configuration Ref", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Reference to a saxon configuration instance in 
the registry to use for xquery (requires camel-saxon). This may be needed to 
add custom functions to a saxon configuration, so these custom functions can be 
used in xquery expressions." },
     "namespace": { "index": 5, "kind": "element", "displayName": "Namespace", 
"label": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Injects the XML 
Namespaces of prefix - uri mappings" },
-    "headerName": { "index": 6, "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." },
-    "propertyName": { "index": 7, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 8, "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" }
+    "variableName": { "index": 6, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 7, "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." },
+    "propertyName": { "index": 8, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 9, "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" }
   }
 }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/xtokenize.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/xtokenize.json
index 665716e4d73..084cb91f80b 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/xtokenize.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/xtokenize.json
@@ -21,8 +21,9 @@
     "mode": { "index": 2, "kind": "attribute", "displayName": "Mode", 
"required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ 
"i", "w", "u", "t" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "i", "description": "The extraction mode. The available 
extraction modes are: i - injecting the contextual namespace bindings into the 
extracted token (default) w - wrapping the extracted token in its ancestor 
context u - unwrapping the extracted to [...]
     "group": { "index": 3, "kind": "attribute", "displayName": "Group", 
"required": false, "type": "integer", "javaType": "java.lang.Integer", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
group N parts together" },
     "namespace": { "index": 4, "kind": "element", "displayName": "Namespace", 
"label": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Injects the XML 
Namespaces of prefix - uri mappings" },
-    "headerName": { "index": 5, "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." },
-    "propertyName": { "index": 6, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 7, "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" }
+    "variableName": { "index": 5, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 6, "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." },
+    "propertyName": { "index": 7, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 8, "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" }
   }
 }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/tokenize.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/tokenize.json
index 4fdf222b390..f6c525202bc 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/tokenize.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/tokenize.json
@@ -23,8 +23,9 @@
     "group": { "index": 7, "kind": "attribute", "displayName": "Group", 
"label": "advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "To group N parts together, for example to split big files into 
chunks of 1000 lines. You can use simple language as the group to support 
dynamic group sizes." },
     "groupDelimiter": { "index": 8, "kind": "attribute", "displayName": "Group 
Delimiter", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Sets the delimiter to use when grouping. If 
this has not been set then token will be used as the delimiter." },
     "skipFirst": { "index": 9, "kind": "attribute", "displayName": "Skip 
First", "label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "To skip the very first element" },
-    "headerName": { "index": 10, "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." },
-    "propertyName": { "index": 11, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 12, "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" }
+    "variableName": { "index": 10, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 11, "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." },
+    "propertyName": { "index": 12, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 13, "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" }
   }
 }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/xpath.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/xpath.json
index 2aec407fe21..64ba6b80fbc 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/xpath.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/xpath.json
@@ -24,8 +24,9 @@
     "threadSafety": { "index": 8, "kind": "attribute", "displayName": "Thread 
Safety", "label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to enable thread-safety for the 
returned result of the xpath expression. This applies to when using NODESET as 
the result type, and the returned set has multiple elements. In this situation 
there can be threa [...]
     "preCompile": { "index": 9, "kind": "attribute", "displayName": "Pre 
Compile", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether to enable 
pre-compiling the xpath expression during initialization phase. pre-compile is 
enabled by default. This can be used to turn off, for example in cases the 
compilation phase is desired at the starting phas [...]
     "namespace": { "index": 10, "kind": "element", "displayName": "Namespace", 
"label": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Injects the XML 
Namespaces of prefix - uri mappings" },
-    "headerName": { "index": 11, "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." },
-    "propertyName": { "index": 12, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 13, "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" }
+    "variableName": { "index": 11, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 12, "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." },
+    "propertyName": { "index": 13, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 14, "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" }
   }
 }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/xquery.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/xquery.json
index 3122c3afcd4..dfef4422e13 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/xquery.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/xquery.json
@@ -19,8 +19,9 @@
     "type": { "index": 3, "kind": "attribute", "displayName": "Type", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the class name of the result type (type from output) The default result type is 
NodeSet" },
     "configurationRef": { "index": 4, "kind": "attribute", "displayName": 
"Configuration Ref", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Reference to a saxon configuration instance in 
the registry to use for xquery (requires camel-saxon). This may be needed to 
add custom functions to a saxon configuration, so these custom functions can be 
used in xquery expressions." },
     "namespace": { "index": 5, "kind": "element", "displayName": "Namespace", 
"label": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Injects the XML 
Namespaces of prefix - uri mappings" },
-    "headerName": { "index": 6, "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." },
-    "propertyName": { "index": 7, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 8, "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" }
+    "variableName": { "index": 6, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 7, "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." },
+    "propertyName": { "index": 8, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 9, "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" }
   }
 }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/xtokenize.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/xtokenize.json
index b9dc68af81f..4fc98b7419d 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/xtokenize.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/xtokenize.json
@@ -18,8 +18,9 @@
     "mode": { "index": 2, "kind": "attribute", "displayName": "Mode", 
"required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ 
"i", "w", "u", "t" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "i", "description": "The extraction mode. The available 
extraction modes are: i - injecting the contextual namespace bindings into the 
extracted token (default) w - wrapping the extracted token in its ancestor 
context u - unwrapping the extracted to [...]
     "group": { "index": 3, "kind": "attribute", "displayName": "Group", 
"required": false, "type": "integer", "javaType": "java.lang.Integer", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
group N parts together" },
     "namespace": { "index": 4, "kind": "element", "displayName": "Namespace", 
"label": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Injects the XML 
Namespaces of prefix - uri mappings" },
-    "headerName": { "index": 5, "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." },
-    "propertyName": { "index": 6, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 7, "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" }
+    "variableName": { "index": 5, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 6, "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." },
+    "propertyName": { "index": 7, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 8, "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" }
   }
 }
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 8db2e5a49fb..362634f1b26 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
@@ -15484,6 +15484,15 @@ Whether to validate the bean has the configured 
method. Default value: true
   <xs:complexType abstract="true" name="singleInputExpressionDefinition">
     <xs:simpleContent>
       <xs:extension base="tns:expression">
+        <xs:attribute name="variableName" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Name of variable to use as input, instead of the message body.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
         <xs:attribute name="headerName" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en">
diff --git 
a/components/camel-saxon/src/generated/resources/org/apache/camel/language/xquery/xquery.json
 
b/components/camel-saxon/src/generated/resources/org/apache/camel/language/xquery/xquery.json
index bfdb33faea0..6c282f23bea 100644
--- 
a/components/camel-saxon/src/generated/resources/org/apache/camel/language/xquery/xquery.json
+++ 
b/components/camel-saxon/src/generated/resources/org/apache/camel/language/xquery/xquery.json
@@ -22,8 +22,9 @@
     "type": { "index": 3, "kind": "attribute", "displayName": "Type", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the class name of the result type (type from output) The default result type is 
NodeSet" },
     "configurationRef": { "index": 4, "kind": "attribute", "displayName": 
"Configuration Ref", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Reference to a saxon configuration instance in 
the registry to use for xquery (requires camel-saxon). This may be needed to 
add custom functions to a saxon configuration, so these custom functions can be 
used in xquery expressions." },
     "namespace": { "index": 5, "kind": "element", "displayName": "Namespace", 
"label": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Injects the XML 
Namespaces of prefix - uri mappings" },
-    "headerName": { "index": 6, "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." },
-    "propertyName": { "index": 7, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 8, "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" }
+    "variableName": { "index": 6, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 7, "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." },
+    "propertyName": { "index": 8, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 9, "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" }
   }
 }
diff --git 
a/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java
 
b/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java
index c3b0fe0dc59..f4d2af3bcfa 100644
--- 
a/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java
+++ 
b/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java
@@ -101,12 +101,8 @@ public abstract class XQueryBuilder implements Expression, 
Predicate, NamespaceA
     private ModuleURIResolver moduleURIResolver;
     private boolean allowStAX;
     private String headerName;
-    /**
-     * Name of property to use as input, instead of the message body.
-     * <p>
-     * It has a lower precedent than the name of header if both are set.
-     */
     private String propertyName;
+    private String variableName;
 
     @Override
     public String toString() {
@@ -546,6 +542,17 @@ public abstract class XQueryBuilder implements Expression, 
Predicate, NamespaceA
         this.propertyName = propertyName;
     }
 
+    public String getVariableName() {
+        return variableName;
+    }
+
+    /**
+     * Name of variable to use as input, instead of the message body
+     */
+    public void setVariableName(String variableName) {
+        this.variableName = variableName;
+    }
+
     public boolean isAllowStAX() {
         return allowStAX;
     }
@@ -576,6 +583,8 @@ public abstract class XQueryBuilder implements Expression, 
Predicate, NamespaceA
             item = in.getHeader(getHeaderName(), Item.class);
         } else if (ObjectHelper.isNotEmpty(getPropertyName())) {
             item = exchange.getProperty(getPropertyName(), Item.class);
+        } else if (ObjectHelper.isNotEmpty(getVariableName())) {
+            item = exchange.getVariable(getVariableName(), Item.class);
         } else {
             item = in.getBody(Item.class);
         }
@@ -587,6 +596,8 @@ public abstract class XQueryBuilder implements Expression, 
Predicate, NamespaceA
                 body = in.getHeader(getHeaderName());
             } else if (ObjectHelper.isNotEmpty(getPropertyName())) {
                 body = exchange.getProperty(getPropertyName());
+            } else if (ObjectHelper.isNotEmpty(getVariableName())) {
+                body = exchange.getVariable(getVariableName());
             } else {
                 body = in.getBody();
             }
@@ -601,6 +612,8 @@ public abstract class XQueryBuilder implements Expression, 
Predicate, NamespaceA
                         is = exchange.getIn().getHeader(getHeaderName(), 
InputStream.class);
                     } else if (ObjectHelper.isNotEmpty(getPropertyName())) {
                         is = exchange.getProperty(getPropertyName(), 
InputStream.class);
+                    } else if (ObjectHelper.isNotEmpty(getVariableName())) {
+                        is = exchange.getVariable(getVariableName(), 
InputStream.class);
                     } else {
                         is = exchange.getIn().getBody(InputStream.class);
                     }
diff --git 
a/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java
 
b/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java
index 77a30a46ace..7afe8b9b890 100644
--- 
a/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java
+++ 
b/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java
@@ -76,6 +76,10 @@ public class XQueryLanguage extends 
SingleInputTypedLanguageSupport implements P
         if (str != null) {
             builder.setPropertyName(str);
         }
+        str = property(String.class, properties, 3, getVariableName());
+        if (str != null) {
+            builder.setVariableName(str);
+        }
         if (configuration != null) {
             builder.setConfiguration(configuration);
         }
@@ -99,6 +103,10 @@ public class XQueryLanguage extends 
SingleInputTypedLanguageSupport implements P
             case "propertyName":
                 
setPropertyName(PropertyConfigurerSupport.property(camelContext, String.class, 
value));
                 return true;
+            case "variablename":
+            case "variableName":
+                
setVariableName(PropertyConfigurerSupport.property(camelContext, String.class, 
value));
+                return true;
             case "configuration":
             case "Configuration":
                 
setConfiguration(PropertyConfigurerSupport.property(camelContext, 
Configuration.class, value));
diff --git 
a/components/camel-stax/src/generated/resources/org/apache/camel/language/xtokenizer/xtokenize.json
 
b/components/camel-stax/src/generated/resources/org/apache/camel/language/xtokenizer/xtokenize.json
index 665716e4d73..084cb91f80b 100644
--- 
a/components/camel-stax/src/generated/resources/org/apache/camel/language/xtokenizer/xtokenize.json
+++ 
b/components/camel-stax/src/generated/resources/org/apache/camel/language/xtokenizer/xtokenize.json
@@ -21,8 +21,9 @@
     "mode": { "index": 2, "kind": "attribute", "displayName": "Mode", 
"required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ 
"i", "w", "u", "t" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "i", "description": "The extraction mode. The available 
extraction modes are: i - injecting the contextual namespace bindings into the 
extracted token (default) w - wrapping the extracted token in its ancestor 
context u - unwrapping the extracted to [...]
     "group": { "index": 3, "kind": "attribute", "displayName": "Group", 
"required": false, "type": "integer", "javaType": "java.lang.Integer", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
group N parts together" },
     "namespace": { "index": 4, "kind": "element", "displayName": "Namespace", 
"label": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Injects the XML 
Namespaces of prefix - uri mappings" },
-    "headerName": { "index": 5, "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." },
-    "propertyName": { "index": 6, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 7, "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" }
+    "variableName": { "index": 5, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 6, "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." },
+    "propertyName": { "index": 7, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 8, "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" }
   }
 }
diff --git 
a/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
 
b/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
index 1cd7381eec0..e1af4582123 100644
--- 
a/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
+++ 
b/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
@@ -59,6 +59,7 @@ public class XMLTokenExpressionIterator extends 
ExpressionAdapter implements Nam
     protected int group;
     protected String headerName;
     protected String propertyName;
+    protected String variableName;
     protected Map<String, String> nsmap;
 
     public XMLTokenExpressionIterator(String path, char mode) {
@@ -116,6 +117,14 @@ public class XMLTokenExpressionIterator extends 
ExpressionAdapter implements Nam
         this.propertyName = propertyName;
     }
 
+    public String getVariableName() {
+        return variableName;
+    }
+
+    public void setVariableName(String variableName) {
+        this.variableName = variableName;
+    }
+
     protected Iterator<?> createIterator(InputStream in, String charset)
             throws XMLStreamException, UnsupportedEncodingException {
         return createIterator(new InputStreamReader(in, charset));
@@ -160,6 +169,9 @@ public class XMLTokenExpressionIterator extends 
ExpressionAdapter implements Nam
             } else if (propertyName != null) {
                 String val = exchange.getProperty(propertyName, String.class);
                 reader = new StringReader(val);
+            } else if (variableName != null) {
+                String val = exchange.getVariable(variableName, String.class);
+                reader = new StringReader(val);
             } else {
                 InputStream in = 
exchange.getIn().getMandatoryBody(InputStream.class);
                 // use xml stream reader which is capable of handling reading 
the xml stream
diff --git 
a/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
 
b/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
index 8b54ce97b01..76fc9f3dbf1 100644
--- 
a/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
+++ 
b/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
@@ -123,6 +123,7 @@ public class XMLTokenizeLanguage extends 
SingleInputLanguageSupport implements P
         }
         String path = expression != null ? expression : this.path;
         answer.setPropertyName(property(String.class, properties, 4, 
getPropertyName()));
+        answer.setVariableName(property(String.class, properties, 5, 
getVariableName()));
         return answer.createExpression(path);
     }
 
@@ -172,6 +173,10 @@ public class XMLTokenizeLanguage extends 
SingleInputLanguageSupport implements P
             case "propertyName":
                 
setPropertyName(PropertyConfigurerSupport.property(camelContext, String.class, 
value));
                 return true;
+            case "variablename":
+            case "variableName":
+                
setVariableName(PropertyConfigurerSupport.property(camelContext, String.class, 
value));
+                return true;
             case "mode":
                 setMode(PropertyConfigurerSupport.property(camelContext, 
char.class, value));
                 return true;
diff --git 
a/components/camel-xpath/src/generated/resources/org/apache/camel/language/xpath/xpath.json
 
b/components/camel-xpath/src/generated/resources/org/apache/camel/language/xpath/xpath.json
index 74524b10d47..b90d9ef9185 100644
--- 
a/components/camel-xpath/src/generated/resources/org/apache/camel/language/xpath/xpath.json
+++ 
b/components/camel-xpath/src/generated/resources/org/apache/camel/language/xpath/xpath.json
@@ -27,8 +27,9 @@
     "threadSafety": { "index": 8, "kind": "attribute", "displayName": "Thread 
Safety", "label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to enable thread-safety for the 
returned result of the xpath expression. This applies to when using NODESET as 
the result type, and the returned set has multiple elements. In this situation 
there can be threa [...]
     "preCompile": { "index": 9, "kind": "attribute", "displayName": "Pre 
Compile", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether to enable 
pre-compiling the xpath expression during initialization phase. pre-compile is 
enabled by default. This can be used to turn off, for example in cases the 
compilation phase is desired at the starting phas [...]
     "namespace": { "index": 10, "kind": "element", "displayName": "Namespace", 
"label": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Injects the XML 
Namespaces of prefix - uri mappings" },
-    "headerName": { "index": 11, "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." },
-    "propertyName": { "index": 12, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 13, "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" }
+    "variableName": { "index": 11, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 12, "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." },
+    "propertyName": { "index": 13, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 14, "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" }
   }
 }
diff --git 
a/core/camel-core-languages/src/generated/resources/org/apache/camel/language/tokenizer/tokenize.json
 
b/core/camel-core-languages/src/generated/resources/org/apache/camel/language/tokenizer/tokenize.json
index d8681f0a172..3d8cea09bf2 100644
--- 
a/core/camel-core-languages/src/generated/resources/org/apache/camel/language/tokenizer/tokenize.json
+++ 
b/core/camel-core-languages/src/generated/resources/org/apache/camel/language/tokenizer/tokenize.json
@@ -26,8 +26,9 @@
     "group": { "index": 7, "kind": "attribute", "displayName": "Group", 
"label": "advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "To group N parts together, for example to split big files into 
chunks of 1000 lines. You can use simple language as the group to support 
dynamic group sizes." },
     "groupDelimiter": { "index": 8, "kind": "attribute", "displayName": "Group 
Delimiter", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Sets the delimiter to use when grouping. If 
this has not been set then token will be used as the delimiter." },
     "skipFirst": { "index": 9, "kind": "attribute", "displayName": "Skip 
First", "label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "To skip the very first element" },
-    "headerName": { "index": 10, "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." },
-    "propertyName": { "index": 11, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 12, "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" }
+    "variableName": { "index": 10, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 11, "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." },
+    "propertyName": { "index": 12, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 13, "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" }
   }
 }
diff --git 
a/core/camel-core-languages/src/main/java/org/apache/camel/language/tokenizer/TokenizeLanguage.java
 
b/core/camel-core-languages/src/main/java/org/apache/camel/language/tokenizer/TokenizeLanguage.java
index 3662e1b0284..9456066bc54 100644
--- 
a/core/camel-core-languages/src/main/java/org/apache/camel/language/tokenizer/TokenizeLanguage.java
+++ 
b/core/camel-core-languages/src/main/java/org/apache/camel/language/tokenizer/TokenizeLanguage.java
@@ -76,6 +76,10 @@ public class TokenizeLanguage extends 
SingleInputLanguageSupport implements Prop
             case "propertyName":
                 
setPropertyName(PropertyConfigurerSupport.property(camelContext, String.class, 
value));
                 return true;
+            case "variablename":
+            case "variableName":
+                
setVariableName(PropertyConfigurerSupport.property(camelContext, String.class, 
value));
+                return true;
             case "regex":
                 setRegex(PropertyConfigurerSupport.property(camelContext, 
Boolean.class, value));
                 return true;
@@ -190,6 +194,7 @@ public class TokenizeLanguage extends 
SingleInputLanguageSupport implements Prop
         answer.setGroup(property(String.class, properties, 8, group));
         answer.setSkipFirst(property(boolean.class, properties, 9, skipFirst));
         answer.setPropertyName(property(String.class, properties, 10, 
getPropertyName()));
+        answer.setVariableName(property(String.class, properties, 11, 
getVariableName()));
         return answer.createExpression(expression);
     }
 
diff --git 
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/tokenize.json
 
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/tokenize.json
index 4fdf222b390..f6c525202bc 100644
--- 
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/tokenize.json
+++ 
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/tokenize.json
@@ -23,8 +23,9 @@
     "group": { "index": 7, "kind": "attribute", "displayName": "Group", 
"label": "advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "To group N parts together, for example to split big files into 
chunks of 1000 lines. You can use simple language as the group to support 
dynamic group sizes." },
     "groupDelimiter": { "index": 8, "kind": "attribute", "displayName": "Group 
Delimiter", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Sets the delimiter to use when grouping. If 
this has not been set then token will be used as the delimiter." },
     "skipFirst": { "index": 9, "kind": "attribute", "displayName": "Skip 
First", "label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "To skip the very first element" },
-    "headerName": { "index": 10, "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." },
-    "propertyName": { "index": 11, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 12, "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" }
+    "variableName": { "index": 10, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 11, "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." },
+    "propertyName": { "index": 12, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 13, "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" }
   }
 }
diff --git 
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/xpath.json
 
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/xpath.json
index 2aec407fe21..64ba6b80fbc 100644
--- 
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/xpath.json
+++ 
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/xpath.json
@@ -24,8 +24,9 @@
     "threadSafety": { "index": 8, "kind": "attribute", "displayName": "Thread 
Safety", "label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether to enable thread-safety for the 
returned result of the xpath expression. This applies to when using NODESET as 
the result type, and the returned set has multiple elements. In this situation 
there can be threa [...]
     "preCompile": { "index": 9, "kind": "attribute", "displayName": "Pre 
Compile", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether to enable 
pre-compiling the xpath expression during initialization phase. pre-compile is 
enabled by default. This can be used to turn off, for example in cases the 
compilation phase is desired at the starting phas [...]
     "namespace": { "index": 10, "kind": "element", "displayName": "Namespace", 
"label": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Injects the XML 
Namespaces of prefix - uri mappings" },
-    "headerName": { "index": 11, "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." },
-    "propertyName": { "index": 12, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 13, "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" }
+    "variableName": { "index": 11, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 12, "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." },
+    "propertyName": { "index": 13, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 14, "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" }
   }
 }
diff --git 
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/xquery.json
 
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/xquery.json
index 3122c3afcd4..dfef4422e13 100644
--- 
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/xquery.json
+++ 
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/xquery.json
@@ -19,8 +19,9 @@
     "type": { "index": 3, "kind": "attribute", "displayName": "Type", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the class name of the result type (type from output) The default result type is 
NodeSet" },
     "configurationRef": { "index": 4, "kind": "attribute", "displayName": 
"Configuration Ref", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Reference to a saxon configuration instance in 
the registry to use for xquery (requires camel-saxon). This may be needed to 
add custom functions to a saxon configuration, so these custom functions can be 
used in xquery expressions." },
     "namespace": { "index": 5, "kind": "element", "displayName": "Namespace", 
"label": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Injects the XML 
Namespaces of prefix - uri mappings" },
-    "headerName": { "index": 6, "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." },
-    "propertyName": { "index": 7, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 8, "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" }
+    "variableName": { "index": 6, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 7, "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." },
+    "propertyName": { "index": 8, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 9, "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" }
   }
 }
diff --git 
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/xtokenize.json
 
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/xtokenize.json
index b9dc68af81f..4fc98b7419d 100644
--- 
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/xtokenize.json
+++ 
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/language/xtokenize.json
@@ -18,8 +18,9 @@
     "mode": { "index": 2, "kind": "attribute", "displayName": "Mode", 
"required": false, "type": "enum", "javaType": "java.lang.String", "enum": [ 
"i", "w", "u", "t" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "i", "description": "The extraction mode. The available 
extraction modes are: i - injecting the contextual namespace bindings into the 
extracted token (default) w - wrapping the extracted token in its ancestor 
context u - unwrapping the extracted to [...]
     "group": { "index": 3, "kind": "attribute", "displayName": "Group", 
"required": false, "type": "integer", "javaType": "java.lang.Integer", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
group N parts together" },
     "namespace": { "index": 4, "kind": "element", "displayName": "Namespace", 
"label": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Injects the XML 
Namespaces of prefix - uri mappings" },
-    "headerName": { "index": 5, "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." },
-    "propertyName": { "index": 6, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
-    "trim": { "index": 7, "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" }
+    "variableName": { "index": 5, "kind": "attribute", "displayName": 
"Variable Name", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of variable to use as input, instead of the message body" 
},
+    "headerName": { "index": 6, "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." },
+    "propertyName": { "index": 7, "kind": "attribute", "displayName": 
"Property Name", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of property to use as input, instead of 
the message body. It has a lower precedent than the headerName if both are 
set." },
+    "trim": { "index": 8, "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" }
   }
 }
diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/language/SingleInputExpressionDefinition.java
 
b/core/camel-core-model/src/main/java/org/apache/camel/model/language/SingleInputExpressionDefinition.java
index d0abc4853a0..3d2afe013f9 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/language/SingleInputExpressionDefinition.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/language/SingleInputExpressionDefinition.java
@@ -27,6 +27,8 @@ import org.apache.camel.spi.Metadata;
  */
 public abstract class SingleInputExpressionDefinition extends 
ExpressionDefinition {
 
+    @XmlAttribute
+    private String variableName;
     @XmlAttribute
     @Metadata(label = "advanced")
     private String headerName;
@@ -47,10 +49,22 @@ public abstract class SingleInputExpressionDefinition 
extends ExpressionDefiniti
 
     protected SingleInputExpressionDefinition(AbstractBuilder<?, ?> builder) {
         super(builder);
+        this.variableName = builder.variableName;
         this.headerName = builder.headerName;
         this.propertyName = builder.propertyName;
     }
 
+    public String getVariableName() {
+        return variableName;
+    }
+
+    /**
+     * Name of variable to use as input, instead of the message body
+     */
+    public void setVariableName(String variableName) {
+        this.variableName = variableName;
+    }
+
     public String getHeaderName() {
         return headerName;
     }
@@ -86,9 +100,18 @@ public abstract class SingleInputExpressionDefinition 
extends ExpressionDefiniti
             T extends AbstractBuilder<T, E>, E extends 
SingleInputExpressionDefinition>
             extends ExpressionDefinition.AbstractBuilder<T, E> {
 
+        private String variableName;
         private String headerName;
         private String propertyName;
 
+        /**
+         * Name of variable to use as input, instead of the message body
+         */
+        public T variableName(String variableName) {
+            this.variableName = variableName;
+            return (T) this;
+        }
+
         /**
          * Name of header to use as input, instead of the message body
          * </p>
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/TokenizerExpressionReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/TokenizerExpressionReifier.java
index ace72909c9c..1760e60587a 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/TokenizerExpressionReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/TokenizerExpressionReifier.java
@@ -31,7 +31,7 @@ public class TokenizerExpressionReifier extends 
ExpressionReifier<TokenizerExpre
     }
 
     protected Object[] createProperties() {
-        Object[] properties = new Object[11];
+        Object[] properties = new Object[12];
         // special for new line tokens, if defined from XML then its 2
         // characters, so we replace that back to a single char
         String token = definition.getToken();
@@ -49,6 +49,7 @@ public class TokenizerExpressionReifier extends 
ExpressionReifier<TokenizerExpre
         properties[8] = parseString(definition.getGroup());
         properties[9] = parseBoolean(definition.getSkipFirst());
         properties[10] = parseString(definition.getPropertyName());
+        properties[11] = parseString(definition.getVariableName());
         return properties;
     }
 
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XMLTokenizerExpressionReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XMLTokenizerExpressionReifier.java
index 8acd19e789d..a65fc5ca12e 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XMLTokenizerExpressionReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XMLTokenizerExpressionReifier.java
@@ -65,12 +65,13 @@ public class XMLTokenizerExpressionReifier extends 
ExpressionReifier<XMLTokenize
     }
 
     protected Object[] createProperties() {
-        Object[] properties = new Object[5];
+        Object[] properties = new Object[6];
         properties[0] = parseString(definition.getHeaderName());
         properties[1] = parseString(definition.getMode());
         properties[2] = parseInt(definition.getGroup());
         properties[3] = definition.getNamespaces();
         properties[4] = parseString(definition.getPropertyName());
+        properties[5] = parseString(definition.getVariableName());
         return properties;
     }
 
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java
index b2dba3efd70..8e0c852df60 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java
@@ -62,7 +62,7 @@ public class XPathExpressionReifier extends 
ExpressionReifier<XPathExpression> {
     }
 
     protected Object[] createProperties() {
-        Object[] properties = new Object[11];
+        Object[] properties = new Object[12];
         properties[0] = definition.getDocumentType();
         // resultType can either point to a QName or it can be a regular class 
that influence the qname
         // so we need this special logic to set resultQName and resultType 
accordingly
@@ -81,6 +81,7 @@ public class XPathExpressionReifier extends 
ExpressionReifier<XPathExpression> {
         properties[8] = parseBoolean(definition.getLogNamespaces());
         properties[9] = parseString(definition.getHeaderName());
         properties[10] = parseString(definition.getPropertyName());
+        properties[11] = parseString(definition.getVariableName());
         return properties;
     }
 
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java
index a1939beeea6..48726d3e5d0 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java
@@ -59,10 +59,11 @@ public class XQueryExpressionReifier extends 
ExpressionReifier<XQueryExpression>
     }
 
     protected Object[] createProperties() {
-        Object[] properties = new Object[3];
+        Object[] properties = new Object[4];
         properties[0] = definition.getResultType();
         properties[1] = parseString(definition.getHeaderName());
         properties[2] = parseString(definition.getPropertyName());
+        properties[3] = parseString(definition.getVariableName());
         return properties;
     }
 
diff --git 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
index 4ae07023836..6c933e6f9dd 100644
--- 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
+++ 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
@@ -3011,6 +3011,7 @@ public class ModelParser extends BaseParser {
             switch (key) {
                 case "headerName": def.setHeaderName(val); break;
                 case "propertyName": def.setPropertyName(val); break;
+                case "variableName": def.setVariableName(val); break;
                 default: return 
expressionDefinitionAttributeHandler().accept(def, key, val);
             }
             return true;
diff --git 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
index d80ec03e463..3c91a0ef247 100644
--- 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
+++ 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
@@ -4145,6 +4145,7 @@ public class ModelWriter extends BaseWriter {
             throws IOException {
         doWriteExpressionDefinitionAttributes(def);
         doWriteAttribute("headerName", def.getHeaderName());
+        doWriteAttribute("variableName", def.getVariableName());
         doWriteAttribute("propertyName", def.getPropertyName());
     }
     protected void doWriteSingleInputExpressionDefinition(
diff --git 
a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
 
b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
index 0a61565954b..e8ea3b2d4c8 100644
--- 
a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
+++ 
b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
@@ -4145,6 +4145,7 @@ public class ModelWriter extends BaseWriter {
             throws IOException {
         doWriteExpressionDefinitionAttributes(def);
         doWriteAttribute("headerName", def.getHeaderName());
+        doWriteAttribute("variableName", def.getVariableName());
         doWriteAttribute("propertyName", def.getPropertyName());
     }
     protected void doWriteSingleInputExpressionDefinition(
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 5e10764e353..f2c34464e85 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
@@ -18432,6 +18432,7 @@ public final class ModelDeserializers extends 
YamlDeserializerSupport {
                     @YamlProperty(name = "skipFirst", type = "boolean", 
description = "To skip the very first element", displayName = "Skip First"),
                     @YamlProperty(name = "token", type = "string", required = 
true, description = "The (start) token to use as tokenizer, for example you can 
use the new line token. You can use simple language as the token to support 
dynamic tokens.", displayName = "Token"),
                     @YamlProperty(name = "trim", type = "boolean", description 
= "Whether to trim the value to remove leading and trailing whitespaces and 
line breaks", displayName = "Trim"),
+                    @YamlProperty(name = "variableName", type = "string", 
description = "Name of variable to use as input, instead of the message body", 
displayName = "Variable Name"),
                     @YamlProperty(name = "xml", type = "boolean", description 
= "Whether the input is XML messages. This option must be set to true if 
working with XML payloads.", displayName = "Xml")
             }
     )
@@ -18515,6 +18516,11 @@ public final class ModelDeserializers extends 
YamlDeserializerSupport {
                     target.setTrim(val);
                     break;
                 }
+                case "variableName": {
+                    String val = asText(node);
+                    target.setVariableName(val);
+                    break;
+                }
                 case "xml": {
                     String val = asText(node);
                     target.setXml(val);
@@ -20508,7 +20514,8 @@ public final class ModelDeserializers extends 
YamlDeserializerSupport {
                     @YamlProperty(name = "mode", type = "enum:i,w,u,t", 
defaultValue = "i", description = "The extraction mode. The available 
extraction modes are: i - injecting the contextual namespace bindings into the 
extracted token (default) w - wrapping the extracted token in its ancestor 
context u - unwrapping the extracted token to its child content t - extracting 
the text content of the specified element", displayName = "Mode"),
                     @YamlProperty(name = "namespace", type = 
"array:org.apache.camel.model.PropertyDefinition", description = "Injects the 
XML Namespaces of prefix - uri mappings", displayName = "Namespace"),
                     @YamlProperty(name = "propertyName", type = "string", 
description = "Name of property to use as input, instead of the message body. 
It has a lower precedent than the headerName if both are set.", displayName = 
"Property Name"),
-                    @YamlProperty(name = "trim", type = "boolean", description 
= "Whether to trim the value to remove leading and trailing whitespaces and 
line breaks", displayName = "Trim")
+                    @YamlProperty(name = "trim", type = "boolean", description 
= "Whether to trim the value to remove leading and trailing whitespaces and 
line breaks", displayName = "Trim"),
+                    @YamlProperty(name = "variableName", type = "string", 
description = "Name of variable to use as input, instead of the message body", 
displayName = "Variable Name")
             }
     )
     public static class XMLTokenizerExpressionDeserializer extends 
YamlDeserializerBase<XMLTokenizerExpression> {
@@ -20571,6 +20578,11 @@ public final class ModelDeserializers extends 
YamlDeserializerSupport {
                     target.setTrim(val);
                     break;
                 }
+                case "variableName": {
+                    String val = asText(node);
+                    target.setVariableName(val);
+                    break;
+                }
                 default: {
                     ExpressionDefinition ed = target.getExpressionType();
                     if (ed != null) {
@@ -20610,7 +20622,8 @@ public final class ModelDeserializers extends 
YamlDeserializerSupport {
                     @YamlProperty(name = "resultType", type = 
"enum:NUMBER,STRING,BOOLEAN,NODESET,NODE", defaultValue = "NODESET", 
description = "Sets the class name of the result type (type from output) The 
default result type is NodeSet", displayName = "Result Type"),
                     @YamlProperty(name = "saxon", type = "boolean", 
description = "Whether to use Saxon.", displayName = "Saxon"),
                     @YamlProperty(name = "threadSafety", type = "boolean", 
description = "Whether to enable thread-safety for the returned result of the 
xpath expression. This applies to when using NODESET as the result type, and 
the returned set has multiple elements. In this situation there can be 
thread-safety issues if you process the NODESET concurrently such as from a 
Camel Splitter EIP in parallel processing mode. This option prevents 
concurrency issues by doing defensive copies o [...]
-                    @YamlProperty(name = "trim", type = "boolean", description 
= "Whether to trim the value to remove leading and trailing whitespaces and 
line breaks", displayName = "Trim")
+                    @YamlProperty(name = "trim", type = "boolean", description 
= "Whether to trim the value to remove leading and trailing whitespaces and 
line breaks", displayName = "Trim"),
+                    @YamlProperty(name = "variableName", type = "string", 
description = "Name of variable to use as input, instead of the message body", 
displayName = "Variable Name")
             }
     )
     public static class XPathExpressionDeserializer extends 
YamlDeserializerBase<XPathExpression> {
@@ -20703,6 +20716,11 @@ public final class ModelDeserializers extends 
YamlDeserializerSupport {
                     target.setTrim(val);
                     break;
                 }
+                case "variableName": {
+                    String val = asText(node);
+                    target.setVariableName(val);
+                    break;
+                }
                 default: {
                     ExpressionDefinition ed = target.getExpressionType();
                     if (ed != null) {
@@ -20737,7 +20755,8 @@ public final class ModelDeserializers extends 
YamlDeserializerSupport {
                     @YamlProperty(name = "propertyName", type = "string", 
description = "Name of property to use as input, instead of the message body. 
It has a lower precedent than the headerName if both are set.", displayName = 
"Property Name"),
                     @YamlProperty(name = "resultType", type = "string", 
description = "Sets the class of the result type (type from output)", 
displayName = "Result Type"),
                     @YamlProperty(name = "trim", type = "boolean", description 
= "Whether to trim the value to remove leading and trailing whitespaces and 
line breaks", displayName = "Trim"),
-                    @YamlProperty(name = "type", type = "string", description 
= "Sets the class name of the result type (type from output) The default result 
type is NodeSet", displayName = "Type")
+                    @YamlProperty(name = "type", type = "string", description 
= "Sets the class name of the result type (type from output) The default result 
type is NodeSet", displayName = "Type"),
+                    @YamlProperty(name = "variableName", type = "string", 
description = "Name of variable to use as input, instead of the message body", 
displayName = "Variable Name")
             }
     )
     public static class XQueryExpressionDeserializer extends 
YamlDeserializerBase<XQueryExpression> {
@@ -20805,6 +20824,11 @@ public final class ModelDeserializers extends 
YamlDeserializerSupport {
                     target.setType(val);
                     break;
                 }
+                case "variableName": {
+                    String val = asText(node);
+                    target.setVariableName(val);
+                    break;
+                }
                 default: {
                     ExpressionDefinition ed = target.getExpressionType();
                     if (ed != null) {
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 fdddfca3136..b05b9ecb44d 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
@@ -13670,6 +13670,11 @@
               "title" : "Trim",
               "description" : "Whether to trim the value to remove leading and 
trailing whitespaces and line breaks"
             },
+            "variableName" : {
+              "type" : "string",
+              "title" : "Variable Name",
+              "description" : "Name of variable to use as input, instead of 
the message body"
+            },
             "xml" : {
               "type" : "boolean",
               "title" : "Xml",
@@ -13798,6 +13803,11 @@
               "type" : "boolean",
               "title" : "Trim",
               "description" : "Whether to trim the value to remove leading and 
trailing whitespaces and line breaks"
+            },
+            "variableName" : {
+              "type" : "string",
+              "title" : "Variable Name",
+              "description" : "Name of variable to use as input, instead of 
the message body"
             }
           }
         } ],
@@ -13886,6 +13896,11 @@
               "type" : "boolean",
               "title" : "Trim",
               "description" : "Whether to trim the value to remove leading and 
trailing whitespaces and line breaks"
+            },
+            "variableName" : {
+              "type" : "string",
+              "title" : "Variable Name",
+              "description" : "Name of variable to use as input, instead of 
the message body"
             }
           }
         } ],
@@ -13947,6 +13962,11 @@
               "type" : "string",
               "title" : "Type",
               "description" : "Sets the class name of the result type (type 
from output) The default result type is NodeSet"
+            },
+            "variableName" : {
+              "type" : "string",
+              "title" : "Variable Name",
+              "description" : "Name of variable to use as input, instead of 
the message body"
             }
           }
         } ],

Reply via email to