You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2024/01/31 09:07:21 UTC
(camel) 05/16: CAMEL-19749: variables - Should also copy message headers into variable when using EIP variables
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch var-headers
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 8fff1ac7ff754f4a9a91c022b234043d55c1db04
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Jan 29 11:28:03 2024 +0100
CAMEL-19749: variables - Should also copy message headers into variable when using EIP variables
---
docs/user-manual/modules/ROOT/pages/variables.adoc | 36 +++++++++++++++-------
1 file changed, 25 insertions(+), 11 deletions(-)
diff --git a/docs/user-manual/modules/ROOT/pages/variables.adoc b/docs/user-manual/modules/ROOT/pages/variables.adoc
index 31bcc331faa..f52dbcc9687 100644
--- a/docs/user-manual/modules/ROOT/pages/variables.adoc
+++ b/docs/user-manual/modules/ROOT/pages/variables.adoc
@@ -173,7 +173,7 @@ camel.variable.user-template = resource:file:/etc/user.json
== Using Variables with EIPs
The following commonly used EIPs for sending and receiving, and transforming messages, have
-first class support for using variables with the message body:
+special support for choosing to use variables over the current `Exchange`:
- from
- to
@@ -185,19 +185,32 @@ first class support for using variables with the message body:
- marshal
The intention is to make it more convenient and easy to _gather data_ from other systems without any ceremony to keep
-existing data by using techniques such as storing the data temporary using headers or exchange properties,
+existing data by using techniques such as storing the data temporary using headers, exchange properties,
or with the xref:components:eips:claimCheck-eip.adoc[Claim Check] EIP.
=== Important concept when using variables and EIPs
-It is **important** to understand that the variables only use the message **body** and does not have support for anything else such
-as message headers. This is on purpose to keep it simpler and only work with the message body as the user data. If you have need
-to use variables with both message body and headers, then you can use `setVariable` and `getVariable`.
+It is **important** to understand that the variables focuses the use of the message **body** only, and makes using **headers** optional.
+This is on purpose to keep it simpler and primary work with the message body as the user data.
+
+The following table summarises what the EIP supports with variables:
+
+|===
+|*EIP* | *VariableSend* | *VariableReceive*
+| From | | yes
+| To | yes | yes
+| ToD | yes | yes
+| Enrich | yes | yes
+| PollEnrich | | yes
+| WireTap | yes |
+| Unmarshal | yes | yes
+| Marshal | yes | yes
+|===
The EIPs listed above have support for using variables when sending and receiving data. This is done by using the `variableSend` and `variableReceive` options
-to specify the name of the variable. When the EIP uses variables then the _data_ itself (i.e. message body) is only what is
-different from 'standard' Camel.
+to specify the name of the variable.
+When the EIP is using variables, then the `Message` on the `Exchange` is not in use, but the body and headers will be from the variable.
For example given the following `Message` containing:
[source,properties]
@@ -207,7 +220,7 @@ header.bar=456
body=Hello World
----
-And a remote service is called via the route below, and this service returns a new header and body:
+And a remote service is called via the route below, and this service returns a new header (`level`) and body:
[tabs]
====
@@ -287,23 +300,24 @@ from:
----
====
-Then the `Message` body is not changed, but everything else is changed as without using variables:
+Then the `Message` is not changed:
[source,properties]
----
header.foo=123
header.bar=456
-header.level=gold
body=Hello World
----
-And the variable contains the data:
+And the variable contains all the data received from the remote HTTP service separated into two variables:
[source,properties]
----
myVar=Bye World
+myVar.headers.level=gold
----
+
=== Using variable to store a copy of the incoming message body
You can configure the `from` to store a copy of the message body into a variable. This makes it easy to have quick access