From 447ec57b446d35edbee4645be44b56bc64ef5a4c Mon Sep 17 00:00:00 2001
From: smjain <49463903+allthingssecurity@users.noreply.github.com>
Date: Thu, 15 Oct 2026 05:55:57 +0530
Subject: [PATCH] CAMEL-25677: camel-wasm - remove the wasm language
Since CAMEL-25531 the wasm endpoint runs WASI command modules. The wasm
language still called a named exported function through the old
alloc/dealloc and JSON envelope protocol. As decided on the review of
CAMEL-25606, the language is removed instead of being moved to WASI;
the module was experimental.
Removed:
- camel-wasm: WasmLanguage and WasmExpression, their generated language
metadata, the language page, and the helpers only the language used
(WasmFunction, WasmSupport, Wasm.FN_ALLOC, Wasm.FN_DEALLOC), with the
Jackson dependencies, the language tests and the functions.wasm test
module and its Rust sources. The endpoint test that used functions.wasm
as a module without _start now builds that module from WAT.
- core: the WasmExpression model, WasmExpressionReifier, wasm(...) in
Builder, ExpressionClause, ExpressionClauseSupport and
LanguageBuilderFactory, and the Java DSL writer support; the generated
model metadata, XML, YAML and Java DSL parsers, writers and YAML
schemas are regenerated, and so are the catalog (language, model and
docs entries, the XML and YAML schemas), the language list of
camel-main, ArtifactUtils and the endpoint DSL javadoc.
- wasm in the language names of the language component, the camel-jbang
checks and refactorings, and the YAML validator.
The wasm endpoint is unchanged. The 4.24 upgrade guide says how to call
a module with the endpoint instead.
Co-Authored-By: Claude Opus 5.5
---
.../camel/catalog/components/language.json | 2 +-
.../org/apache/camel/catalog/docs.properties | 1 -
.../camel/catalog/docs/wasm-language.adoc | 255 ------------------
.../apache/camel/catalog/languages.properties | 1 -
.../apache/camel/catalog/languages/wasm.json | 26 --
.../apache/camel/catalog/models.properties | 1 -
.../camel/catalog/models/aggregate.json | 8 +-
.../apache/camel/catalog/models/cache.json | 2 +-
.../apache/camel/catalog/models/delay.json | 2 +-
.../camel/catalog/models/dynamicRouter.json | 2 +-
.../apache/camel/catalog/models/enrich.json | 2 +-
.../apache/camel/catalog/models/filter.json | 2 +-
.../catalog/models/idempotentConsumer.json | 2 +-
.../org/apache/camel/catalog/models/loop.json | 2 +-
.../camel/catalog/models/onException.json | 6 +-
.../apache/camel/catalog/models/onWhen.json | 2 +-
.../camel/catalog/models/pollEnrich.json | 2 +-
.../catalog/models/predicateValidator.json | 2 +-
.../catalog/models/propertyExpression.json | 2 +-
.../camel/catalog/models/recipientList.json | 2 +-
.../camel/catalog/models/resequence.json | 2 +-
.../camel/catalog/models/routingSlip.json | 2 +-
.../apache/camel/catalog/models/script.json | 2 +-
.../apache/camel/catalog/models/setBody.json | 2 +-
.../camel/catalog/models/setHeader.json | 2 +-
.../camel/catalog/models/setProperty.json | 2 +-
.../camel/catalog/models/setVariable.json | 2 +-
.../org/apache/camel/catalog/models/sort.json | 2 +-
.../apache/camel/catalog/models/split.json | 2 +-
.../catalog/models/stickyLoadBalancer.json | 2 +-
.../apache/camel/catalog/models/switch.json | 2 +-
.../apache/camel/catalog/models/throttle.json | 4 +-
.../camel/catalog/models/transform.json | 2 +-
.../apache/camel/catalog/models/validate.json | 2 +-
.../org/apache/camel/catalog/models/wasm.json | 23 --
.../org/apache/camel/catalog/models/when.json | 2 +-
.../camel/catalog/schemas/camel-spring.xsd | 51 ----
.../camel/catalog/schemas/camel-xml-io.xsd | 51 ----
.../catalog/schemas/camelYamlDsl-model.json | 77 ------
.../camel/component/language/language.json | 2 +-
.../component/language/LanguageEndpoint.java | 2 +-
components/camel-wasm/pom.xml | 14 -
.../org/apache/camel/language/wasm/wasm.json | 26 --
.../org/apache/camel/language.properties | 7 -
.../services/org/apache/camel/language/wasm | 2 -
.../src/main/docs/wasm-language.adoc | 255 ------------------
.../camel/language/wasm/WasmExpression.java | 168 ------------
.../camel/language/wasm/WasmLanguage.java | 85 ------
.../main/java/org/apache/camel/wasm/Wasm.java | 2 -
.../org/apache/camel/wasm/WasmFunction.java | 168 ------------
.../org/apache/camel/wasm/WasmSupport.java | 51 ----
.../component/wasm/WasmComponentTest.java | 4 +-
.../camel/language/wasm/WasmLanguageTest.java | 129 ---------
.../apache/camel/wasm/WasmFunctionTest.java | 177 ------------
.../src/test/resources/functions.wasm | Bin 2216042 -> 0 bytes
.../camel-wasm/src/test/rust/Cargo.lock | 124 ---------
.../camel-wasm/src/test/rust/Cargo.toml | 37 ---
components/camel-wasm/src/test/rust/build.sh | 26 --
.../camel-wasm/src/test/rust/functions.rs | 134 ---------
.../org/apache/camel/model/aggregate.json | 8 +-
.../org/apache/camel/model/cache.json | 2 +-
.../org/apache/camel/model/delay.json | 2 +-
.../org/apache/camel/model/dynamicRouter.json | 2 +-
.../org/apache/camel/model/enrich.json | 2 +-
.../org/apache/camel/model/filter.json | 2 +-
.../camel/model/idempotentConsumer.json | 2 +-
.../org/apache/camel/model/language/wasm.json | 23 --
.../loadbalancer/stickyLoadBalancer.json | 2 +-
.../META-INF/org/apache/camel/model/loop.json | 2 +-
.../org/apache/camel/model/onException.json | 6 +-
.../org/apache/camel/model/onWhen.json | 2 +-
.../org/apache/camel/model/pollEnrich.json | 2 +-
.../camel/model/propertyExpression.json | 2 +-
.../org/apache/camel/model/recipientList.json | 2 +-
.../org/apache/camel/model/resequence.json | 2 +-
.../org/apache/camel/model/routingSlip.json | 2 +-
.../org/apache/camel/model/script.json | 2 +-
.../org/apache/camel/model/setBody.json | 2 +-
.../org/apache/camel/model/setHeader.json | 2 +-
.../org/apache/camel/model/setProperty.json | 2 +-
.../org/apache/camel/model/setVariable.json | 2 +-
.../META-INF/org/apache/camel/model/sort.json | 2 +-
.../org/apache/camel/model/split.json | 2 +-
.../org/apache/camel/model/switch.json | 2 +-
.../org/apache/camel/model/throttle.json | 4 +-
.../org/apache/camel/model/transform.json | 2 +-
.../org/apache/camel/model/validate.json | 2 +-
.../model/validator/predicateValidator.json | 2 +-
.../META-INF/org/apache/camel/model/when.json | 2 +-
.../org/apache/camel/model.properties | 1 -
.../apache/camel/model/language/jaxb.index | 1 -
.../org/apache/camel/builder/Builder.java | 18 --
.../camel/builder/ExpressionClause.java | 23 --
.../builder/ExpressionClauseSupport.java | 26 --
.../camel/builder/LanguageBuilderFactory.java | 18 --
.../camel/model/language/WasmExpression.java | 102 -------
.../reifier/language/ExpressionReifier.java | 3 -
.../language/WasmExpressionReifier.java | 42 ---
.../camel/java/out/JavaDslModelWriter.java | 17 --
.../java/out/JavaDslModelWriterSupport.java | 6 -
.../camel/java/in/replay-builder-methods.txt | 2 -
.../apache/camel/main/languages.properties | 1 -
.../org/apache/camel/util/ArtifactUtils.java | 1 -
.../org/apache/camel/xml/in/ModelParser.java | 7 -
.../org/apache/camel/xml/out/ModelWriter.java | 11 -
.../camel/yaml/out/YamlModelWriter.java | 11 -
.../modules/languages/examples/json/wasm.json | 1 -
docs/components/modules/languages/nav.adoc | 1 -
.../languages/pages/wasm-language.adoc | 1 -
.../pages/camel-4x-upgrade-guide-4_24.adoc | 10 +-
.../endpoint/StaticEndpointBuilders.java | 8 +-
.../dsl/LanguageEndpointBuilderFactory.java | 8 +-
.../jbang/core/commands/ai/BeanRefChecks.java | 2 +-
.../core/commands/tui/RouteRefactorings.java | 2 +-
.../ExpressionDeserializers.java | 5 -
.../deserializers/ModelDeserializers.java | 86 ------
.../ModelDeserializersResolver.java | 2 -
.../dsl/yaml/validator/YamlValidator.java | 2 +-
.../schema/camelYamlDsl-canonical.json | 47 ----
.../resources/schema/camelYamlDsl-model.json | 77 ------
.../resources/schema/camelYamlDsl.json | 100 -------
121 files changed, 93 insertions(+), 2613 deletions(-)
delete mode 100644 catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/wasm-language.adoc
delete mode 100644 catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/wasm.json
delete mode 100644 catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/wasm.json
delete mode 100644 components/camel-wasm/src/generated/resources/META-INF/org/apache/camel/language/wasm/wasm.json
delete mode 100644 components/camel-wasm/src/generated/resources/META-INF/services/org/apache/camel/language.properties
delete mode 100644 components/camel-wasm/src/generated/resources/META-INF/services/org/apache/camel/language/wasm
delete mode 100644 components/camel-wasm/src/main/docs/wasm-language.adoc
delete mode 100644 components/camel-wasm/src/main/java/org/apache/camel/language/wasm/WasmExpression.java
delete mode 100644 components/camel-wasm/src/main/java/org/apache/camel/language/wasm/WasmLanguage.java
delete mode 100644 components/camel-wasm/src/main/java/org/apache/camel/wasm/WasmFunction.java
delete mode 100644 components/camel-wasm/src/main/java/org/apache/camel/wasm/WasmSupport.java
delete mode 100644 components/camel-wasm/src/test/java/org/apache/camel/language/wasm/WasmLanguageTest.java
delete mode 100644 components/camel-wasm/src/test/java/org/apache/camel/wasm/WasmFunctionTest.java
delete mode 100755 components/camel-wasm/src/test/resources/functions.wasm
delete mode 100644 components/camel-wasm/src/test/rust/Cargo.lock
delete mode 100644 components/camel-wasm/src/test/rust/Cargo.toml
delete mode 100755 components/camel-wasm/src/test/rust/build.sh
delete mode 100644 components/camel-wasm/src/test/rust/functions.rs
delete mode 100644 core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/language/wasm.json
delete mode 100644 core/camel-core-model/src/main/java/org/apache/camel/model/language/WasmExpression.java
delete mode 100644 core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/WasmExpressionReifier.java
delete mode 120000 docs/components/modules/languages/examples/json/wasm.json
delete mode 120000 docs/components/modules/languages/pages/wasm-language.adoc
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/language.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/language.json
index 201bfbbf49042..fb260589ad386 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/language.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/language.json
@@ -33,7 +33,7 @@
"CamelLanguageScript": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String or Expression", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The script to execute provided in the header. Takes precedence over script configured on the endpoint.", "constantName": "org.apache.camel.component.language.LanguageConstants#LANGUAGE_SCRIPT" }
},
"properties": {
- "languageName": { "index": 0, "kind": "path", "displayName": "Language Name", "group": "producer", "label": "", "required": true, "type": "enum", "javaType": "java.lang.String", "enum": [ "bean", "constant", "datasonnet", "exchangeProperty", "file", "groovy", "header", "hl7terser", "java", "joor", "jq", "js", "jsonpath", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Sets the name of the language to use" },
+ "languageName": { "index": 0, "kind": "path", "displayName": "Language Name", "group": "producer", "label": "", "required": true, "type": "enum", "javaType": "java.lang.String", "enum": [ "bean", "constant", "datasonnet", "exchangeProperty", "file", "groovy", "header", "hl7terser", "java", "joor", "jq", "js", "jsonpath", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Sets the name of the language to use" },
"resourceUri": { "index": 1, "kind": "path", "displayName": "Resource Uri", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "description": "Path to the resource, or a reference to lookup a bean in the Registry to use as the resource" },
"allowContextMapAll": { "index": 2, "kind": "parameter", "displayName": "Allow Context Map All", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether the context map should allow access to all details. By default only the message body and headers can be accessed. This option can be enabled for full access to the current Exchange and CamelContext. Doing so impose a potential security risk as this opens access to the full power of CamelContext API." },
"allowTemplateFromHeader": { "index": 3, "kind": "parameter", "displayName": "Allow Template From Header", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to allow to use resource template from header or not (default false). Enabling this allows to specify dynamic templates via message header. However this can be seen as a potential security vulnerability if the header is coming from a malicious user, so use this with care." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties
index 488fc5343155c..8876be215cf65 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties
@@ -691,7 +691,6 @@ vertx-http-component
vertx-websocket-component
wal
wasm-component
-wasm-language
weather-component
weaviate-component
web3j-component
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/wasm-language.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/wasm-language.adoc
deleted file mode 100644
index e78879a52e012..0000000000000
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/wasm-language.adoc
+++ /dev/null
@@ -1,255 +0,0 @@
-= Wasm Language
-:doctitle: Wasm
-:shortname: wasm
-:artifactid: camel-wasm
-:description: Call a wasm (web assembly) function
-:since: 4.5
-:supportlevel: Experimental
-:tabs-sync-option:
-
-*Since Camel {since}*
-
-Camel supports Wasm to allow using xref:manual::expression.adoc[Expression] or xref:manual::predicate.adoc[Predicate].
-
-== Wasm Options
-
-// language options: START
-include::partial$language-options.adoc[]
-// language options: END
-
-
-== Writing A Wasm function
-
-In _Wasm_, sharing objects between the host, in this case the _JVM_, and the _Wasm_ module is deliberately restricted and as of today, it requires a number of steps:
-
-1. From the _host_, call a function inside the webassembly module that allocates a block of memory and returns its address, then save it
-2. From the _host_, write the data that should be exchanged with the _Wasm_ module to the saved address
-3. From the _host_, invoke the required function passing both the address where the data is written and its size
-4. From the _Wasm_ module, read the data and process it
-5. From the _host_, release the memory when done
-
-=== Providing functions for memory management
-
-The module hosting the function *must* provide the functions to allocate/deallocate memory that *must* be named `alloc` and `dealloc` respectively.
-
-Here's an example of the mentioned functions implemented in https://www.rust-lang.org[Rust]:
-
-[source,rust]
-----
-pub extern "C" fn alloc(size: u32) -> *mut u8 {
- let mut buf = Vec::with_capacity(size as usize);
- let ptr = buf.as_mut_ptr();
-
- // tell Rust not to clean this up
- mem::forget(buf);
-
- ptr
-}
-
-pub unsafe extern "C" fn dealloc(ptr: &mut u8, len: i32) {
- // Retakes the pointer which allows its memory to be freed.
- let _ = Vec::from_raw_parts(ptr, 0, len as usize);
-}
-----
-
-=== Data shapes
-
-It is not possible to share a Java object with the Wasm module directly, and as mentioned before,
-data exchange leverages Wasm's memory that can be accessed by both the host and the guest runtimes.
-At this stage, the data structure that the component exchange with the Wasm function is a subset of the Apache Camel Message,
-containing headers the body encoded as a base64 string:
-
-._Java-only: data wrapper class definition_
-[source,java]
-----
-public static class Wrapper {
- @JsonProperty
- public Map headers = new HashMap<>();
-
- @JsonProperty
- public byte[] body;
-}
-----
-
-=== Data processing
-
-The component expects the processing function to have the following signature:
-
-[source,rust]
-----
-fn function(ptr: u32, len: u32) -> u64
-----
-
-* it accepts two 32bit unsigned integers arguments
-** a pointer to the memory location when the input data has been written (`ptr`)
-** the size of the input data (`len`)
-* it returns a 64bit unsigned integer where:
-** the first 32bit represents a pointer to the return data
-** the last 31bit represents the size of the return data
-** the most significant bit of the returned data size is reserved to signal an error, so if it is set, then the return data could contain an error message/code/etc
-
-Here's an example of a complete function:
-
-[source,rust]
-----
-#[derive(Serialize, Deserialize)]
-struct Message {
- headers: HashMap,
-
- #[serde(with = "Base64Standard")]
- body: Vec,
-}
-
-#[cfg_attr(all(target_arch = "wasm32"), export_name = "transform")]
-#[no_mangle]
-pub extern fn transform(ptr: u32, len: u32) -> u64 {
- let bytes = unsafe {
- slice::from_raw_parts_mut(
- ptr as *mut u8,
- len as usize)
- };
-
- let msg: Message = serde_json::from_slice(bytes).unwrap();
- let res = String::from_utf8(msg.body).unwrap().to_uppercase().as_bytes().to_vec();
-
- let out_len = res.len();
- let out_ptr = alloc(out_len as u32);
-
- unsafe {
- std::ptr::copy_nonoverlapping(
- res.as_ptr(),
- out_ptr,
- out_len as usize)
- };
-
- return ((out_ptr as u64) << 32) | out_len as u64;
-}
-----
-
-=== Errors and module state
-
-The module is instantiated once per `wasm` expression and that instance handles every message, one at a time, so data
-the module keeps in its memory or globals carries over from one message to the next.
-
-* When the function returns with the error bit set, the error data is released with `dealloc` using its size without
-the error bit, the error data becomes the message of the exception, and the instance is kept.
-* When the call fails without returning, for example on a Rust `panic` or any other Wasm trap, the instance is
-discarded and a new one is created from the module for the next message. Whatever the failed call allocated can no
-longer be released, so keeping the instance would grow its memory with every failure. Any state the module kept in
-the discarded instance is lost.
-On a route where every call fails this way, the module is instantiated again for every message (its data segments
-are copied and any start function runs), which costs more than a call on a kept instance.
-
-== Examples
-
-Supposing we have compiled a Wasm module containing the function above, then it can be called in a Camel Route by its name and module resource location:
-
-[tabs]
-====
-Java::
-+
-[source,java]
-----
-from("direct:in")
- .transform()
- .wasm("transform", "classpath://functions.wasm");
-----
-
-XML::
-+
-[source,xml]
-----
-
-
-
- transform
-
-
-----
-
-YAML::
-+
-[source,yaml]
-----
-- route:
- from:
- uri: direct:in
- steps:
- - transform:
- expression:
- wasm:
- expression: transform
- module: classpath://functions.wasm
-----
-====
-
-
-== Using Wasm as a predicate
-
-When the function is used as a xref:manual::predicate.adoc[Predicate], for example with the
-xref:eips:filter-eip.adoc[Filter] EIP, its result is converted to a boolean depending on the result type:
-
-* With the default result type (`byte[]`) or `String`, the returned bytes are read as a string and the
-standard Camel rules apply: `true` and `false` (in any case) are parsed, empty data is `false`, and any
-other value is `true`. So the function can simply return `true` or `false`.
-* With the result type `Boolean`, only `true` and `false` (in any case) are accepted: any other value,
-including empty data, is `false`.
-* With a Jackson `JsonNode` result type, only the JSON boolean `true` matches.
-
-[tabs]
-====
-Java::
-+
-[source,java]
-----
-from("direct:in")
- .filter().wasm("is_valid", "classpath://functions.wasm")
- .to("direct:valid");
-----
-
-XML::
-+
-[source,xml]
-----
-
-
-
- is_valid
-
-
-
-----
-
-YAML::
-+
-[source,yaml]
-----
-- route:
- from:
- uri: direct:in
- steps:
- - filter:
- expression:
- wasm:
- expression: is_valid
- module: classpath://functions.wasm
- steps:
- - to:
- uri: direct:valid
-----
-====
-
-
-== Dependencies
-
-If you use Maven you could add the following to your `pom.xml`,
-substituting the version number for the latest and greatest release.
-
-[source,xml]
-----
-
- org.apache.camel
- camel-wasm
- x.x.x
-
-----
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages.properties
index 96c24835cd37d..1ecd8457f67cb 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages.properties
@@ -24,7 +24,6 @@ spel
tokenize
typesafe-ai
variable
-wasm
xpath
xquery
xtokenize
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/wasm.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/wasm.json
deleted file mode 100644
index ded5b9d79d6bd..0000000000000
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/wasm.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "language": {
- "kind": "language",
- "name": "wasm",
- "title": "Wasm",
- "description": "Call a wasm (web assembly) function",
- "deprecated": false,
- "firstVersion": "4.5.0",
- "label": "language",
- "javaType": "org.apache.camel.language.wasm.WasmLanguage",
- "supportLevel": "Experimental",
- "groupId": "org.apache.camel",
- "artifactId": "camel-wasm",
- "version": "4.24.0-SNAPSHOT",
- "modelName": "wasm",
- "modelJavaType": "org.apache.camel.model.language.WasmExpression"
- },
- "properties": {
- "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node." },
- "expression": { "index": 1, "kind": "value", "displayName": "Expression", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax." },
- "module": { "index": 2, "kind": "attribute", "displayName": "Module", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Set the module (the distributable, loadable, and executable unit of code in WebAssembly) resource that provides the expression function." },
- "resultType": { "index": 3, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The class of the result type (type from output)." },
- "trim": { "index": 4, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the source code to remove leading and trailing whitespaces and line breaks." },
- "resolveResource": { "index": 5, "kind": "attribute", "displayName": "Resolve Resource", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether a result of the expression that is a String starting with resource: is loaded as a resource and its content becomes the result, e.g. a script that returns resource:file:order.json or resource:classpath:templates\/order.json (a name without a scheme is a classpath resource). Off by default; the resource: prefix on the expression text itself is always resolved. Applies to the expression used as a value, not as a predicate." }
- }
-}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
index 387da664462d4..6454583afeae2 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
@@ -230,7 +230,6 @@ validate
validators
value
variable
-wasm
weightedLoadBalancer
when
wireTap
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/aggregate.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/aggregate.json
index b44e99f13f841..289b5ccd13dd5 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/aggregate.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/aggregate.json
@@ -17,10 +17,10 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "correlationExpression": { "index": 4, "kind": "expression", "displayName": "Correlation Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression used to calculate the correlation key to use for aggregation. Exchanges with the same correlation key are aggregated together. If the correlation key cannot be evaluated an Exception is thrown." },
- "completionPredicate": { "index": 5, "kind": "expression", "displayName": "Completion Predicate", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "A predicate to indicate when an aggregated exchange is complete. If not specified and the AggregationStrategy implements Predicate, it will be used as the completionPredicate." },
- "completionTimeoutExpression": { "index": 6, "kind": "expression", "displayName": "Completion Timeout Expression", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Time in millis that an aggregated exchange should be inactive before its complete (timeout), evaluated as an expression allowing dynamic timeout values." },
- "completionSizeExpression": { "index": 7, "kind": "expression", "displayName": "Completion Size Expression", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Number of messages aggregated before the aggregation is complete, evaluated as an expression allowing dynamic size values." },
+ "correlationExpression": { "index": 4, "kind": "expression", "displayName": "Correlation Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression used to calculate the correlation key to use for aggregation. Exchanges with the same correlation key are aggregated together. If the correlation key cannot be evaluated an Exception is thrown." },
+ "completionPredicate": { "index": 5, "kind": "expression", "displayName": "Completion Predicate", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "A predicate to indicate when an aggregated exchange is complete. If not specified and the AggregationStrategy implements Predicate, it will be used as the completionPredicate." },
+ "completionTimeoutExpression": { "index": 6, "kind": "expression", "displayName": "Completion Timeout Expression", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Time in millis that an aggregated exchange should be inactive before its complete (timeout), evaluated as an expression allowing dynamic timeout values." },
+ "completionSizeExpression": { "index": 7, "kind": "expression", "displayName": "Completion Size Expression", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Number of messages aggregated before the aggregation is complete, evaluated as an expression allowing dynamic size values." },
"optimisticLockRetryPolicy": { "index": 8, "kind": "element", "displayName": "Optimistic Lock Retry Policy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.model.OptimisticLockRetryPolicyDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Configures retry settings when using optimistic locking." },
"parallelProcessing": { "index": 9, "kind": "attribute", "displayName": "Parallel Processing", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "When completed exchanges are sent out of the aggregator, this option indicates whether Camel should use a thread pool with multiple threads for concurrency." },
"optimisticLocking": { "index": 10, "kind": "attribute", "displayName": "Optimistic Locking", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Turns on optimistic locking, which requires the aggregation repository to implement OptimisticLockingAggregationRepository." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/cache.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/cache.json
index 08f5ce5c924b6..159cd3acf48a3 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/cache.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/cache.json
@@ -17,7 +17,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Expression to compute the cache key. Messages with the same key share the cached result." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Expression to compute the cache key. Messages with the same key share the cached result." },
"keyValueRepository": { "index": 5, "kind": "attribute", "displayName": "Key Value Repository", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.spi.KeyValueRepository", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the reference name of the KeyValueRepository to use as the cache backing store. If not set, a MemoryKeyValueRepository is auto-created." },
"ttl": { "index": 6, "kind": "attribute", "displayName": "Ttl", "group": "common", "required": false, "type": "duration", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "-1", "description": "Sets the time-to-live for cached entries. Supports duration syntax (e.g. 10m, 1h) or milliseconds. Default: -1 (no expiration)." },
"cacheNull": { "index": 7, "kind": "attribute", "displayName": "Cache Null", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to cache null results. By default, null message bodies are not cached." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/delay.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/delay.json
index a1ad1e5f75d37..a70f33c5a93ac 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/delay.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/delay.json
@@ -17,7 +17,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression that determines the delay duration in milliseconds." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression that determines the delay duration in milliseconds." },
"asyncDelayed": { "index": 5, "kind": "attribute", "displayName": "Async Delayed", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Enables asynchronous delay which means the thread will not block while delaying." },
"callerRunsWhenRejected": { "index": 6, "kind": "attribute", "displayName": "Caller Runs When Rejected", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether or not the caller should run the task when it was rejected by the thread pool." },
"executorService": { "index": 7, "kind": "attribute", "displayName": "Executor Service", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.concurrent.ExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom thread pool if asyncDelay has been enabled." }
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dynamicRouter.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dynamicRouter.json
index 23ea567272053..5382f92c8cc8f 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dynamicRouter.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dynamicRouter.json
@@ -17,7 +17,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to compute the next endpoint URI to route to. The expression is called iteratively until it returns null to indicate the end of routing." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to compute the next endpoint URI to route to. The expression is called iteratively until it returns null to indicate the end of routing." },
"uriDelimiter": { "index": 5, "kind": "attribute", "displayName": "Uri Delimiter", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": ",", "description": "The delimiter used to separate endpoint URIs when the expression returns multiple endpoints. Default is comma." },
"ignoreInvalidEndpoints": { "index": 6, "kind": "attribute", "displayName": "Ignore Invalid Endpoints", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then invalid endpoint URIs are ignored and logged instead of throwing an exception." },
"cacheSize": { "index": 7, "kind": "attribute", "displayName": "Cache Size", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Configures the cache size for ProducerCache which caches producers for reuse. The default cache size is 1000. Set to -1 to turn off caching." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/enrich.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/enrich.json
index 757e68c4c0140..2f1da84e8b8bb 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/enrich.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/enrich.json
@@ -17,7 +17,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to compute the endpoint URI to enrich from." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to compute the endpoint URI to enrich from." },
"variableSend": { "index": 5, "kind": "attribute", "displayName": "Variable Send", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a variable as the source for the message body to send. When using send variable then the message body is taken from this variable instead of the current message, however the headers from the message will still be used as well." },
"variableReceive": { "index": 6, "kind": "attribute", "displayName": "Variable Receive", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a variable to store the received message body (only body, not headers). This makes it handy to use variables for user data and to easily control what data to use for sending and receiving." },
"aggregationStrategy": { "index": 7, "kind": "attribute", "displayName": "Aggregation Strategy", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.AggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the AggregationStrategy to be used to merge the reply from the external service, into a single outgoing message. By default Camel will use the reply from the external service as outgoing message." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/filter.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/filter.json
index 14e7752a5be72..4e72dc3ae81bb 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/filter.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/filter.json
@@ -17,7 +17,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "The predicate expression to evaluate. Messages where the predicate returns false are filtered out and not routed further." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "The predicate expression to evaluate. Messages where the predicate returns false are filtered out and not routed further." },
"statusPropertyName": { "index": 5, "kind": "attribute", "displayName": "Status Property Name", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of an exchange property to store whether the filter predicate matched or not. The value is stored as a boolean." },
"outputs": { "index": 6, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List>", "oneOf": [ "a2aSubTask", "aggregate", "bean", "cache", "choice", "circuitBreaker", "claimCheck", "convertBodyTo", "convertHeaderTo", "convertVariableTo", "delay", "doCatch", "doFinally", "doTry", "dynamicRouter", "enrich", "filter", "idempotentConsumer", "intercept", "interceptFrom", "interceptSendToEndpoint", "kamelet", "loadBalance", "log", "loop", "marshal", "multicast", "onCompletion", "onException", "pausable", "pipeline", "policy", "poll", "pollEnrich", "process", "recipientList", "removeHeader", "removeHeaders", "removeProperties", "removeProperty", "removeVariable", "resequence", "resumable", "rollback", "routingSlip", "saga", "sample", "script", "setBody", "setExchangePattern", "setHeader", "setHeaders", "setProperty", "setVariable", "setVariables", "sort", "split", "step", "stop", "switch", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false }
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/idempotentConsumer.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/idempotentConsumer.json
index f027166a0bfc3..42b65e18142d4 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/idempotentConsumer.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/idempotentConsumer.json
@@ -17,7 +17,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to compute the unique message ID used for duplicate detection. Messages with the same ID are treated as duplicates and skipped." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to compute the unique message ID used for duplicate detection. Messages with the same ID are treated as duplicates and skipped." },
"idempotentRepository": { "index": 5, "kind": "attribute", "displayName": "Idempotent Repository", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.spi.IdempotentRepository", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the reference name of the message id repository to use for storing processed message ids to detect duplicates." },
"eager": { "index": 6, "kind": "attribute", "displayName": "Eager", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Sets whether to eagerly add the key to the idempotent repository or wait until the exchange is complete. Eager is default enabled." },
"completionEager": { "index": 7, "kind": "attribute", "displayName": "Completion Eager", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether to complete the idempotent consumer eager or when the exchange is done." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/loop.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/loop.json
index 08cffb3e6a881..5d6a11f3e80f9 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/loop.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/loop.json
@@ -17,7 +17,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression that determines the number of times to loop. The result is converted to an integer." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression that determines the number of times to loop. The result is converted to an integer." },
"copy": { "index": 5, "kind": "attribute", "displayName": "Copy", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled, a copy of the input Exchange is used for each iteration. That means each iteration will start from a copy of the same message." },
"doWhile": { "index": 6, "kind": "attribute", "displayName": "Do While", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enables the while loop that loops until the predicate evaluates to false or null." },
"breakOnShutdown": { "index": 7, "kind": "attribute", "displayName": "Break On Shutdown", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled, the loop will not iterate until it reaches the end when Camel is shut down." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/onException.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/onException.json
index e0ed0003e5046..002a33850fee0 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/onException.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/onException.json
@@ -18,11 +18,11 @@
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
"exception": { "index": 4, "kind": "element", "displayName": "Exception", "group": "common", "required": true, "type": "array", "javaType": "java.util.List", "deprecated": false, "autowired": false, "secret": false, "description": "A list of exception class names to catch and handle." },
"onWhen": { "index": 5, "kind": "element", "displayName": "On When", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.model.OnWhenDefinition", "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "To use an expression to only trigger this in specific situations" },
- "retryWhile": { "index": 6, "kind": "expression", "displayName": "Retry While", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "Sets a predicate to control whether redelivery should continue. Redelivery continues as long as the predicate evaluates to true." },
+ "retryWhile": { "index": 6, "kind": "expression", "displayName": "Retry While", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "Sets a predicate to control whether redelivery should continue. Redelivery continues as long as the predicate evaluates to true." },
"redeliveryPolicy": { "index": 7, "kind": "element", "displayName": "Redelivery Policy", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.model.RedeliveryPolicyDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Configures redelivery options such as maximum redeliveries, delays, and logging behavior." },
"redeliveryPolicyRef": { "index": 8, "kind": "attribute", "displayName": "Redelivery Policy Ref", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a redelivery policy to lookup in the registry to be used." },
- "handled": { "index": 9, "kind": "expression", "displayName": "Handled", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "When handled is set to true, the exception is suppressed and not sent back to the caller. The original route stops at the point of failure and only the steps in this onException block execute. The response returned to the caller is whatever this onException block produces. Use continued instead if you want to resume the original route from the point of failure." },
- "continued": { "index": 10, "kind": "expression", "displayName": "Continued", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "When continued is set to true, the exception is handled and routing continues from the point of failure. Unlike handled, which stops the original route and only runs the onException block, continued resumes the original route after the onException steps complete. The exception is considered handled as well." },
+ "handled": { "index": 9, "kind": "expression", "displayName": "Handled", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "When handled is set to true, the exception is suppressed and not sent back to the caller. The original route stops at the point of failure and only the steps in this onException block execute. The response returned to the caller is whatever this onException block produces. Use continued instead if you want to resume the original route from the point of failure." },
+ "continued": { "index": 10, "kind": "expression", "displayName": "Continued", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "When continued is set to true, the exception is handled and routing continues from the point of failure. Unlike handled, which stops the original route and only runs the onException block, continued resumes the original route after the onException steps complete. The exception is considered handled as well." },
"onRedeliveryRef": { "index": 11, "kind": "attribute", "displayName": "On Redelivery Ref", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor that is invoked before each redelivery attempt. Can be used to change the exchange before it is redelivered." },
"onExceptionOccurredRef": { "index": 12, "kind": "attribute", "displayName": "On Exception Occurred Ref", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor that is invoked just after an exception occurred. Can be used to perform custom logging. Any exception thrown from this processor is ignored." },
"useOriginalMessage": { "index": 13, "kind": "attribute", "displayName": "Use Original Message", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled, uses the original input message (body and headers) when the exchange is moved to the dead letter queue after all redelivery attempts have been exhausted. Cannot be used together with useOriginalBody." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/onWhen.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/onWhen.json
index c3a724a63f5c3..65b02b1ca1d94 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/onWhen.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/onWhen.json
@@ -15,6 +15,6 @@
"id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" },
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
- "expression": { "index": 3, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "The predicate expression to evaluate." }
+ "expression": { "index": 3, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "The predicate expression to evaluate." }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/pollEnrich.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/pollEnrich.json
index 2e7d3b6974529..6f0f77d21a78a 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/pollEnrich.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/pollEnrich.json
@@ -17,7 +17,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to compute the endpoint URI to poll-enrich from." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to compute the endpoint URI to poll-enrich from." },
"variableReceive": { "index": 5, "kind": "attribute", "displayName": "Variable Receive", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a variable to store the received message body (only body, not headers). This makes it handy to use variables for user data and to easily control what data to use for sending and receiving." },
"aggregationStrategy": { "index": 6, "kind": "attribute", "displayName": "Aggregation Strategy", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.AggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the AggregationStrategy to be used to merge the reply from the external service, into a single outgoing message. By default Camel will use the reply from the external service as outgoing message." },
"aggregationStrategyMethodName": { "index": 7, "kind": "attribute", "displayName": "Aggregation Strategy Method Name", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option can be used to explicitly declare the method name to use, when using POJOs as the AggregationStrategy." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/predicateValidator.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/predicateValidator.json
index f595bbb22f1d2..8cbbb2bd06d34 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/predicateValidator.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/predicateValidator.json
@@ -12,7 +12,7 @@
"output": false
},
"properties": {
- "expression": { "index": 0, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "The predicate expression to use for validation." },
+ "expression": { "index": 0, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "The predicate expression to use for validation." },
"type": { "index": 1, "kind": "attribute", "displayName": "Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The data type name to validate. If you specify 'xml:XYZ', the validator is picked up when message type is 'xml:XYZ'. If you specify just 'xml', the validator matches all xml message types." }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/propertyExpression.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/propertyExpression.json
index 53c30ae235a6d..9c3015a2b0427 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/propertyExpression.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/propertyExpression.json
@@ -13,6 +13,6 @@
},
"properties": {
"key": { "index": 0, "kind": "attribute", "displayName": "Key", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The property key." },
- "expression": { "index": 1, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The property value as an expression." }
+ "expression": { "index": 1, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The property value as an expression." }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/recipientList.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/recipientList.json
index 1415f07766d02..0397c4dc6ae30 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/recipientList.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/recipientList.json
@@ -16,7 +16,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to compute the list of recipient endpoint URIs. The result can be a comma-separated string, a Collection, or an Iterator of endpoint URIs." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to compute the list of recipient endpoint URIs. The result can be a comma-separated string, a Collection, or an Iterator of endpoint URIs." },
"delimiter": { "index": 5, "kind": "attribute", "displayName": "Delimiter", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": ",", "description": "Delimiter used if the Expression returned multiple endpoints. Can be turned off using the value false." },
"aggregationStrategy": { "index": 6, "kind": "attribute", "displayName": "Aggregation Strategy", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.AggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the AggregationStrategy to be used to assemble the replies from the recipients, into a single outgoing message." },
"aggregationStrategyMethodName": { "index": 7, "kind": "attribute", "displayName": "Aggregation Strategy Method Name", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "This option can be used to explicitly declare the method name to use, when using POJOs as the AggregationStrategy." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/resequence.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/resequence.json
index a001f1f6d674c..09bf29d6f0f7a 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/resequence.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/resequence.json
@@ -16,7 +16,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Expression to use for re-ordering the messages, such as a header with a sequence number." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Expression to use for re-ordering the messages, such as a header with a sequence number." },
"resequencerConfig": { "index": 5, "kind": "element", "displayName": "Resequencer Config", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.config.ResequencerConfig", "oneOf": [ "batchConfig", "streamConfig" ], "deprecated": false, "autowired": false, "secret": false, "description": "Resequencer configuration using either batch or stream mode. Defaults to batch mode." },
"outputs": { "index": 6, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List", "oneOf": [ "a2aSubTask", "aggregate", "bean", "cache", "choice", "circuitBreaker", "claimCheck", "convertBodyTo", "convertHeaderTo", "convertVariableTo", "delay", "doCatch", "doFinally", "doTry", "dynamicRouter", "enrich", "filter", "idempotentConsumer", "intercept", "interceptFrom", "interceptSendToEndpoint", "kamelet", "loadBalance", "log", "loop", "marshal", "multicast", "onCompletion", "onException", "pausable", "pipeline", "policy", "poll", "pollEnrich", "process", "recipientList", "removeHeader", "removeHeaders", "removeProperties", "removeProperty", "removeVariable", "resequence", "resumable", "rollback", "routingSlip", "saga", "sample", "script", "setBody", "setExchangePattern", "setHeader", "setHeaders", "setProperty", "setVariable", "setVariables", "sort", "split", "step", "stop", "switch", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false }
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/routingSlip.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/routingSlip.json
index 55e085f625415..2ca6a67784d4a 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/routingSlip.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/routingSlip.json
@@ -16,7 +16,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to compute the routing slip of endpoint URIs. The result is a delimited list of endpoint URIs that defines the series of processing steps." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to compute the routing slip of endpoint URIs. The result is a delimited list of endpoint URIs that defines the series of processing steps." },
"uriDelimiter": { "index": 5, "kind": "attribute", "displayName": "Uri Delimiter", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": ",", "description": "The delimiter used to separate endpoint URIs in the routing slip expression. Default is comma." },
"ignoreInvalidEndpoints": { "index": 6, "kind": "attribute", "displayName": "Ignore Invalid Endpoints", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then invalid endpoint URIs are ignored and logged instead of throwing an exception." },
"cacheSize": { "index": 7, "kind": "attribute", "displayName": "Cache Size", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Configures the cache size for ProducerCache which caches producers for reuse. The default cache size is 1000. Set to -1 to turn off caching." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/script.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/script.json
index ed1908279726f..498f16f9ae011 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/script.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/script.json
@@ -16,6 +16,6 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to evaluate as a script. The script result does not change the message body (use transform instead if that is desired)." }
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to evaluate as a script. The script result does not change the message body (use transform instead if that is desired)." }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setBody.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setBody.json
index 59124a53de246..3c1320e00ab66 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setBody.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setBody.json
@@ -17,6 +17,6 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression whose result is used as the new message body." }
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression whose result is used as the new message body." }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setHeader.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setHeader.json
index a56e8690c8ddd..a71ab721b5bf8 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setHeader.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setHeader.json
@@ -17,6 +17,6 @@
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
"name": { "index": 4, "kind": "attribute", "displayName": "Name", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of message header to set a new value. The simple language can be used to define a dynamic evaluated header name. Otherwise a constant name will be used." },
- "expression": { "index": 5, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression whose result is used as the header value." }
+ "expression": { "index": 5, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression whose result is used as the header value." }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setProperty.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setProperty.json
index 6d2e41ecc3a2d..cffb8d5d7c8d4 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setProperty.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setProperty.json
@@ -17,6 +17,6 @@
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
"name": { "index": 4, "kind": "attribute", "displayName": "Name", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of exchange property to set a new value. The simple language can be used to define a dynamic evaluated property name. Otherwise a constant name will be used." },
- "expression": { "index": 5, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression whose result is used as the exchange property value." }
+ "expression": { "index": 5, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression whose result is used as the exchange property value." }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setVariable.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setVariable.json
index cffc0d6c94e68..79f57c636c2c5 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setVariable.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/setVariable.json
@@ -17,6 +17,6 @@
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
"name": { "index": 4, "kind": "attribute", "displayName": "Name", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of variable to set a new value. The simple language can be used to define a dynamic evaluated variable name. Otherwise a constant name will be used." },
- "expression": { "index": 5, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression whose result is used as the variable value." }
+ "expression": { "index": 5, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression whose result is used as the variable value." }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/sort.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/sort.json
index 012f5e7f4582a..c9dcd74b87c0a 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/sort.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/sort.json
@@ -16,7 +16,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to use for sorting. The message body is split into a list, sorted using this expression as the comparator key, and then reassembled." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to use for sorting. The message body is split into a list, sorted using this expression as the comparator key, and then reassembled." },
"comparator": { "index": 5, "kind": "attribute", "displayName": "Comparator", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.Comparator", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to lookup for the comparator to use for sorting." }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/split.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/split.json
index 9ac5f17714ad1..c3bc403d60600 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/split.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/split.json
@@ -17,7 +17,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression that returns the value to use for splitting. The result can be an Iterator, Iterable, Array, Collection, Map, NodeList, or a delimited String." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression that returns the value to use for splitting. The result can be an Iterator, Iterable, Array, Collection, Map, NodeList, or a delimited String." },
"delimiter": { "index": 5, "kind": "attribute", "displayName": "Delimiter", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": ",", "description": "Delimiter used in splitting messages. Can be turned off using the value false. To force not splitting then the delimiter can be set to single to use the value as a single list. The default value is comma." },
"aggregationStrategy": { "index": 6, "kind": "attribute", "displayName": "Aggregation Strategy", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.AggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Reference to the AggregationStrategy to assemble the replies from the split messages into a single outgoing message. By default Camel uses the original incoming message." },
"aggregationStrategyMethodName": { "index": 7, "kind": "attribute", "displayName": "Aggregation Strategy Method Name", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The method name to use when using a POJO as the AggregationStrategy." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/stickyLoadBalancer.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/stickyLoadBalancer.json
index 948180acfcce4..87b2bc65e0d17 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/stickyLoadBalancer.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/stickyLoadBalancer.json
@@ -13,6 +13,6 @@
},
"properties": {
"id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" },
- "correlationExpression": { "index": 1, "kind": "expression", "displayName": "Correlation Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The correlation expression to use to calculate the correlation key." }
+ "correlationExpression": { "index": 1, "kind": "expression", "displayName": "Correlation Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The correlation expression to use to calculate the correlation key." }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/switch.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/switch.json
index b0a91281d33dd..3fb9b28b75e69 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/switch.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/switch.json
@@ -18,7 +18,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "selector": { "index": 4, "kind": "expression", "displayName": "Selector", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Expression evaluated once per entry. Returns a scalar value to match against the literal cases." },
+ "selector": { "index": 4, "kind": "expression", "displayName": "Selector", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Expression evaluated once per entry. Returns a scalar value to match against the literal cases." },
"case": { "index": 5, "kind": "element", "displayName": "Case", "group": "common", "required": false, "type": "array", "javaType": "java.util.List", "deprecated": false, "autowired": false, "secret": false, "description": "Literal cases. Duplicate values are rejected at startup, ignoring case." },
"otherwise": { "index": 6, "kind": "element", "displayName": "Otherwise", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.model.SwitchOtherwiseDefinition", "oneOf": [ "otherwise" ], "deprecated": false, "autowired": false, "secret": false, "description": "Fixed fallback URI for null or unmatched selector results. Without a fallback processing continues." }
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/throttle.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/throttle.json
index 027a30aeddbaf..e1c1079fa3c65 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/throttle.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/throttle.json
@@ -17,9 +17,9 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to set the maximum request count (for TotalRequests mode) or the maximum number of concurrent requests (for ConcurrentRequests mode)." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression to set the maximum request count (for TotalRequests mode) or the maximum number of concurrent requests (for ConcurrentRequests mode)." },
"mode": { "index": 5, "kind": "attribute", "displayName": "Mode", "group": "common", "required": false, "type": "enum", "javaType": "org.apache.camel.model.ThrottlingMode", "enum": [ "TotalRequests", "ConcurrentRequests" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "TotalRequests", "description": "Sets the throttling mode. TotalRequests limits the total number of requests within a time period. ConcurrentRequests uses a leaky-bucket algorithm to limit the number of concurrent requests being processed at the same time." },
- "correlationExpression": { "index": 6, "kind": "expression", "displayName": "Correlation Expression", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The correlation expression to use for throttle grouping. Exchanges with the same correlation key are throttled together." },
+ "correlationExpression": { "index": 6, "kind": "expression", "displayName": "Correlation Expression", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The correlation expression to use for throttle grouping. Exchanges with the same correlation key are throttled together." },
"executorService": { "index": 7, "kind": "attribute", "displayName": "Executor Service", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.concurrent.ExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom thread pool (ScheduledExecutorService) by the throttler." },
"asyncDelayed": { "index": 8, "kind": "attribute", "displayName": "Async Delayed", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enables asynchronous delay which means the thread will not block while delaying." },
"callerRunsWhenRejected": { "index": 9, "kind": "attribute", "displayName": "Caller Runs When Rejected", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether or not the caller should run the task when it was rejected by the thread pool." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/transform.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/transform.json
index cf53b151e5faf..fa8649dc61fff 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/transform.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/transform.json
@@ -17,6 +17,6 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression whose result replaces the message body." }
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "The expression whose result replaces the message body." }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/validate.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/validate.json
index 19423bee06c99..aa65030c329a4 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/validate.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/validate.json
@@ -17,7 +17,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "The predicate expression to validate against the current message. If the predicate returns false, a PredicateValidationException is thrown." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "The predicate expression to validate against the current message. If the predicate returns false, a PredicateValidationException is thrown." },
"predicateExceptionFactory": { "index": 5, "kind": "attribute", "displayName": "Predicate Exception Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PredicateExceptionFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Reference to a custom PredicateExceptionFactory for creating the exception when validation fails." }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/wasm.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/wasm.json
deleted file mode 100644
index f77d85b07c350..0000000000000
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/wasm.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "model": {
- "kind": "model",
- "name": "wasm",
- "title": "Wasm",
- "description": "Call a wasm (web assembly) function",
- "deprecated": false,
- "firstVersion": "4.5.0",
- "label": "language",
- "javaType": "org.apache.camel.model.language.WasmExpression",
- "abstract": false,
- "input": false,
- "output": false
- },
- "properties": {
- "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node." },
- "expression": { "index": 1, "kind": "value", "displayName": "Expression", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax." },
- "module": { "index": 2, "kind": "attribute", "displayName": "Module", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Set the module (the distributable, loadable, and executable unit of code in WebAssembly) resource that provides the expression function." },
- "resultType": { "index": 3, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The class of the result type (type from output)." },
- "trim": { "index": 4, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the source code to remove leading and trailing whitespaces and line breaks." },
- "resolveResource": { "index": 5, "kind": "attribute", "displayName": "Resolve Resource", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether a result of the expression that is a String starting with resource: is loaded as a resource and its content becomes the result, e.g. a script that returns resource:file:order.json or resource:classpath:templates\/order.json (a name without a scheme is a classpath resource). Off by default; the resource: prefix on the expression text itself is always resolved. Applies to the expression used as a value, not as a predicate." }
- }
-}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/when.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/when.json
index 44b0e97480e41..473d7716e8e9f 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/when.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/when.json
@@ -16,7 +16,7 @@
"note": { "index": 1, "kind": "attribute", "displayName": "Note", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The note for this node" },
"description": { "index": 2, "kind": "attribute", "displayName": "Description", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The description for this node" },
"disabled": { "index": 3, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Disables this EIP from the route." },
- "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "Expression used as the predicate to evaluate whether this when should trigger and route the message or not." },
+ "expression": { "index": 4, "kind": "expression", "displayName": "Expression", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.language.ExpressionDefinition", "oneOf": [ "constant", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "jactl", "java", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "Expression used as the predicate to evaluate whether this when should trigger and route the message or not." },
"outputs": { "index": 5, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List>", "oneOf": [ "a2aSubTask", "aggregate", "bean", "cache", "choice", "circuitBreaker", "claimCheck", "convertBodyTo", "convertHeaderTo", "convertVariableTo", "delay", "doCatch", "doFinally", "doTry", "dynamicRouter", "enrich", "filter", "idempotentConsumer", "intercept", "interceptFrom", "interceptSendToEndpoint", "kamelet", "loadBalance", "log", "loop", "marshal", "multicast", "onCompletion", "onException", "pausable", "pipeline", "policy", "poll", "pollEnrich", "process", "recipientList", "removeHeader", "removeHeaders", "removeProperties", "removeProperty", "removeVariable", "resequence", "resumable", "rollback", "routingSlip", "saga", "sample", "script", "setBody", "setExchangePattern", "setHeader", "setHeaders", "setProperty", "setVariable", "setVariables", "sort", "split", "step", "stop", "switch", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false }
}
}
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 e438e41c1419b..278dd6cd0df9f 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
@@ -2329,15 +2329,6 @@ Holds a single value, typically used as a child element in collection-based conf
-
-
-
-
-
-
-
@@ -3683,7 +3674,6 @@ ensuring the aggregation repository is empty before shutdown. Default value: fal
-
@@ -4007,7 +3997,6 @@ Whether the script should support using Camel property placeholder syntax {{ }}.
-
@@ -4241,7 +4230,6 @@ The exception class names (fully qualified) to catch.
-
@@ -4298,7 +4286,6 @@ placeholders or simple expressions using only property placeholders are supporte
-
@@ -5347,7 +5334,6 @@ To use a specific charset when converting.
-
@@ -5410,7 +5396,6 @@ To use a custom thread pool if asyncDelay has been enabled.
-
@@ -5486,7 +5471,6 @@ restriction, useful for low-code / Kamelet deployments; by default (unset) any s
-
@@ -6108,7 +6092,6 @@ The logging level to use for logging transactional rollback. Default is WARN. De
-
@@ -6365,7 +6348,6 @@ Global option value.
-
@@ -7165,7 +7147,6 @@ The language to use for evaluating the log message, such as simple, groovy, or o
-
@@ -11784,7 +11765,6 @@ Timeout in millis when polling from the external service. The default value is 2
-
@@ -11949,7 +11929,6 @@ control how the processor is obtained.
-
@@ -11992,7 +11971,6 @@ The property key.
-
@@ -12295,7 +12273,6 @@ Name of the variable to remove.
-
@@ -12998,7 +12975,6 @@ Description of the template parameter for documentation purposes.
-
@@ -13254,7 +13230,6 @@ The frequency of samples as a message count, using a message-frequency approach.
-
@@ -13306,7 +13281,6 @@ The uri of the endpoint to send to.
-
@@ -13358,7 +13332,6 @@ The new exchange pattern to use from this point forward.
-
@@ -13413,7 +13386,6 @@ Otherwise a constant name will be used.
-
@@ -13459,7 +13431,6 @@ name. Otherwise a constant name will be used.
-
@@ -13514,7 +13485,6 @@ Otherwise a constant name will be used.
-
@@ -13560,7 +13530,6 @@ Sets a reference to lookup for the comparator to use for sorting.
-
@@ -14292,7 +14261,6 @@ handler. Default value: true
-
@@ -14777,7 +14745,6 @@ into.
-
@@ -14985,7 +14952,6 @@ Indicates whether null is allowed as value of a body to unmarshall. Default valu
-
@@ -16797,22 +16763,6 @@ To skip the very first element. Default value: false
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -17376,7 +17326,6 @@ URI of the Endpoint used for validation.
-
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd
index 81f71962e73e0..e59829db331e4 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd
@@ -2140,15 +2140,6 @@ Holds a single value, typically used as a child element in collection-based conf
-
-
-
-
-
-
-
@@ -2793,7 +2784,6 @@ ensuring the aggregation repository is empty before shutdown. Default value: fal
-
@@ -3117,7 +3107,6 @@ Whether the script should support using Camel property placeholder syntax {{ }}.
-
@@ -3351,7 +3340,6 @@ The exception class names (fully qualified) to catch.
-
@@ -3408,7 +3396,6 @@ placeholders or simple expressions using only property placeholders are supporte
-
@@ -4469,7 +4456,6 @@ To use a specific charset when converting.
-
@@ -4532,7 +4518,6 @@ To use a custom thread pool if asyncDelay has been enabled.
-
@@ -4608,7 +4593,6 @@ restriction, useful for low-code / Kamelet deployments; by default (unset) any s
-
@@ -5230,7 +5214,6 @@ The logging level to use for logging transactional rollback. Default is WARN. De
-
@@ -5487,7 +5470,6 @@ Global option value.
-
@@ -6287,7 +6269,6 @@ The language to use for evaluating the log message, such as simple, groovy, or o
-
@@ -10906,7 +10887,6 @@ Timeout in millis when polling from the external service. The default value is 2
-
@@ -11092,7 +11072,6 @@ The property value.
-
@@ -11135,7 +11114,6 @@ The property key.
-
@@ -11438,7 +11416,6 @@ Name of the variable to remove.
-
@@ -12141,7 +12118,6 @@ Description of the template parameter for documentation purposes.
-
@@ -12397,7 +12373,6 @@ The frequency of samples as a message count, using a message-frequency approach.
-
@@ -12449,7 +12424,6 @@ The uri of the endpoint to send to.
-
@@ -12501,7 +12475,6 @@ The new exchange pattern to use from this point forward.
-
@@ -12556,7 +12529,6 @@ Otherwise a constant name will be used.
-
@@ -12602,7 +12574,6 @@ name. Otherwise a constant name will be used.
-
@@ -12657,7 +12628,6 @@ Otherwise a constant name will be used.
-
@@ -12703,7 +12673,6 @@ Sets a reference to lookup for the comparator to use for sorting.
-
@@ -13435,7 +13404,6 @@ handler. Default value: true
-
@@ -13920,7 +13888,6 @@ into.
-
@@ -14128,7 +14095,6 @@ Indicates whether null is allowed as value of a body to unmarshall. Default valu
-
@@ -15940,22 +15906,6 @@ To skip the very first element. Default value: false
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -16519,7 +16469,6 @@ URI of the Endpoint used for validation.
-
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
index 60af524015b79..52a9a833e1cd4 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
@@ -761,13 +761,6 @@
"title" : "Variable",
"description" : "Gets a variable",
"label" : "language,core"
- }, {
- "name" : "wasm",
- "type" : "object",
- "ref" : "wasm",
- "title" : "Wasm",
- "description" : "Call a wasm (web assembly) function",
- "label" : "language"
}, {
"name" : "xpath",
"type" : "object",
@@ -2730,10 +2723,6 @@
"name" : "variable",
"type" : "object",
"ref" : "variable"
- }, {
- "name" : "wasm",
- "type" : "object",
- "ref" : "wasm"
}, {
"name" : "xpath",
"type" : "object",
@@ -16326,72 +16315,6 @@
"label" : "advanced"
} ]
},
- "wasm" : {
- "title" : "Wasm",
- "description" : "Call a wasm (web assembly) function",
- "label" : "language",
- "children" : [ {
- "name" : "id",
- "type" : "string",
- "description" : "The id of this node.",
- "title" : "Id",
- "displayName" : "Id",
- "kind" : "attribute",
- "index" : 0,
- "group" : "common"
- }, {
- "name" : "expression",
- "type" : "string",
- "description" : "The expression value in your chosen language syntax.",
- "title" : "Expression",
- "required" : true,
- "displayName" : "Expression",
- "kind" : "value",
- "index" : 1,
- "group" : "common"
- }, {
- "name" : "module",
- "type" : "string",
- "description" : "Set the module (the distributable, loadable, and executable unit of code in WebAssembly) resource that provides the expression function.",
- "title" : "Module",
- "required" : true,
- "displayName" : "Module",
- "kind" : "attribute",
- "index" : 2,
- "group" : "common"
- }, {
- "name" : "resultType",
- "type" : "string",
- "description" : "The class of the result type (type from output).",
- "title" : "Result Type",
- "displayName" : "Result Type",
- "kind" : "attribute",
- "index" : 3,
- "group" : "common"
- }, {
- "name" : "trim",
- "type" : "boolean",
- "description" : "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.",
- "title" : "Trim",
- "default" : "true",
- "displayName" : "Trim",
- "kind" : "attribute",
- "index" : 4,
- "group" : "advanced",
- "label" : "advanced"
- }, {
- "name" : "resolveResource",
- "type" : "boolean",
- "description" : "Whether a result of the expression that is a String starting with resource: is loaded as a resource and its content becomes the result, e.g. a script that returns resource:file:order.json or resource:classpath:templates/order.json (a name without a scheme is a classpath resource). Off by default; the resource: prefix on the expression text itself is always resolved. Applies to the expression used as a value, not as a predicate.",
- "title" : "Resolve Resource",
- "default" : "false",
- "displayName" : "Resolve Resource",
- "kind" : "attribute",
- "index" : 5,
- "group" : "advanced",
- "label" : "advanced"
- } ]
- },
"xMLTokenizer" : {
"title" : "XML Tokenize",
"description" : "Tokenize XML payloads",
diff --git a/components/camel-language/src/generated/resources/META-INF/org/apache/camel/component/language/language.json b/components/camel-language/src/generated/resources/META-INF/org/apache/camel/component/language/language.json
index 201bfbbf49042..fb260589ad386 100644
--- a/components/camel-language/src/generated/resources/META-INF/org/apache/camel/component/language/language.json
+++ b/components/camel-language/src/generated/resources/META-INF/org/apache/camel/component/language/language.json
@@ -33,7 +33,7 @@
"CamelLanguageScript": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String or Expression", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The script to execute provided in the header. Takes precedence over script configured on the endpoint.", "constantName": "org.apache.camel.component.language.LanguageConstants#LANGUAGE_SCRIPT" }
},
"properties": {
- "languageName": { "index": 0, "kind": "path", "displayName": "Language Name", "group": "producer", "label": "", "required": true, "type": "enum", "javaType": "java.lang.String", "enum": [ "bean", "constant", "datasonnet", "exchangeProperty", "file", "groovy", "header", "hl7terser", "java", "joor", "jq", "js", "jsonpath", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Sets the name of the language to use" },
+ "languageName": { "index": 0, "kind": "path", "displayName": "Language Name", "group": "producer", "label": "", "required": true, "type": "enum", "javaType": "java.lang.String", "enum": [ "bean", "constant", "datasonnet", "exchangeProperty", "file", "groovy", "header", "hl7terser", "java", "joor", "jq", "js", "jsonpath", "mvel", "ognl", "python", "python3", "quickjs", "ref", "simple", "spel", "tokenize", "variable", "xpath", "xquery", "xtokenize" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Sets the name of the language to use" },
"resourceUri": { "index": 1, "kind": "path", "displayName": "Resource Uri", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "description": "Path to the resource, or a reference to lookup a bean in the Registry to use as the resource" },
"allowContextMapAll": { "index": 2, "kind": "parameter", "displayName": "Allow Context Map All", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether the context map should allow access to all details. By default only the message body and headers can be accessed. This option can be enabled for full access to the current Exchange and CamelContext. Doing so impose a potential security risk as this opens access to the full power of CamelContext API." },
"allowTemplateFromHeader": { "index": 3, "kind": "parameter", "displayName": "Allow Template From Header", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to allow to use resource template from header or not (default false). Enabling this allows to specify dynamic templates via message header. However this can be seen as a potential security vulnerability if the header is coming from a malicious user, so use this with care." },
diff --git a/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java b/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java
index dc7089917fe81..3540253abc3ed 100644
--- a/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java
+++ b/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java
@@ -56,7 +56,7 @@ public class LanguageEndpoint extends ResourceEndpoint {
private boolean contentResolvedFromResource;
@UriPath(enums = "bean,constant,datasonnet,exchangeProperty,file,groovy,header,hl7terser,java,joor,jq,js,jsonpath"
- + ",mvel,ognl,python,python3,quickjs,ref,simple,spel,tokenize,variable,wasm,xpath,xquery,xtokenize")
+ + ",mvel,ognl,python,python3,quickjs,ref,simple,spel,tokenize,variable,xpath,xquery,xtokenize")
@Metadata(required = true)
private String languageName;
// resourceUri is optional in the language endpoint
diff --git a/components/camel-wasm/pom.xml b/components/camel-wasm/pom.xml
index 6465c2ded1ba5..9f959943d1dec 100644
--- a/components/camel-wasm/pom.xml
+++ b/components/camel-wasm/pom.xml
@@ -33,7 +33,6 @@
Camel Wasm component
- -Dwasm.resources.path=${project.basedir}/src/test/resources
Experimental
@@ -61,19 +60,6 @@
${endive-version}
-
- com.fasterxml.jackson.core
- jackson-annotations
-
-
- com.fasterxml.jackson.core
- jackson-core
-
-
- com.fasterxml.jackson.core
- jackson-databind
-
-
org.apache.camel
diff --git a/components/camel-wasm/src/generated/resources/META-INF/org/apache/camel/language/wasm/wasm.json b/components/camel-wasm/src/generated/resources/META-INF/org/apache/camel/language/wasm/wasm.json
deleted file mode 100644
index ded5b9d79d6bd..0000000000000
--- a/components/camel-wasm/src/generated/resources/META-INF/org/apache/camel/language/wasm/wasm.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "language": {
- "kind": "language",
- "name": "wasm",
- "title": "Wasm",
- "description": "Call a wasm (web assembly) function",
- "deprecated": false,
- "firstVersion": "4.5.0",
- "label": "language",
- "javaType": "org.apache.camel.language.wasm.WasmLanguage",
- "supportLevel": "Experimental",
- "groupId": "org.apache.camel",
- "artifactId": "camel-wasm",
- "version": "4.24.0-SNAPSHOT",
- "modelName": "wasm",
- "modelJavaType": "org.apache.camel.model.language.WasmExpression"
- },
- "properties": {
- "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node." },
- "expression": { "index": 1, "kind": "value", "displayName": "Expression", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax." },
- "module": { "index": 2, "kind": "attribute", "displayName": "Module", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Set the module (the distributable, loadable, and executable unit of code in WebAssembly) resource that provides the expression function." },
- "resultType": { "index": 3, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The class of the result type (type from output)." },
- "trim": { "index": 4, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the source code to remove leading and trailing whitespaces and line breaks." },
- "resolveResource": { "index": 5, "kind": "attribute", "displayName": "Resolve Resource", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether a result of the expression that is a String starting with resource: is loaded as a resource and its content becomes the result, e.g. a script that returns resource:file:order.json or resource:classpath:templates\/order.json (a name without a scheme is a classpath resource). Off by default; the resource: prefix on the expression text itself is always resolved. Applies to the expression used as a value, not as a predicate." }
- }
-}
diff --git a/components/camel-wasm/src/generated/resources/META-INF/services/org/apache/camel/language.properties b/components/camel-wasm/src/generated/resources/META-INF/services/org/apache/camel/language.properties
deleted file mode 100644
index 670d7174464f4..0000000000000
--- a/components/camel-wasm/src/generated/resources/META-INF/services/org/apache/camel/language.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# Generated by camel build tools - do NOT edit this file!
-languages=wasm
-groupId=org.apache.camel
-artifactId=camel-wasm
-version=4.24.0-SNAPSHOT
-projectName=Camel :: Wasm
-projectDescription=Camel Wasm component
diff --git a/components/camel-wasm/src/generated/resources/META-INF/services/org/apache/camel/language/wasm b/components/camel-wasm/src/generated/resources/META-INF/services/org/apache/camel/language/wasm
deleted file mode 100644
index 67da38cc42068..0000000000000
--- a/components/camel-wasm/src/generated/resources/META-INF/services/org/apache/camel/language/wasm
+++ /dev/null
@@ -1,2 +0,0 @@
-# Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.language.wasm.WasmLanguage
diff --git a/components/camel-wasm/src/main/docs/wasm-language.adoc b/components/camel-wasm/src/main/docs/wasm-language.adoc
deleted file mode 100644
index e78879a52e012..0000000000000
--- a/components/camel-wasm/src/main/docs/wasm-language.adoc
+++ /dev/null
@@ -1,255 +0,0 @@
-= Wasm Language
-:doctitle: Wasm
-:shortname: wasm
-:artifactid: camel-wasm
-:description: Call a wasm (web assembly) function
-:since: 4.5
-:supportlevel: Experimental
-:tabs-sync-option:
-
-*Since Camel {since}*
-
-Camel supports Wasm to allow using xref:manual::expression.adoc[Expression] or xref:manual::predicate.adoc[Predicate].
-
-== Wasm Options
-
-// language options: START
-include::partial$language-options.adoc[]
-// language options: END
-
-
-== Writing A Wasm function
-
-In _Wasm_, sharing objects between the host, in this case the _JVM_, and the _Wasm_ module is deliberately restricted and as of today, it requires a number of steps:
-
-1. From the _host_, call a function inside the webassembly module that allocates a block of memory and returns its address, then save it
-2. From the _host_, write the data that should be exchanged with the _Wasm_ module to the saved address
-3. From the _host_, invoke the required function passing both the address where the data is written and its size
-4. From the _Wasm_ module, read the data and process it
-5. From the _host_, release the memory when done
-
-=== Providing functions for memory management
-
-The module hosting the function *must* provide the functions to allocate/deallocate memory that *must* be named `alloc` and `dealloc` respectively.
-
-Here's an example of the mentioned functions implemented in https://www.rust-lang.org[Rust]:
-
-[source,rust]
-----
-pub extern "C" fn alloc(size: u32) -> *mut u8 {
- let mut buf = Vec::with_capacity(size as usize);
- let ptr = buf.as_mut_ptr();
-
- // tell Rust not to clean this up
- mem::forget(buf);
-
- ptr
-}
-
-pub unsafe extern "C" fn dealloc(ptr: &mut u8, len: i32) {
- // Retakes the pointer which allows its memory to be freed.
- let _ = Vec::from_raw_parts(ptr, 0, len as usize);
-}
-----
-
-=== Data shapes
-
-It is not possible to share a Java object with the Wasm module directly, and as mentioned before,
-data exchange leverages Wasm's memory that can be accessed by both the host and the guest runtimes.
-At this stage, the data structure that the component exchange with the Wasm function is a subset of the Apache Camel Message,
-containing headers the body encoded as a base64 string:
-
-._Java-only: data wrapper class definition_
-[source,java]
-----
-public static class Wrapper {
- @JsonProperty
- public Map headers = new HashMap<>();
-
- @JsonProperty
- public byte[] body;
-}
-----
-
-=== Data processing
-
-The component expects the processing function to have the following signature:
-
-[source,rust]
-----
-fn function(ptr: u32, len: u32) -> u64
-----
-
-* it accepts two 32bit unsigned integers arguments
-** a pointer to the memory location when the input data has been written (`ptr`)
-** the size of the input data (`len`)
-* it returns a 64bit unsigned integer where:
-** the first 32bit represents a pointer to the return data
-** the last 31bit represents the size of the return data
-** the most significant bit of the returned data size is reserved to signal an error, so if it is set, then the return data could contain an error message/code/etc
-
-Here's an example of a complete function:
-
-[source,rust]
-----
-#[derive(Serialize, Deserialize)]
-struct Message {
- headers: HashMap,
-
- #[serde(with = "Base64Standard")]
- body: Vec,
-}
-
-#[cfg_attr(all(target_arch = "wasm32"), export_name = "transform")]
-#[no_mangle]
-pub extern fn transform(ptr: u32, len: u32) -> u64 {
- let bytes = unsafe {
- slice::from_raw_parts_mut(
- ptr as *mut u8,
- len as usize)
- };
-
- let msg: Message = serde_json::from_slice(bytes).unwrap();
- let res = String::from_utf8(msg.body).unwrap().to_uppercase().as_bytes().to_vec();
-
- let out_len = res.len();
- let out_ptr = alloc(out_len as u32);
-
- unsafe {
- std::ptr::copy_nonoverlapping(
- res.as_ptr(),
- out_ptr,
- out_len as usize)
- };
-
- return ((out_ptr as u64) << 32) | out_len as u64;
-}
-----
-
-=== Errors and module state
-
-The module is instantiated once per `wasm` expression and that instance handles every message, one at a time, so data
-the module keeps in its memory or globals carries over from one message to the next.
-
-* When the function returns with the error bit set, the error data is released with `dealloc` using its size without
-the error bit, the error data becomes the message of the exception, and the instance is kept.
-* When the call fails without returning, for example on a Rust `panic` or any other Wasm trap, the instance is
-discarded and a new one is created from the module for the next message. Whatever the failed call allocated can no
-longer be released, so keeping the instance would grow its memory with every failure. Any state the module kept in
-the discarded instance is lost.
-On a route where every call fails this way, the module is instantiated again for every message (its data segments
-are copied and any start function runs), which costs more than a call on a kept instance.
-
-== Examples
-
-Supposing we have compiled a Wasm module containing the function above, then it can be called in a Camel Route by its name and module resource location:
-
-[tabs]
-====
-Java::
-+
-[source,java]
-----
-from("direct:in")
- .transform()
- .wasm("transform", "classpath://functions.wasm");
-----
-
-XML::
-+
-[source,xml]
-----
-
-
-
- transform
-
-
-----
-
-YAML::
-+
-[source,yaml]
-----
-- route:
- from:
- uri: direct:in
- steps:
- - transform:
- expression:
- wasm:
- expression: transform
- module: classpath://functions.wasm
-----
-====
-
-
-== Using Wasm as a predicate
-
-When the function is used as a xref:manual::predicate.adoc[Predicate], for example with the
-xref:eips:filter-eip.adoc[Filter] EIP, its result is converted to a boolean depending on the result type:
-
-* With the default result type (`byte[]`) or `String`, the returned bytes are read as a string and the
-standard Camel rules apply: `true` and `false` (in any case) are parsed, empty data is `false`, and any
-other value is `true`. So the function can simply return `true` or `false`.
-* With the result type `Boolean`, only `true` and `false` (in any case) are accepted: any other value,
-including empty data, is `false`.
-* With a Jackson `JsonNode` result type, only the JSON boolean `true` matches.
-
-[tabs]
-====
-Java::
-+
-[source,java]
-----
-from("direct:in")
- .filter().wasm("is_valid", "classpath://functions.wasm")
- .to("direct:valid");
-----
-
-XML::
-+
-[source,xml]
-----
-
-
-
- is_valid
-
-
-
-----
-
-YAML::
-+
-[source,yaml]
-----
-- route:
- from:
- uri: direct:in
- steps:
- - filter:
- expression:
- wasm:
- expression: is_valid
- module: classpath://functions.wasm
- steps:
- - to:
- uri: direct:valid
-----
-====
-
-
-== Dependencies
-
-If you use Maven you could add the following to your `pom.xml`,
-substituting the version number for the latest and greatest release.
-
-[source,xml]
-----
-
- org.apache.camel
- camel-wasm
- x.x.x
-
-----
diff --git a/components/camel-wasm/src/main/java/org/apache/camel/language/wasm/WasmExpression.java b/components/camel-wasm/src/main/java/org/apache/camel/language/wasm/WasmExpression.java
deleted file mode 100644
index 163c2cba3bcfa..0000000000000
--- a/components/camel-wasm/src/main/java/org/apache/camel/language/wasm/WasmExpression.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.language.wasm;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
-import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.TypeConverter;
-import org.apache.camel.spi.ExpressionResultTypeAware;
-import org.apache.camel.spi.Resource;
-import org.apache.camel.spi.ResourceLoader;
-import org.apache.camel.support.ExpressionAdapter;
-import org.apache.camel.support.PluginHelper;
-import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.wasm.WasmFunction;
-import org.apache.camel.wasm.WasmSupport;
-import run.endive.wasm.Parser;
-
-public class WasmExpression extends ExpressionAdapter implements ExpressionResultTypeAware {
- private final String expression;
- private String module;
-
- private String resultTypeName;
- private Class> resultType;
-
- private String headerName;
- private String propertyName;
-
- private TypeConverter typeConverter;
- private WasmFunction function;
-
- public WasmExpression(String expression) {
- this.expression = expression;
- }
-
- @Override
- public void init(CamelContext camelContext) {
- super.init(camelContext);
-
- if (module == null) {
- throw new IllegalArgumentException("Module must be configured");
- }
-
- this.typeConverter = camelContext.getTypeConverter();
-
- if (resultTypeName != null && (resultType == null || resultType == Object.class)) {
- resultType = camelContext.getClassResolver().resolveClass(resultTypeName);
- }
- if (resultType == null || resultType == Object.class) {
- resultType = byte[].class;
- }
-
- final ResourceLoader rl = PluginHelper.getResourceLoader(camelContext);
- final Resource res = rl.resolveResource(module);
-
- try (InputStream is = res.getInputStream()) {
- this.function = new WasmFunction(Parser.parse(is), expression);
- } catch (IOException e) {
- throw new RuntimeCamelException(e);
- }
- }
-
- @Override
- public String getExpressionText() {
- return this.expression;
- }
-
- @Override
- public Class> getResultType() {
- return this.resultType;
- }
-
- public void setResultType(Class> resultType) {
- this.resultType = resultType;
- }
-
- public String getResultTypeName() {
- return resultTypeName;
- }
-
- public void setResultTypeName(String resultTypeName) {
- this.resultTypeName = resultTypeName;
- }
-
- public String getHeaderName() {
- return headerName;
- }
-
- /**
- * Name of the header to use as input instead of the message body.
- *
- * It has higher precedence than the propertyName if both are set.
- */
- public void setHeaderName(String headerName) {
- this.headerName = headerName;
- }
-
- public String getPropertyName() {
- return propertyName;
- }
-
- /**
- * Name of the property to use as input instead of the message body.
- *
- * It has lower precedence than the headerName if both are set.
- */
- public void setPropertyName(String propertyName) {
- this.propertyName = propertyName;
- }
-
- public String getModule() {
- return module;
- }
-
- /**
- * Set the module (the distributable, loadable, and executable unit of code in WebAssembly) resource that provides
- * the expression function.
- */
- public void setModule(String module) {
- this.module = module;
- }
-
- @Override
- public boolean matches(Exchange exchange) {
- Object value = evaluate(exchange, Object.class);
-
- if (value instanceof JsonNode node) {
- // a JSON result only matches when it is the boolean true
- return node.isBoolean() && node.asBoolean();
- }
- if (value instanceof byte[] bytes) {
- // the default result type: the raw bytes returned by the function, such as "true" or "false"
- value = typeConverter.convertTo(String.class, exchange, bytes);
- }
-
- return ObjectHelper.evaluateValuePredicate(value);
- }
-
- @Override
- public Object evaluate(Exchange exchange) {
- try {
- byte[] in = WasmSupport.serialize(exchange);
- byte[] result = function.run(in);
-
- return this.typeConverter.convertTo(resultType, exchange, result);
- } catch (Exception e) {
- throw new RuntimeCamelException(e);
- }
- }
-}
diff --git a/components/camel-wasm/src/main/java/org/apache/camel/language/wasm/WasmLanguage.java b/components/camel-wasm/src/main/java/org/apache/camel/language/wasm/WasmLanguage.java
deleted file mode 100644
index 07579ec2418e8..0000000000000
--- a/components/camel-wasm/src/main/java/org/apache/camel/language/wasm/WasmLanguage.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.language.wasm;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Expression;
-import org.apache.camel.Predicate;
-import org.apache.camel.spi.PropertyConfigurer;
-import org.apache.camel.spi.annotations.Language;
-import org.apache.camel.support.ExpressionToPredicateAdapter;
-import org.apache.camel.support.TypedLanguageSupport;
-import org.apache.camel.support.component.PropertyConfigurerSupport;
-import org.apache.camel.wasm.Wasm;
-
-@Language(Wasm.SCHEME)
-public class WasmLanguage extends TypedLanguageSupport implements PropertyConfigurer {
-
- private String module;
-
- public WasmLanguage() {
- }
-
- public String getModule() {
- return module;
- }
-
- public void setModule(String module) {
- this.module = module;
- }
-
- @Override
- public boolean configure(CamelContext camelContext, Object target, String name, Object value, boolean ignoreCase) {
- if (target != this) {
- throw new IllegalStateException("Can only configure our own instance !");
- }
-
- switch (ignoreCase ? name.toLowerCase() : name) {
- case "module":
- setModule(PropertyConfigurerSupport.property(camelContext, String.class, value));
- return true;
- default:
- return false;
- }
- }
-
- @Override
- public Predicate createPredicate(String expression) {
- return ExpressionToPredicateAdapter.toPredicate(createExpression(expression));
- }
-
- @Override
- public Expression createExpression(String expression) {
- return createExpression(expression, null);
- }
-
- @Override
- public Predicate createPredicate(String expression, Object[] properties) {
- return ExpressionToPredicateAdapter.toPredicate(createExpression(expression, properties));
- }
-
- @Override
- public Expression createExpression(String expression, Object[] properties) {
- WasmExpression answer = new WasmExpression(expression);
- answer.setResultType(property(Class.class, properties, 0, null));
- answer.setModule(property(String.class, properties, 1, getModule()));
- if (getCamelContext() != null) {
- answer.init(getCamelContext());
- }
- return answer;
- }
-}
diff --git a/components/camel-wasm/src/main/java/org/apache/camel/wasm/Wasm.java b/components/camel-wasm/src/main/java/org/apache/camel/wasm/Wasm.java
index c93336f4889b7..c6ee9c9c2f633 100644
--- a/components/camel-wasm/src/main/java/org/apache/camel/wasm/Wasm.java
+++ b/components/camel-wasm/src/main/java/org/apache/camel/wasm/Wasm.java
@@ -20,8 +20,6 @@
public final class Wasm {
public static final String SCHEME = "wasm";
- public static final String FN_ALLOC = "alloc";
- public static final String FN_DEALLOC = "dealloc";
private Wasm() {
}
diff --git a/components/camel-wasm/src/main/java/org/apache/camel/wasm/WasmFunction.java b/components/camel-wasm/src/main/java/org/apache/camel/wasm/WasmFunction.java
deleted file mode 100644
index 2c3ef70f1ed4f..0000000000000
--- a/components/camel-wasm/src/main/java/org/apache/camel/wasm/WasmFunction.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.wasm;
-
-import java.nio.charset.StandardCharsets;
-import java.util.Objects;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import run.endive.runtime.ExportFunction;
-import run.endive.runtime.Instance;
-import run.endive.wasm.WasmModule;
-
-public class WasmFunction implements AutoCloseable {
- private static final Logger LOG = LoggerFactory.getLogger(WasmFunction.class);
-
- private final Lock lock;
-
- private final WasmModule module;
- private final String functionName;
-
- // guarded by lock; null after a failed call until the next call creates a new instance
- private Instance instance;
- private ExportFunction function;
- private ExportFunction alloc;
- private ExportFunction dealloc;
-
- public WasmFunction(WasmModule module, String functionName) {
- this.lock = new ReentrantLock();
-
- this.module = Objects.requireNonNull(module);
- this.functionName = Objects.requireNonNull(functionName);
-
- // the instance fields are not final: create the first instance under the lock, so that a first run() on
- // another thread sees them
- lock.lock();
- try {
- createInstance();
- } finally {
- lock.unlock();
- }
- }
-
- public byte[] run(byte[] in) throws Exception {
- Objects.requireNonNull(in);
-
- final int inSize = in.length;
- final byte[] out;
- final boolean error;
-
- //
- // Wasm execution is not thread safe so we must put a
- // synchronization guard around the function execution
- //
- lock.lock();
- try {
- if (instance == null) {
- createInstance();
- }
-
- try {
- int inPtr = (int) alloc.apply(inSize)[0];
- instance.memory().write(inPtr, in);
-
- long[] results = function.apply(inPtr, inSize);
- long ptrAndSize = results[0];
-
- int outPtr = (int) (ptrAndSize >> 32);
- int outSize = (int) ptrAndSize;
-
- // assume the max output is 31 bit, leverage the first bit for
- // error detection
- error = isError(outSize);
- if (error) {
- outSize = errSize(outSize);
- }
-
- out = instance.memory().readBytes(outPtr, outSize);
-
- dealloc.apply(inPtr, inSize);
- dealloc.apply(outPtr, outSize);
- } catch (RuntimeException | Error e) {
- // The guest trapped, was interrupted or failed otherwise: its memory and globals are left as the
- // failed call left them, and whatever it allocated before the failure can never be released.
- // Discard the instance instead of calling into it again, so the original exception is propagated
- // as is, and create a new one on the next call.
- discardInstance(e);
- throw e;
- }
- } finally {
- lock.unlock();
- }
-
- if (error) {
- throw new RuntimeException(new String(out, StandardCharsets.UTF_8));
- }
-
- return out;
- }
-
- @Override
- public void close() throws Exception {
- lock.lock();
- try {
- if (instance != null) {
- instance.close();
- }
- clearInstance();
- } finally {
- lock.unlock();
- }
- }
-
- private void createInstance() {
- Instance newInstance = Instance.builder(this.module).build();
- ExportFunction newFunction = newInstance.export(this.functionName);
- ExportFunction newAlloc = newInstance.export(Wasm.FN_ALLOC);
- ExportFunction newDealloc = newInstance.export(Wasm.FN_DEALLOC);
-
- // all four fields refer to the same instance, or are left as they were if an export is missing
- this.instance = newInstance;
- this.function = newFunction;
- this.alloc = newAlloc;
- this.dealloc = newDealloc;
- }
-
- private void discardInstance(Throwable cause) {
- LOG.debug("Discarding the Wasm instance of function {} after a failed call: {}", functionName, cause.getMessage());
-
- try {
- instance.close();
- } catch (RuntimeException e) {
- cause.addSuppressed(e);
- }
- clearInstance();
- }
-
- private void clearInstance() {
- this.instance = null;
- this.function = null;
- this.alloc = null;
- this.dealloc = null;
- }
-
- private static boolean isError(int number) {
- return (number & (1 << 31)) != 0;
- }
-
- private static int errSize(int number) {
- return number & (~(1 << 31));
- }
-}
diff --git a/components/camel-wasm/src/main/java/org/apache/camel/wasm/WasmSupport.java b/components/camel-wasm/src/main/java/org/apache/camel/wasm/WasmSupport.java
deleted file mode 100644
index 0fe5bddcb0f92..0000000000000
--- a/components/camel-wasm/src/main/java/org/apache/camel/wasm/WasmSupport.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.wasm;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.json.JsonMapper;
-import org.apache.camel.Exchange;
-
-public final class WasmSupport {
- public static final ObjectMapper MAPPER = JsonMapper.builder().build();
-
- private WasmSupport() {
- }
-
- public static byte[] serialize(Exchange exchange) throws Exception {
- Wrapper env = new Wrapper();
- env.body = exchange.getMessage().getBody(byte[].class);
-
- for (String headerName : exchange.getMessage().getHeaders().keySet()) {
- env.headers.put(headerName, exchange.getMessage().getHeader(headerName, String.class));
- }
-
- return MAPPER.writeValueAsBytes(env);
- }
-
- public static class Wrapper {
- @JsonProperty
- public Map headers = new HashMap<>();
-
- @JsonProperty
- public byte[] body;
- }
-}
diff --git a/components/camel-wasm/src/test/java/org/apache/camel/component/wasm/WasmComponentTest.java b/components/camel-wasm/src/test/java/org/apache/camel/component/wasm/WasmComponentTest.java
index b7137dcc87d22..d766ff2432cf0 100644
--- a/components/camel-wasm/src/test/java/org/apache/camel/component/wasm/WasmComponentTest.java
+++ b/components/camel-wasm/src/test/java/org/apache/camel/component/wasm/WasmComponentTest.java
@@ -972,8 +972,8 @@ void moduleIsLoadedAgainAfterAFailedLoad() throws Exception {
@Test
void moduleWithoutStartIsRejected() throws Exception {
- // the test module of the wasm language exports functions, not a program
- assertStartFails("wasm:classpath:functions.wasm", "has no _start function");
+ // a module that exports functions, not a program
+ assertStartFails("wasm:" + wat("library", "(module (func (export \"process\")))"), "has no _start function");
}
@Test
diff --git a/components/camel-wasm/src/test/java/org/apache/camel/language/wasm/WasmLanguageTest.java b/components/camel-wasm/src/test/java/org/apache/camel/language/wasm/WasmLanguageTest.java
deleted file mode 100644
index 86d027d6e78c9..0000000000000
--- a/components/camel-wasm/src/test/java/org/apache/camel/language/wasm/WasmLanguageTest.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.language.wasm;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
-import org.apache.camel.FluentProducerTemplate;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.util.StringHelper;
-import org.assertj.core.api.InstanceOfAssertFactories;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.ValueSource;
-
-import static org.assertj.core.api.Assertions.as;
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class WasmLanguageTest {
-
- @ParameterizedTest
- @ValueSource(strings = {
- "transform@functions.wasm",
- "transform@file:{{wasm.resources.path}}/functions.wasm"
- })
- public void testLanguage(String expression) throws Exception {
- try (CamelContext cc = new DefaultCamelContext()) {
-
- FluentProducerTemplate pt = cc.createFluentProducerTemplate();
-
- cc.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- from("direct:in")
- .transform()
- .wasm(
- StringHelper.before(expression, "@"),
- StringHelper.after(expression, "@"));
- }
- });
- cc.start();
-
- Exchange out = pt.to("direct:in")
- .withHeader("foo", "bar")
- .withBody("hello")
- .request(Exchange.class);
-
- assertThat(out.getMessage().getHeaders())
- .containsEntry("foo", "bar");
- assertThat(out.getMessage().getBody(String.class))
- .isEqualTo("HELLO");
-
- }
- }
-
- @Test
- public void testLanguageFailure() throws Exception {
- try (CamelContext cc = new DefaultCamelContext()) {
-
- FluentProducerTemplate pt = cc.createFluentProducerTemplate();
-
- cc.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- from("direct:in")
- .transform()
- .wasm("transform_err", "functions.wasm");
- }
- });
- cc.start();
-
- Exchange out = pt.to("direct:in")
- .withHeader("foo", "bar")
- .withBody("hello")
- .request(Exchange.class);
-
- assertThat(out.getException())
- .isNotNull()
- .hasCauseInstanceOf(RuntimeException.class)
- .extracting(Throwable::getCause, as(InstanceOfAssertFactories.THROWABLE))
- .hasMessage("this is an error");
- }
- }
-
- @ParameterizedTest
- @ValueSource(classes = { byte[].class, String.class, Boolean.class })
- public void testPredicate(Class> resultType) throws Exception {
- try (CamelContext cc = new DefaultCamelContext()) {
-
- cc.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- // the transform function upper-cases the body, so it returns TRUE, FALSE or nothing
- from("direct:in")
- .filter()
- .wasm("transform", "functions.wasm", resultType)
- .to("mock:result");
- }
- });
- cc.start();
-
- MockEndpoint mock = cc.getEndpoint("mock:result", MockEndpoint.class);
- mock.expectedBodiesReceived("true");
-
- ProducerTemplate pt = cc.createProducerTemplate();
- pt.sendBody("direct:in", "false");
- pt.sendBody("direct:in", "");
- pt.sendBody("direct:in", "true");
-
- mock.assertIsSatisfied();
- }
- }
-}
diff --git a/components/camel-wasm/src/test/java/org/apache/camel/wasm/WasmFunctionTest.java b/components/camel-wasm/src/test/java/org/apache/camel/wasm/WasmFunctionTest.java
deleted file mode 100644
index 3df5ad17aa000..0000000000000
--- a/components/camel-wasm/src/test/java/org/apache/camel/wasm/WasmFunctionTest.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.wasm;
-
-import java.util.Arrays;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.junit.jupiter.api.Test;
-import run.endive.runtime.TrapException;
-import run.endive.runtime.WasmInterruptedException;
-import run.endive.wabt.Wat2Wasm;
-import run.endive.wasm.Parser;
-import run.endive.wasm.WasmModule;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.awaitility.Awaitility.await;
-
-public class WasmFunctionTest {
-
- /**
- * A guest with one page of memory (64 KiB) and an arena allocator that only gets its memory back when every
- * allocation has been released. The process function looks at the first byte of its input:
- *
- * - {@code t} allocates 32 KiB and traps before returning, like a Rust panic on bad input
- * - {@code e} returns the error message {@code boom} with the error bit set on its size
- * - {@code s} spins until the calling thread is interrupted
- * - anything else is echoed back
- *
- * The dealloc function traps when it is given a size that does not fit in 31 bits.
- */
- private static final String GUEST = """
- (module
- (memory (export "memory") 1 1)
- (data (i32.const 16) "boom")
- (global $base i32 (i32.const 1024))
- (global $next (mut i32) (i32.const 1024))
- (global $live (mut i32) (i32.const 0))
-
- (func $alloc (export "alloc") (param $size i32) (result i32)
- (local $ptr i32)
- (local.set $ptr (global.get $next))
- (if (i32.gt_u (i32.add (local.get $ptr) (local.get $size)) (i32.const 65536))
- (then unreachable))
- (global.set $next (i32.add (local.get $ptr) (local.get $size)))
- (global.set $live (i32.add (global.get $live) (i32.const 1)))
- (local.get $ptr))
-
- (func (export "dealloc") (param $ptr i32) (param $len i32)
- (if (i32.lt_s (local.get $len) (i32.const 0))
- (then unreachable))
- (global.set $live (i32.sub (global.get $live) (i32.const 1)))
- (if (i32.eqz (global.get $live))
- (then (global.set $next (global.get $base)))))
-
- (func (export "process") (param $ptr i32) (param $len i32) (result i64)
- (local $op i32)
- (local $out i32)
- (if (i32.gt_u (local.get $len) (i32.const 0))
- (then (local.set $op (i32.load8_u (local.get $ptr)))))
- (if (i32.eq (local.get $op) (i32.const 116))
- (then
- (drop (call $alloc (i32.const 32768)))
- unreachable))
- (if (i32.eq (local.get $op) (i32.const 101))
- (then
- (local.set $out (call $alloc (i32.const 4)))
- (memory.copy (local.get $out) (i32.const 16) (i32.const 4))
- (return (i64.or
- (i64.shl (i64.extend_i32_u (local.get $out)) (i64.const 32))
- (i64.const 0x80000004)))))
- (if (i32.eq (local.get $op) (i32.const 115))
- (then (loop $spin (br $spin))))
- (local.set $out (call $alloc (local.get $len)))
- (memory.copy (local.get $out) (local.get $ptr) (local.get $len))
- (i64.or
- (i64.shl (i64.extend_i32_u (local.get $out)) (i64.const 32))
- (i64.extend_i32_u (local.get $len))))
- )
- """;
-
- private static WasmFunction newFunction() {
- WasmModule module = Parser.parse(Wat2Wasm.parse(GUEST));
- return new WasmFunction(module, "process");
- }
-
- private static byte[] data(char first, int size) {
- byte[] data = new byte[size];
- Arrays.fill(data, (byte) 'a');
- data[0] = (byte) first;
- return data;
- }
-
- @Test
- public void testTrapDoesNotLeakGuestMemory() throws Exception {
- WasmFunction function = newFunction();
-
- // each trap leaves 32 KiB allocated in the guest, more than half of its memory
- for (int i = 0; i < 3; i++) {
- assertThatThrownBy(() -> function.run(data('t', 1)))
- .isInstanceOf(TrapException.class);
- }
-
- // needs 2 x 16 KiB: only fits if the memory of the failed calls was given back
- byte[] in = data('a', 16 * 1024);
- assertThat(function.run(in)).isEqualTo(in);
- }
-
- @Test
- public void testErrorIsDeallocatedWithItsSize() throws Exception {
- WasmFunction function = newFunction();
-
- // dealloc traps on a size with the error bit set, which would replace the error of the function
- assertThatThrownBy(() -> function.run(data('e', 1)))
- .isExactlyInstanceOf(RuntimeException.class)
- .hasMessage("boom");
-
- byte[] in = data('a', 16);
- assertThat(function.run(in)).isEqualTo(in);
- }
-
- @Test
- public void testInterruptDoesNotLeakGuestMemory() throws Exception {
- WasmFunction function = newFunction();
- AtomicReference failure = new AtomicReference<>();
-
- // the input of the interrupted call takes 40 KiB of the guest memory until it is released
- Thread caller = new Thread(() -> {
- try {
- function.run(data('s', 40 * 1024));
- } catch (Throwable e) {
- failure.set(e);
- }
- }, "wasm-caller");
- // a daemon, so that a guest that is never interrupted cannot keep the test JVM from exiting
- caller.setDaemon(true);
- caller.start();
-
- try {
- await().atMost(10, TimeUnit.SECONDS).until(() -> isRunningGuestCode(caller));
- caller.interrupt();
- caller.join(TimeUnit.SECONDS.toMillis(10));
-
- assertThat(caller.isAlive()).isFalse();
- assertThat(failure.get()).isInstanceOf(WasmInterruptedException.class);
-
- // needs 2 x 16 KiB: only fits if the input of the interrupted call was given back
- byte[] in = data('a', 16 * 1024);
- assertThat(function.run(in)).isEqualTo(in);
- } finally {
- // stop the spinning guest even when an assertion above failed
- caller.interrupt();
- caller.join(TimeUnit.SECONDS.toMillis(10));
- }
- }
-
- private static boolean isRunningGuestCode(Thread thread) {
- // the package rather than a class, so that an engine switch or an internal rename does not break the probe
- return Arrays.stream(thread.getStackTrace())
- .anyMatch(e -> e.getClassName().startsWith("run.endive."));
- }
-}
diff --git a/components/camel-wasm/src/test/resources/functions.wasm b/components/camel-wasm/src/test/resources/functions.wasm
deleted file mode 100755
index c8b9e5c2838cd66e943356bb8904db855584f4b7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 2216042
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