From f3d0c31c8bfc70b20c00e41219d80ac5b9d31db0 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 27 Mar 2026 19:55:07 +0100 Subject: [PATCH 01/14] CAMEL-23264: Enhance Splitter EIP with chunking, error threshold, and failure tracking - Add group(int) option to chunk split items into List batches using GroupIterator - Add errorThreshold(double) to abort when failure ratio exceeds threshold - Add maxFailedRecords(int) to abort after N failures - Add SplitResult exchange property with structured failure details - Extract shouldContinueOnFailure() in MulticastProcessor for subclass override - Mutually exclusive validation: stopOnException vs errorThreshold/maxFailedRecords Co-Authored-By: Claude Opus 4.6 --- .../camel/ExchangeConstantProvider.java | 17 +- .../main/java/org/apache/camel/Exchange.java | 4 + .../org/apache/camel/ExchangePropertyKey.java | 3 + .../java/org/apache/camel/SplitResult.java | 93 + .../org/apache/camel/model/split.json | 44 +- .../apache/camel/model/SplitDefinition.java | 129 + .../camel/processor/MulticastProcessor.java | 20 +- .../org/apache/camel/processor/Splitter.java | 143 +- .../apache/camel/reifier/SplitReifier.java | 21 + .../processor/SplitterErrorThresholdTest.java | 110 + .../camel/processor/SplitterGroupTest.java | 109 + .../SplitterMaxFailedRecordsTest.java | 112 + .../processor/SplitterSplitResultTest.java | 124 + .../deserializers/ModelDeserializers.java | 3285 ++++++++--------- 14 files changed, 2477 insertions(+), 1737 deletions(-) create mode 100644 core/camel-api/src/main/java/org/apache/camel/SplitResult.java create mode 100644 core/camel-core/src/test/java/org/apache/camel/processor/SplitterErrorThresholdTest.java create mode 100644 core/camel-core/src/test/java/org/apache/camel/processor/SplitterGroupTest.java create mode 100644 core/camel-core/src/test/java/org/apache/camel/processor/SplitterMaxFailedRecordsTest.java create mode 100644 core/camel-core/src/test/java/org/apache/camel/processor/SplitterSplitResultTest.java diff --git a/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java b/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java index b68d1400ffd47..2e181224ce8c9 100644 --- a/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java +++ b/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java @@ -1,14 +1,10 @@ /* Generated by camel build tools - do NOT edit this file! */ package org.apache.camel; -import java.util.Collection; +import javax.annotation.processing.Generated; import java.util.HashMap; import java.util.Map; -import javax.annotation.processing.Generated; - -import org.jspecify.annotations.Nullable; - /** * Generated by camel build tools - do NOT edit this file! */ @@ -17,7 +13,7 @@ public class ExchangeConstantProvider { private static final Map MAP; static { - Map map = new HashMap<>(151); + Map map = new HashMap<>(150); map.put("AGGREGATED_COLLECTION_GUARD", "CamelAggregatedCollectionGuard"); map.put("AGGREGATED_COMPLETED_BY", "CamelAggregatedCompletedBy"); map.put("AGGREGATED_CORRELATION_KEY", "CamelAggregatedCorrelationKey"); @@ -115,8 +111,6 @@ public class ExchangeConstantProvider { map.put("MAXIMUM_SIMPLE_CACHE_SIZE", "CamelMaximumSimpleCacheSize"); map.put("MAXIMUM_TRANSFORMER_CACHE_SIZE", "CamelMaximumTransformerCacheSize"); map.put("MAXIMUM_VALIDATOR_CACHE_SIZE", "CamelMaximumValidatorCacheSize"); - map.put("MESSAGE_BODY_SIZE", "CamelMessageBodySize"); - map.put("MESSAGE_HEADERS_SIZE", "CamelMessageHeadersSize"); map.put("MESSAGE_HISTORY", "CamelMessageHistory"); map.put("MESSAGE_HISTORY_HEADER_FORMAT", "CamelMessageHistoryHeaderFormat"); map.put("MESSAGE_HISTORY_OUTPUT_FORMAT", "CamelMessageHistoryOutputFormat"); @@ -148,6 +142,7 @@ public class ExchangeConstantProvider { map.put("SLIP_PRODUCER", "CamelSlipProducer"); map.put("SPLIT_COMPLETE", "CamelSplitComplete"); map.put("SPLIT_INDEX", "CamelSplitIndex"); + map.put("SPLIT_RESULT", "CamelSplitResult"); map.put("SPLIT_SIZE", "CamelSplitSize"); map.put("STEP_ID", "CamelStepId"); map.put("STREAM_CACHE_UNIT_OF_WORK", "CamelStreamCacheUnitOfWork"); @@ -172,12 +167,8 @@ public class ExchangeConstantProvider { MAP = map; } - public static @Nullable String lookup(String key) { + public static String lookup(String key) { return MAP.get(key); } - - public static Collection values() { - return MAP.values(); - } } diff --git a/core/camel-api/src/main/java/org/apache/camel/Exchange.java b/core/camel-api/src/main/java/org/apache/camel/Exchange.java index 4d1ab3e3e1d3c..84d9cd958231f 100644 --- a/core/camel-api/src/main/java/org/apache/camel/Exchange.java +++ b/core/camel-api/src/main/java/org/apache/camel/Exchange.java @@ -276,6 +276,10 @@ public interface Exchange extends VariableAware { javaType = "int", important = true) String SPLIT_SIZE = "CamelSplitSize"; + @Metadata(label = "split", + description = "The result of a Splitter EIP operation with error thresholds, providing structured failure details.", + javaType = "org.apache.camel.SplitResult") + String SPLIT_RESULT = "CamelSplitResult"; @Metadata(label = "step", description = "The id of the Step EIP", javaType = "String") String STEP_ID = "CamelStepId"; diff --git a/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java b/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java index c106badb87833..8b1cd66a3ef66 100644 --- a/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java +++ b/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java @@ -88,6 +88,7 @@ public enum ExchangePropertyKey { SLIP_PRODUCER(Exchange.SLIP_PRODUCER), SPLIT_COMPLETE(Exchange.SPLIT_COMPLETE), SPLIT_INDEX(Exchange.SPLIT_INDEX), + SPLIT_RESULT(Exchange.SPLIT_RESULT), SPLIT_SIZE(Exchange.SPLIT_SIZE), STEP_ID(Exchange.STEP_ID), STREAM_CACHE_UNIT_OF_WORK(Exchange.STREAM_CACHE_UNIT_OF_WORK), @@ -222,6 +223,8 @@ public String getName() { return SPLIT_COMPLETE; case Exchange.SPLIT_INDEX: return SPLIT_INDEX; + case Exchange.SPLIT_RESULT: + return SPLIT_RESULT; case Exchange.SPLIT_SIZE: return SPLIT_SIZE; case Exchange.STEP_ID: diff --git a/core/camel-api/src/main/java/org/apache/camel/SplitResult.java b/core/camel-api/src/main/java/org/apache/camel/SplitResult.java new file mode 100644 index 0000000000000..a859e7d8b8461 --- /dev/null +++ b/core/camel-api/src/main/java/org/apache/camel/SplitResult.java @@ -0,0 +1,93 @@ +/* + * 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; + +import java.util.Collections; +import java.util.List; + +/** + * Result of a Splitter EIP operation that provides structured information about the outcome, including failure details + * when error thresholds ({@code errorThreshold} or {@code maxFailedRecords}) are configured. + *

+ * This result is available as an exchange property ({@link Exchange#SPLIT_RESULT}) after the split operation completes. + */ +public final class SplitResult { + + /** + * Details of a single split item failure. + * + * @param index the 0-based index of the failed item in the split sequence + * @param exception the exception that caused the failure + */ + public record Failure(int index, Exception exception) { + } + + private final int totalItems; + private final int failureCount; + private final List failures; + private final boolean aborted; + + public SplitResult(int totalItems, int failureCount, List failures, boolean aborted) { + this.totalItems = totalItems; + this.failureCount = failureCount; + this.failures = failures != null ? Collections.unmodifiableList(failures) : Collections.emptyList(); + this.aborted = aborted; + } + + /** + * The total number of items that were prepared for splitting. + */ + public int getTotalItems() { + return totalItems; + } + + /** + * The number of items that completed successfully. + */ + public int getSuccessCount() { + return totalItems - failureCount; + } + + /** + * The number of items that failed during processing. + */ + public int getFailureCount() { + return failureCount; + } + + /** + * The list of individual failures with their index and exception details. + */ + public List getFailures() { + return failures; + } + + /** + * Whether the split operation was aborted early because an error threshold was exceeded. + */ + public boolean isAborted() { + return aborted; + } + + @Override + public String toString() { + return "SplitResult[total=" + totalItems + + ", success=" + getSuccessCount() + + ", failures=" + failureCount + + ", aborted=" + aborted + "]"; + } +} diff --git a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json index 889d6bc7dfec9..c8ffe70dfc724 100644 --- a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json +++ b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json @@ -3,35 +3,37 @@ "kind": "model", "name": "split", "title": "Split", - "description": "Splits a message into multiple sub-messages using an expression, and processes each one individually. Supports parallel processing and result aggregation.", + "description": "Splits a single message into many sub-messages.", "deprecated": false, - "label": "aggregate,eip,routing", + "label": "eip,routing", "javaType": "org.apache.camel.model.SplitDefinition", - "aliases": [ "split", "chunk" ], "abstract": false, "input": true, "output": true }, "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" }, - "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", "csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "java", "joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "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." }, - "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." }, - "aggregationStrategyMethodAllowNull": { "index": 8, "kind": "attribute", "displayName": "Aggregation Strategy Method Allow Null", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If true then null is used as the oldExchange when there is no data to aggregate, when using POJOs as the AggregationStrategy." }, + "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets 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": "Sets the note of 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": "Sets the description of 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", "csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "java", "joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Expression of how to split the message body, such as as-is, using a tokenizer, or using a xpath." }, + "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, this can be needed in some special situations. 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": "Sets a reference to the AggregationStrategy to be used to assemble the replies from the split messages, into a single outgoing message from the Splitter. By default Camel will use the original incoming message to the splitter (leave it unchanged). You can also use a POJO as the AggregationStrategy" }, + "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 explicit declare the method name to use, when using POJOs as the AggregationStrategy." }, + "aggregationStrategyMethodAllowNull": { "index": 8, "kind": "attribute", "displayName": "Aggregation Strategy Method Allow Null", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy" }, "parallelAggregate": { "index": 9, "kind": "attribute", "displayName": "Parallel Aggregate", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": true, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe." }, - "parallelProcessing": { "index": 10, "kind": "attribute", "displayName": "Parallel Processing", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then processing each split message occurs concurrently. The caller thread still waits until all messages are fully processed before it continues." }, - "synchronous": { "index": 11, "kind": "attribute", "displayName": "Synchronous", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled." }, - "streaming": { "index": 12, "kind": "attribute", "displayName": "Streaming", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "When enabled then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter does not split all messages first." }, - "stopOnException": { "index": 13, "kind": "attribute", "displayName": "Stop On Exception", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then stops further split processing if an exception or failure occurred during processing of a split message, and the caused exception will be thrown. The default behavior is to not stop but continue processing till the end." }, - "timeout": { "index": 14, "kind": "attribute", "displayName": "Timeout", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "0", "description": "Total timeout in millis when using parallel processing. If the splitter has not been able to process all replies within the given timeframe, then the timeout triggers and the splitter breaks out and continues." }, - "executorService": { "index": 15, "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": "Reference to a custom thread pool to use for parallel processing. Setting this option implies parallel processing." }, - "onPrepare": { "index": 16, "kind": "attribute", "displayName": "On Prepare", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Reference to a processor for preparing the exchange to be sent. Can be used to deep-clone messages that should be sent." }, - "shareUnitOfWork": { "index": 17, "kind": "attribute", "displayName": "Share Unit Of Work", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Shares the unit of work with the parent and each of the split messages. By default each split exchange has its own individual unit of work." }, - "outputs": { "index": 18, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List>", "oneOf": [ "a2aSubTask", "aggregate", "bean", "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", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false } + "parallelProcessing": { "index": 10, "kind": "attribute", "displayName": "Parallel Processing", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then processing each split messages occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. It's only processing the sub messages from the splitter which happens concurrently. When parallel processing is enabled, then the Camel routing engin will continue processing using last used thread from the parallel thread pool. However, if you want to use the original thread that called the splitter, then make sure to enable the synchronous option as well. In parallel processing mode, you may want to also synchronous = true to force this EIP to process the sub-tasks using the upper bounds of the thread-pool. If using synchronous = false then Camel will allow its reactive routing engine to use as many threads as possible, which may be available due to sub-tasks using other thread-pools such as CompletableFuture.runAsync or others." }, + "synchronous": { "index": 11, "kind": "attribute", "displayName": "Synchronous", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether synchronous processing should be strictly used. When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled." }, + "streaming": { "index": 12, "kind": "attribute", "displayName": "Streaming", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "When in streaming mode, then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter do not split all the messages first, but then we do not know the total size, and therefore the org.apache.camel.Exchange#SPLIT_SIZE is empty. In non-streaming mode (default) the splitter will split each message first, to know the total size, and then process each message one by one. This requires to keep all the split messages in memory and therefore requires more memory. The total size is provided in the org.apache.camel.Exchange#SPLIT_SIZE header. The streaming mode also affects the aggregation behavior. If enabled then Camel will process replies out-of-order, e.g. in the order they come back. If disabled, Camel will process replies in the same order as the messages was split." }, + "stopOnException": { "index": 13, "kind": "attribute", "displayName": "Stop On Exception", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the splitter will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The default behavior is to not stop but continue processing till the end" }, + "timeout": { "index": 14, "kind": "attribute", "displayName": "Timeout", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "0", "description": "Sets a total timeout specified in millis, when using parallel processing. If the Splitter hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Splitter breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care." }, + "executorService": { "index": 15, "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 to be used for parallel processing. Notice if you set this option, then parallel processing is automatically implied, and you do not have to enable that option as well." }, + "onPrepare": { "index": 16, "kind": "attribute", "displayName": "On Prepare", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Uses the Processor when preparing the org.apache.camel.Exchange to be sent. This can be used to deep-clone messages that should be sent, or any custom logic needed before the exchange is sent." }, + "shareUnitOfWork": { "index": 17, "kind": "attribute", "displayName": "Share Unit Of Work", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Splitter will by default not share unit of work between the parent exchange and each split exchange. This means each split exchange has its own individual unit of work." }, + "group": { "index": 18, "kind": "attribute", "displayName": "Group", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Groups N split messages into a single message with a java.util.List body. This allows processing items in chunks instead of one at a time." }, + "errorThreshold": { "index": 19, "kind": "attribute", "displayName": "Error Threshold", "group": "advanced", "label": "advanced", "required": false, "type": "number", "javaType": "java.lang.Double", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation." }, + "maxFailedRecords": { "index": 20, "kind": "attribute", "displayName": "Max Failed Records", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the maximum number of failed records before aborting the split operation." }, + "outputs": { "index": 21, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List>", "oneOf": [ "aggregate", "bean", "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", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false } }, "exchangeProperties": { "CamelSplitIndex": { "index": 0, "kind": "exchangeProperty", "displayName": "Split Index", "label": "producer", "required": false, "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "important": true, "description": "A split counter that increases for each Exchange being split. The counter starts from 0." }, diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java index 4ff1356fd9086..d7750db5d5b14 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java @@ -115,6 +115,15 @@ public class SplitDefinition extends OutputExpressionNode implements ExecutorSer description = "Shares the unit of work with the parent and each of the split messages." + " By default each split exchange has its own individual unit of work.") private String shareUnitOfWork; + @XmlAttribute + @Metadata(label = "advanced", javaType = "java.lang.Integer") + private String group; + @XmlAttribute + @Metadata(label = "advanced", javaType = "java.lang.Double") + private String errorThreshold; + @XmlAttribute + @Metadata(label = "advanced", javaType = "java.lang.Integer") + private String maxFailedRecords; public SplitDefinition() { } @@ -137,6 +146,9 @@ public SplitDefinition(SplitDefinition source) { this.executorService = source.executorService; this.onPrepare = source.onPrepare; this.shareUnitOfWork = source.shareUnitOfWork; + this.group = source.group; + this.errorThreshold = source.errorThreshold; + this.maxFailedRecords = source.maxFailedRecords; } public SplitDefinition(Expression expression) { @@ -596,6 +608,89 @@ public SplitDefinition shareUnitOfWork(String shareUnitOfWork) { return this; } + /** + * Groups N split messages into a single message with a {@link java.util.List} body. This allows processing items in + * chunks instead of one at a time. + * + * @param group the number of items per group + * @return the builder + */ + public SplitDefinition group(int group) { + return group(Integer.toString(group)); + } + + /** + * Groups N split messages into a single message with a {@link java.util.List} body. This allows processing items in + * chunks instead of one at a time. + * + * @param group the number of items per group + * @return the builder + */ + public SplitDefinition group(String group) { + setGroup(group); + return this; + } + + /** + * Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation. For + * example, 0.1 means abort if more than 10% of items fail. When the threshold is exceeded, a + * {@link org.apache.camel.CamelExchangeException} is thrown. + *

+ * This option is mutually exclusive with {@code stopOnException}. When set, individual item failures are tracked + * but processing continues until the threshold is exceeded. + * + * @param errorThreshold the failure ratio threshold (0.0-1.0) + * @return the builder + */ + public SplitDefinition errorThreshold(double errorThreshold) { + return errorThreshold(Double.toString(errorThreshold)); + } + + /** + * Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation. For + * example, 0.1 means abort if more than 10% of items fail. When the threshold is exceeded, a + * {@link org.apache.camel.CamelExchangeException} is thrown. + *

+ * This option is mutually exclusive with {@code stopOnException}. When set, individual item failures are tracked + * but processing continues until the threshold is exceeded. + * + * @param errorThreshold the failure ratio threshold (0.0-1.0) + * @return the builder + */ + public SplitDefinition errorThreshold(String errorThreshold) { + setErrorThreshold(errorThreshold); + return this; + } + + /** + * Sets the maximum number of failed records before aborting the split operation. When the count is exceeded, a + * {@link org.apache.camel.CamelExchangeException} is thrown. + *

+ * This option is mutually exclusive with {@code stopOnException}. Can be combined with {@code errorThreshold} — + * processing aborts when either threshold is exceeded. + * + * @param maxFailedRecords the maximum number of allowed failures + * @return the builder + */ + public SplitDefinition maxFailedRecords(int maxFailedRecords) { + return maxFailedRecords(Integer.toString(maxFailedRecords)); + } + + /** + * Sets the maximum number of failed records before aborting the split operation. When the count is exceeded, a + * {@link org.apache.camel.CamelExchangeException} is thrown. + *

+ * This option is mutually exclusive with {@code stopOnException}. Can be combined with {@code errorThreshold} — + * processing aborts when either threshold is exceeded. + * + * @param maxFailedRecords the maximum number of allowed failures + * @return the builder + */ + public SplitDefinition maxFailedRecords(String maxFailedRecords) { + setMaxFailedRecords(maxFailedRecords); + return this; + } + // Properties // ------------------------------------------------------------------------- @@ -733,4 +828,38 @@ public String getExecutorService() { public void setExecutorService(String executorService) { this.executorService = executorService; } + + public String getGroup() { + return group; + } + + /** + * Groups N split messages into a single message with a {@link java.util.List} body. This allows processing items in + * chunks instead of one at a time. + */ + public void setGroup(String group) { + this.group = group; + } + + public String getErrorThreshold() { + return errorThreshold; + } + + /** + * Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation. + */ + public void setErrorThreshold(String errorThreshold) { + this.errorThreshold = errorThreshold; + } + + public String getMaxFailedRecords() { + return maxFailedRecords; + } + + /** + * Sets the maximum number of failed records before aborting the split operation. + */ + public void setMaxFailedRecords(String maxFailedRecords) { + this.maxFailedRecords = maxFailedRecords; + } } diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java index e6a1d4cc59199..419e62ae4e4b0 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java @@ -599,7 +599,7 @@ public void run() { msg = "Multicast processing failed for number " + index; } boolean continueProcessing = PipelineHelper.continueProcessing(exchange, msg, LOG); - if (stopOnException && !continueProcessing) { + if (!continueProcessing && !shouldContinueOnFailure(exchange, original, index)) { if (exchange.getException() != null) { // wrap in exception to explain where it failed exchange.setException(new CamelExchangeException( @@ -735,7 +735,7 @@ boolean doRun() throws Exception { msg = "Multicast processing failed for number " + index; } boolean continueProcessing = PipelineHelper.continueProcessing(exchange, msg, LOG); - if (stopOnException && !continueProcessing) { + if (!continueProcessing && !shouldContinueOnFailure(exchange, original, index)) { if (exchange.getException() != null) { // wrap in exception to explain where it failed exchange.setException(new CamelExchangeException( @@ -771,6 +771,22 @@ boolean doRun() throws Exception { } } + /** + * Determines whether processing should continue after a sub-exchange has failed. + *

+ * The default implementation returns {@code false} when {@code stopOnException} is enabled (meaning processing + * should stop). Subclasses (e.g., Splitter) can override this to implement more sophisticated failure policies such + * as error threshold checking. + * + * @param subExchange the failed sub-exchange + * @param original the original exchange + * @param index the index of the failed sub-exchange + * @return {@code true} to continue processing despite the failure, {@code false} to stop + */ + protected boolean shouldContinueOnFailure(Exchange subExchange, Exchange original, int index) { + return !stopOnException; + } + protected ScheduledFuture schedule(Executor executor, Runnable runnable, long delay, TimeUnit unit) { if (executor instanceof ScheduledExecutorService scheduledExecutorService) { return scheduledExecutorService.schedule(runnable, delay, unit); diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java index 4620ecf945f42..e402bc1478867 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java @@ -25,7 +25,9 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ExecutorService; +import java.util.concurrent.atomic.AtomicInteger; import org.apache.camel.AggregationStrategy; import org.apache.camel.AsyncCallback; @@ -37,9 +39,11 @@ import org.apache.camel.Processor; import org.apache.camel.Route; import org.apache.camel.RuntimeCamelException; +import org.apache.camel.SplitResult; import org.apache.camel.processor.aggregate.ShareUnitOfWorkAggregationStrategy; import org.apache.camel.processor.aggregate.UseOriginalAggregationStrategy; import org.apache.camel.support.ExchangeHelper; +import org.apache.camel.support.GroupIterator; import org.apache.camel.support.ObjectHelper; import org.apache.camel.util.IOHelper; import org.apache.camel.util.StringHelper; @@ -54,8 +58,12 @@ public class Splitter extends MulticastProcessor { private static final String IGNORE_DELIMITER_MARKER = "false"; private static final String SINGLE_DELIMITER_MARKER = "single"; + private static final String SPLIT_FAILURE_TRACKER = "CamelSplitFailureTracker"; private final Expression expression; private final String delimiter; + private int group; + private double errorThreshold; + private int maxFailedRecords; public Splitter(CamelContext camelContext, Route route, Expression expression, Processor destination, AggregationStrategy aggregationStrategy, boolean parallelProcessing, @@ -123,7 +131,21 @@ public boolean process(Exchange exchange, final AsyncCallback callback) { setAggregationStrategyOnExchange(exchange, original); } - return super.process(exchange, callback); + // create failure tracker if error thresholds are configured + boolean hasErrorThreshold = errorThreshold > 0 || maxFailedRecords > 0; + if (hasErrorThreshold) { + exchange.setProperty(SPLIT_FAILURE_TRACKER, new SplitFailureTracker()); + } + + // wrap callback to build SplitResult after all items are processed + AsyncCallback wrappedCallback = hasErrorThreshold + ? doneSync -> { + buildSplitResult(exchange); + callback.done(doneSync); + } + : callback; + + return super.process(exchange, wrappedCallback); } @Override @@ -145,6 +167,14 @@ protected Iterable createProcessorExchangePairs(Exchange throw exchange.getException(); } + // store total items count in tracker for SplitResult reporting + if (answer instanceof Collection coll) { + SplitFailureTracker tracker = exchange.getProperty(SPLIT_FAILURE_TRACKER, SplitFailureTracker.class); + if (tracker != null) { + tracker.setTotalItems(coll.size()); + } + } + return answer; } @@ -166,14 +196,17 @@ private SplitterIterable(Exchange exchange, Object value) { this.original = exchange; this.value = value; + Iterator rawIterator; if (IGNORE_DELIMITER_MARKER.equalsIgnoreCase(delimiter)) { - this.iterator = ObjectHelper.createIterator(value, null); + rawIterator = ObjectHelper.createIterator(value, null); } else if (SINGLE_DELIMITER_MARKER.equalsIgnoreCase(delimiter)) { // force single element - this.iterator = ObjectHelper.createIterator(List.of(value)); + rawIterator = ObjectHelper.createIterator(List.of(value)); } else { - this.iterator = ObjectHelper.createIterator(value, delimiter); + rawIterator = ObjectHelper.createIterator(value, delimiter); } + // wrap with GroupIterator if group > 0 to chunk items into List batches + this.iterator = group > 0 ? new GroupIterator(rawIterator, group) : rawIterator; this.copy = copyAndPrepareSubExchange(exchange); this.route = ExchangeHelper.getRoute(exchange); @@ -310,6 +343,108 @@ public Expression getExpression() { return expression; } + public int getGroup() { + return group; + } + + public void setGroup(int group) { + this.group = group; + } + + public double getErrorThreshold() { + return errorThreshold; + } + + public void setErrorThreshold(double errorThreshold) { + this.errorThreshold = errorThreshold; + } + + public int getMaxFailedRecords() { + return maxFailedRecords; + } + + public void setMaxFailedRecords(int maxFailedRecords) { + this.maxFailedRecords = maxFailedRecords; + } + + @Override + protected boolean shouldContinueOnFailure(Exchange subExchange, Exchange original, int index) { + SplitFailureTracker tracker = original.getProperty(SPLIT_FAILURE_TRACKER, SplitFailureTracker.class); + if (tracker == null) { + return super.shouldContinueOnFailure(subExchange, original, index); + } + + // record the failure + tracker.recordFailure(index, subExchange.getException()); + + // check if we've exceeded the max failed records + if (maxFailedRecords > 0 && tracker.getFailureCount() >= maxFailedRecords) { + return false; + } + // check if we've exceeded the error ratio threshold + if (errorThreshold > 0) { + double ratio = (double) tracker.getFailureCount() / (index + 1); + if (ratio >= errorThreshold) { + return false; + } + } + + // continue processing - clear the exception so aggregation proceeds normally + subExchange.setException(null); + return true; + } + + static final class SplitFailureTracker { + private final AtomicInteger failureCount = new AtomicInteger(); + private final AtomicInteger totalItems = new AtomicInteger(); + private final CopyOnWriteArrayList failures = new CopyOnWriteArrayList<>(); + + record SplitFailure(int index, Exception exception) { + } + + void recordFailure(int index, Exception exception) { + failureCount.incrementAndGet(); + failures.add(new SplitFailure(index, exception)); + } + + void setTotalItems(int count) { + totalItems.set(count); + } + + int getTotalItems() { + return totalItems.get(); + } + + int getFailureCount() { + return failureCount.get(); + } + + List getFailures() { + return Collections.unmodifiableList(failures); + } + } + + private void buildSplitResult(Exchange exchange) { + SplitFailureTracker tracker = exchange.getProperty(SPLIT_FAILURE_TRACKER, SplitFailureTracker.class); + if (tracker == null) { + return; + } + + int totalItems = tracker.getTotalItems(); + boolean aborted = exchange.getException() != null; + + List failures = new ArrayList<>(); + for (SplitFailureTracker.SplitFailure f : tracker.getFailures()) { + failures.add(new SplitResult.Failure(f.index(), f.exception())); + } + + SplitResult result = new SplitResult(totalItems, tracker.getFailureCount(), failures, aborted); + exchange.setProperty(ExchangePropertyKey.SPLIT_RESULT, result); + + // remove internal tracker + exchange.removeProperty(SPLIT_FAILURE_TRACKER); + } + private Exchange copyAndPrepareSubExchange(Exchange exchange) { Exchange answer = processorExchangeFactory.createCopy(exchange); // must preserve exchange id diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java index 77d0fb583dfbf..49afb1a83427b 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java @@ -78,6 +78,27 @@ public Processor createProcessor() throws Exception { } answer.setSynchronous(isSynchronous); answer.setDisabled(isDisabled(camelContext, definition)); + + int group = parseInt(definition.getGroup(), 0); + if (group > 0) { + answer.setGroup(group); + } + + String etStr = parseString(definition.getErrorThreshold()); + double errorThreshold = etStr != null ? Double.parseDouble(etStr) : 0; + int maxFailedRecords = parseInt(definition.getMaxFailedRecords(), 0); + boolean hasErrorThreshold = errorThreshold > 0 || maxFailedRecords > 0; + if (hasErrorThreshold && isStopOnException) { + throw new IllegalArgumentException( + "Cannot use both stopOnException and errorThreshold/maxFailedRecords on the Splitter EIP"); + } + if (errorThreshold > 0) { + answer.setErrorThreshold(errorThreshold); + } + if (maxFailedRecords > 0) { + answer.setMaxFailedRecords(maxFailedRecords); + } + return answer; } diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterErrorThresholdTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterErrorThresholdTest.java new file mode 100644 index 0000000000000..09770dbcdd59f --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterErrorThresholdTest.java @@ -0,0 +1,110 @@ +/* + * 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.processor; + +import java.util.Arrays; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.Exchange; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class SplitterErrorThresholdTest extends ContextTestSupport { + + @Test + void testErrorThresholdStopsWhenRatioExceeded() throws Exception { + // items: FAIL, FAIL, a, b, c + // errorThreshold=0.5 (50%) + // item 0: FAIL → failCount=1, ratio=1/1=100% ≥ 50% → stop + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMinimumMessageCount(0); + + Exchange result = template.send("direct:start", + e -> e.getIn().setBody(Arrays.asList("FAIL", "FAIL", "a", "b", "c"))); + + mock.assertIsSatisfied(); + + assertNotNull(result.getException(), "Should have an exception when error threshold exceeded"); + } + + @Test + void testErrorThresholdBelowRatio() throws Exception { + // items: a, b, FAIL, c, d, e, f, g, h, i + // errorThreshold=0.5 (50%) + // item 0: a → ok + // item 1: b → ok + // item 2: FAIL → failCount=1, ratio=1/3=33% < 50% → continue + // items 3-9: ok + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMessageCount(9); // 10 items minus 1 failure + + template.sendBody("direct:start", Arrays.asList("a", "b", "FAIL", "c", "d", "e", "f", "g", "h", "i")); + + mock.assertIsSatisfied(); + } + + @Test + void testErrorThresholdAllSucceed() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMessageCount(5); + + template.sendBody("direct:start", Arrays.asList("a", "b", "c", "d", "e")); + + mock.assertIsSatisfied(); + } + + @Test + void testStopOnExceptionAndErrorThresholdAreMutuallyExclusive() throws Exception { + try { + context.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:invalid") + .split(body()).stopOnException().errorThreshold(0.5) + .to("mock:invalid"); + } + }); + throw new AssertionError("Expected IllegalArgumentException"); + } catch (Exception e) { + assertTrue(e.getCause() instanceof IllegalArgumentException + || e instanceof IllegalArgumentException, + "Should throw IllegalArgumentException"); + } + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("direct:start") + .split(body()).errorThreshold(0.5) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure for: " + body); + } + }) + .to("mock:split"); + } + }; + } +} diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterGroupTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterGroupTest.java new file mode 100644 index 0000000000000..1da7beeb775ed --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterGroupTest.java @@ -0,0 +1,109 @@ +/* + * 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.processor; + +import java.util.Arrays; +import java.util.List; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; + +class SplitterGroupTest extends ContextTestSupport { + + @Test + void testSplitterGroup() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMessageCount(3); + + template.sendBody("direct:start", Arrays.asList("a", "b", "c", "d", "e", "f", "g")); + + mock.assertIsSatisfied(); + + // First group: [a, b, c] + Object body0 = mock.getReceivedExchanges().get(0).getIn().getBody(); + assertInstanceOf(List.class, body0); + assertEquals(3, ((List) body0).size()); + + // Second group: [d, e, f] + Object body1 = mock.getReceivedExchanges().get(1).getIn().getBody(); + assertInstanceOf(List.class, body1); + assertEquals(3, ((List) body1).size()); + + // Third group: [g] (remainder) + Object body2 = mock.getReceivedExchanges().get(2).getIn().getBody(); + assertInstanceOf(List.class, body2); + assertEquals(1, ((List) body2).size()); + } + + @Test + void testSplitterGroupExactMultiple() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMessageCount(2); + + template.sendBody("direct:start", Arrays.asList("a", "b", "c", "d", "e", "f")); + + mock.assertIsSatisfied(); + + assertEquals(3, ((List) mock.getReceivedExchanges().get(0).getIn().getBody()).size()); + assertEquals(3, ((List) mock.getReceivedExchanges().get(1).getIn().getBody()).size()); + } + + @Test + void testSplitterGroupSingleItem() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMessageCount(1); + + template.sendBody("direct:start", List.of("only")); + + mock.assertIsSatisfied(); + + List body = (List) mock.getReceivedExchanges().get(0).getIn().getBody(); + assertEquals(1, body.size()); + assertEquals("only", body.get(0)); + } + + @Test + void testSplitterGroupWithParallelProcessing() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:parallel-split"); + mock.expectedMessageCount(3); + + template.sendBody("direct:parallel", Arrays.asList(1, 2, 3, 4, 5, 6, 7)); + + mock.assertIsSatisfied(); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("direct:start") + .split(body()).group(3) + .to("mock:split"); + + from("direct:parallel") + .split(body()).group(3).parallelProcessing() + .to("mock:parallel-split"); + } + }; + } +} diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterMaxFailedRecordsTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterMaxFailedRecordsTest.java new file mode 100644 index 0000000000000..69b36f39a4139 --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterMaxFailedRecordsTest.java @@ -0,0 +1,112 @@ +/* + * 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.processor; + +import java.util.Arrays; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.Exchange; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class SplitterMaxFailedRecordsTest extends ContextTestSupport { + + @Test + void testMaxFailedRecordsStopsAfterThreshold() throws Exception { + // items: a, FAIL, b, FAIL, c, FAIL, d + // maxFailedRecords=2, so processing should stop after the 2nd failure + MockEndpoint mock = getMockEndpoint("mock:split"); + // With maxFailedRecords=2: items a (ok), FAIL (fail #1, continue), b (ok), FAIL (fail #2, stop) + // Items c, FAIL, d should NOT be processed + mock.expectedMinimumMessageCount(2); // at least a, b + + Exchange result = template.send("direct:start", + e -> e.getIn().setBody(Arrays.asList("a", "FAIL", "b", "FAIL", "c", "FAIL", "d"))); + + mock.assertIsSatisfied(); + + // the exchange should have an exception because threshold was exceeded + assertNotNull(result.getException(), "Should have an exception when max failed records exceeded"); + + // verify that not all items were processed + assertTrue(mock.getReceivedCounter() < 7, "Should have stopped before processing all items"); + } + + @Test + void testMaxFailedRecordsAllSucceed() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMessageCount(4); + + template.sendBody("direct:start", Arrays.asList("a", "b", "c", "d")); + + mock.assertIsSatisfied(); + } + + @Test + void testMaxFailedRecordsSingleFailure() throws Exception { + // maxFailedRecords=2, only 1 failure, should process all items + // only 3 items reach mock:split (the failed one throws before reaching the endpoint) + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMessageCount(3); + + template.sendBody("direct:start", Arrays.asList("a", "FAIL", "b", "c")); + + mock.assertIsSatisfied(); + } + + @Test + void testStopOnExceptionAndMaxFailedRecordsAreMutuallyExclusive() throws Exception { + try { + context.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:invalid") + .split(body()).stopOnException().maxFailedRecords(3) + .to("mock:invalid"); + } + }); + // should not reach here + throw new AssertionError("Expected IllegalArgumentException"); + } catch (Exception e) { + assertTrue(e.getCause() instanceof IllegalArgumentException + || e instanceof IllegalArgumentException, + "Should throw IllegalArgumentException"); + } + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("direct:start") + .split(body()).maxFailedRecords(2) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure for: " + body); + } + }) + .to("mock:split"); + } + }; + } +} diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterSplitResultTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterSplitResultTest.java new file mode 100644 index 0000000000000..012e6d75e0d3a --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterSplitResultTest.java @@ -0,0 +1,124 @@ +/* + * 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.processor; + +import java.util.Arrays; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.Exchange; +import org.apache.camel.SplitResult; +import org.apache.camel.builder.RouteBuilder; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class SplitterSplitResultTest extends ContextTestSupport { + + @Test + void testSplitResultWithFailures() throws Exception { + // items: a, FAIL, b, FAIL, c — maxFailedRecords=5 so all items are processed + Exchange result = template.send("direct:tolerant", + e -> e.getIn().setBody(Arrays.asList("a", "FAIL", "b", "FAIL", "c"))); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult, "SplitResult should be set as exchange property"); + + assertEquals(5, splitResult.getTotalItems()); + assertEquals(2, splitResult.getFailureCount()); + assertEquals(3, splitResult.getSuccessCount()); + assertFalse(splitResult.isAborted()); + + // verify failure details + assertEquals(2, splitResult.getFailures().size()); + assertEquals(1, splitResult.getFailures().get(0).index()); + assertEquals(3, splitResult.getFailures().get(1).index()); + assertNotNull(splitResult.getFailures().get(0).exception()); + } + + @Test + void testSplitResultWhenAborted() throws Exception { + // items: FAIL, FAIL, a, b — maxFailedRecords=2 so aborted after 2nd failure + Exchange result = template.send("direct:strict", + e -> e.getIn().setBody(Arrays.asList("FAIL", "FAIL", "a", "b"))); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult, "SplitResult should be set even when aborted"); + assertTrue(splitResult.isAborted()); + assertEquals(2, splitResult.getFailureCount()); + } + + @Test + void testSplitResultAllSuccess() throws Exception { + Exchange result = template.send("direct:tolerant", + e -> e.getIn().setBody(Arrays.asList("a", "b", "c"))); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult, "SplitResult should be set even with no failures"); + + assertEquals(3, splitResult.getTotalItems()); + assertEquals(0, splitResult.getFailureCount()); + assertEquals(3, splitResult.getSuccessCount()); + assertFalse(splitResult.isAborted()); + assertTrue(splitResult.getFailures().isEmpty()); + } + + @Test + void testNoSplitResultWithoutErrorThreshold() throws Exception { + // plain split without error threshold should not set SplitResult + Exchange result = template.send("direct:plain", + e -> e.getIn().setBody(Arrays.asList("a", "b", "c"))); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNull(splitResult, "SplitResult should not be set without error threshold"); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("direct:tolerant") + .split(body()).maxFailedRecords(5) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure for: " + body); + } + }) + .to("mock:split"); + + from("direct:strict") + .split(body()).maxFailedRecords(2) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure for: " + body); + } + }) + .to("mock:split"); + + from("direct:plain") + .split(body()) + .to("mock:split"); + } + }; + } +} diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java index 03a1de268bb11..4f35d28c62dda 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java @@ -11,7 +11,6 @@ import org.apache.camel.dsl.yaml.common.YamlDeserializerBase; import org.apache.camel.dsl.yaml.common.YamlDeserializerEndpointAwareBase; import org.apache.camel.dsl.yaml.common.YamlDeserializerSupport; -import org.apache.camel.model.A2ASubTaskDefinition; import org.apache.camel.model.AggregateDefinition; import org.apache.camel.model.BeanDefinition; import org.apache.camel.model.BeanFactoryDefinition; @@ -268,104 +267,18 @@ public final class ModelDeserializers extends YamlDeserializerSupport { private ModelDeserializers() { } - @YamlType( - nodes = "a2aSubTask", - types = org.apache.camel.model.A2ASubTaskDefinition.class, - order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, - displayName = "A2A Sub Task", - description = "Groups route steps and emits A2A (Agent-to-Agent) protocol progress events before, after, or when the grouped work fails", - deprecated = false, - properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "emitAfter", type = "string", description = "Simple expression template to emit after the nested steps complete successfully", displayName = "Emit After"), - @YamlProperty(name = "emitBefore", type = "string", description = "Simple expression template to emit before the nested steps run", displayName = "Emit Before"), - @YamlProperty(name = "emitOnError", type = "string", description = "Simple expression template to emit when the nested steps fail", displayName = "Emit On Error"), - @YamlProperty(name = "failIfNoTaskContext", type = "boolean", defaultValue = "false", description = "Whether to fail if the current Exchange does not have an active A2A task context", displayName = "Fail If No Task Context"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") - } - ) - public static class A2ASubTaskDefinitionDeserializer extends YamlDeserializerBase { - public A2ASubTaskDefinitionDeserializer() { - super(A2ASubTaskDefinition.class); - } - - @Override - protected A2ASubTaskDefinition newInstance() { - return new A2ASubTaskDefinition(); - } - - @Override - protected boolean setProperty(A2ASubTaskDefinition target, String propertyKey, - String propertyName, Node node) { - propertyKey = org.apache.camel.util.StringHelper.dashToCamelCase(propertyKey); - switch(propertyKey) { - case "disabled": { - String val = asText(node); - target.setDisabled(val); - break; - } - case "emitAfter": { - String val = asText(node); - target.setEmitAfter(val); - break; - } - case "emitBefore": { - String val = asText(node); - target.setEmitBefore(val); - break; - } - case "emitOnError": { - String val = asText(node); - target.setEmitOnError(val); - break; - } - case "failIfNoTaskContext": { - String val = asText(node); - target.setFailIfNoTaskContext(val); - break; - } - case "id": { - String val = asText(node); - target.setId(val); - break; - } - case "description": { - String val = asText(node); - target.setDescription(val); - break; - } - case "note": { - String val = asText(node); - target.setNote(val); - break; - } - case "steps": { - setSteps(target, node); - break; - } - default: { - return false; - } - } - return true; - } - } - @YamlType( nodes = "asn1", inline = true, types = org.apache.camel.model.dataformat.ASN1DataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "ASN.1 File", - description = "Encode and decode data structures using Abstract Syntax Notation One (ASN.1)", + description = "Encode and decode data structures using Abstract Syntax Notation One (ASN.1).", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "unmarshalType", type = "string", description = "Class to use when unmarshalling.", displayName = "Unmarshal Type"), - @YamlProperty(name = "usingIterator", type = "boolean", defaultValue = "false", description = "If the asn1 file has more than one entry, the setting this option to true allows working with the splitter EIP to split each entry individually.", displayName = "Using Iterator") + @YamlProperty(name = "usingIterator", type = "boolean", defaultValue = "false", description = "If the asn1 file has more than one entry, the setting this option to true, allows working with the splitter EIP, to split the data using an iterator in a streaming mode.", displayName = "Using Iterator") } ) public static class ASN1DataFormatDeserializer extends YamlDeserializerBase { @@ -416,42 +329,41 @@ protected boolean setProperty(ASN1DataFormat target, String propertyKey, types = org.apache.camel.model.AggregateDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Aggregate", - description = "Collects and combines related messages into a single message using a correlation expression and an aggregation strategy. Messages are grouped into buckets by correlation key and released when a completion condition is met.", + description = "Aggregates many messages into a single message", deprecated = false, properties = { - @YamlProperty(name = "aggregateController", type = "string", description = "Reference to an AggregateController to allow external sources to control this aggregator.", displayName = "Aggregate Controller"), - @YamlProperty(name = "aggregationRepository", type = "string", description = "Reference to the AggregationRepository to use. By default uses MemoryAggregationRepository.", displayName = "Aggregation Repository"), - @YamlProperty(name = "aggregationStrategy", type = "string", required = true, description = "The AggregationStrategy to use. Required. Merges each incoming exchange with the existing already merged exchanges. At first call the oldExchange parameter is null.", displayName = "Aggregation Strategy"), - @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If true then null is used as the oldExchange at the very first aggregation, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "The method name to use when using a POJO as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "closeCorrelationKeyOnCompletion", type = "number", description = "Closes a correlation key when its complete. Late arriving exchanges with a closed correlation key will throw a ClosedCorrelationKeyException. The value is the maximum cache size of closed keys. Use 0 for unbounded.", displayName = "Close Correlation Key On Completion"), - @YamlProperty(name = "completeAllOnStop", type = "boolean", defaultValue = "false", description = "If enabled then waits to complete all current and partial (pending) aggregated exchanges when the context is stopped, ensuring the aggregation repository is empty before shutdown.", displayName = "Complete All On Stop"), - @YamlProperty(name = "completionFromBatchConsumer", type = "boolean", defaultValue = "false", description = "Enables batch completion mode where aggregation completes based on the total number of exchanges reported by a batch consumer. Cannot be used together with discardOnAggregationFailure.", displayName = "Completion From Batch Consumer"), - @YamlProperty(name = "completionInterval", type = "string", description = "A repeating period by which the aggregator will complete all current aggregated exchanges. Cannot be used together with completionTimeout.", displayName = "Completion Interval"), - @YamlProperty(name = "completionOnNewCorrelationGroup", type = "boolean", defaultValue = "false", description = "Enables completion on all previous groups when a new incoming correlation group starts. Only one correlation group can be in progress at a time.", displayName = "Completion On New Correlation Group"), - @YamlProperty(name = "completionPredicate", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", 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.", displayName = "Completion Predicate"), - @YamlProperty(name = "completionSize", type = "number", description = "Number of messages aggregated before the aggregation is complete. Can also be set as an expression via completionSizeExpression.", displayName = "Completion Size"), - @YamlProperty(name = "completionSizeExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Number of messages aggregated before the aggregation is complete, evaluated as an expression allowing dynamic size values.", displayName = "Completion Size Expression"), - @YamlProperty(name = "completionTimeout", type = "string", description = "Time that an aggregated exchange should be inactive before its complete (timeout). Cannot be used together with completionInterval.", displayName = "Completion Timeout"), - @YamlProperty(name = "completionTimeoutCheckerInterval", type = "string", defaultValue = "1000", description = "Interval in millis for the background task that checks for completion timeouts. Default is 1000 (1 second).", displayName = "Completion Timeout Checker Interval"), - @YamlProperty(name = "completionTimeoutExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Time in millis that an aggregated exchange should be inactive before its complete (timeout), evaluated as an expression allowing dynamic timeout values.", displayName = "Completion Timeout Expression"), - @YamlProperty(name = "correlationExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", 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.", displayName = "Correlation Expression"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "discardOnAggregationFailure", type = "boolean", defaultValue = "false", description = "If enabled then the partly aggregated message is discarded when aggregation failed (an exception was thrown from AggregationStrategy). Cannot be used together with completionFromBatchConsumer.", displayName = "Discard On Aggregation Failure"), - @YamlProperty(name = "discardOnCompletionTimeout", type = "boolean", defaultValue = "false", description = "If enabled then the aggregated message is discarded (dropped) on completion timeout instead of being sent out of the aggregator.", displayName = "Discard On Completion Timeout"), - @YamlProperty(name = "eagerCheckCompletion", type = "boolean", defaultValue = "false", description = "If enabled then the completion predicate evaluates against the incoming exchange. Otherwise it evaluates against the aggregated exchange.", displayName = "Eager Check Completion"), - @YamlProperty(name = "executorService", type = "string", description = "Reference to a custom thread pool to use for parallel processing and sending out aggregated exchanges.", displayName = "Executor Service"), - @YamlProperty(name = "forceCompletionOnStop", type = "boolean", defaultValue = "false", description = "If enabled then all current aggregated exchanges are completed when the context is stopped.", displayName = "Force Completion On Stop"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreInvalidCorrelationKeys", type = "boolean", defaultValue = "false", description = "If enabled then a correlation key that cannot be evaluated is logged and ignored, instead of throwing an exception.", displayName = "Ignore Invalid Correlation Keys"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "optimisticLockRetryPolicy", type = "object:org.apache.camel.model.OptimisticLockRetryPolicyDefinition", description = "Configures retry settings when using optimistic locking.", displayName = "Optimistic Lock Retry Policy"), - @YamlProperty(name = "optimisticLocking", type = "boolean", defaultValue = "false", description = "Turns on optimistic locking, which requires the aggregation repository to implement OptimisticLockingAggregationRepository.", displayName = "Optimistic Locking"), - @YamlProperty(name = "optimisticLockingSyncRetry", type = "boolean", defaultValue = "false", description = "When optimistic locking is enabled, retries happen synchronously in the same thread instead of being scheduled on a background thread. This preserves transaction context for repositories that require single-thread transactional guarantees.", displayName = "Optimistic Locking Sync Retry"), - @YamlProperty(name = "parallelProcessing", type = "boolean", 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.", displayName = "Parallel Processing"), + @YamlProperty(name = "aggregateController", type = "string", description = "To use a org.apache.camel.processor.aggregate.AggregateController to allow external sources to control this aggregator.", displayName = "Aggregate Controller"), + @YamlProperty(name = "aggregationRepository", type = "string", description = "The AggregationRepository to use. Sets the custom aggregate repository to use. Will by default use org.apache.camel.processor.aggregate.MemoryAggregationRepository", displayName = "Aggregation Repository"), + @YamlProperty(name = "aggregationStrategy", type = "string", required = true, description = "The AggregationStrategy to use. For example to lookup a bean with the name foo, the value is simply just #bean:foo. Configuring an AggregationStrategy is required, and is used to merge the incoming Exchange with the existing already merged exchanges. At first call the oldExchange parameter is null. On subsequent invocations the oldExchange contains the merged exchanges and newExchange is of course the new incoming Exchange.", displayName = "Aggregation Strategy"), + @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used for the very first aggregation. If this option is true then null values is used as the oldExchange (at the very first aggregation), when using beans as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using beans as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "closeCorrelationKeyOnCompletion", type = "number", description = "Closes a correlation key when its complete. Any late received exchanges which has a correlation key that has been closed, it will be defined and a ClosedCorrelationKeyException is thrown.", displayName = "Close Correlation Key On Completion"), + @YamlProperty(name = "completeAllOnStop", type = "boolean", defaultValue = "false", description = "Indicates to wait to complete all current and partial (pending) aggregated exchanges when the context is stopped. This also means that we will wait for all pending exchanges which are stored in the aggregation repository to complete so the repository is empty before we can stop. You may want to enable this when using the memory based aggregation repository that is memory based only, and do not store data on disk. When this option is enabled, then the aggregator is waiting to complete all those exchanges before its stopped, when stopping CamelContext or the route using it.", displayName = "Complete All On Stop"), + @YamlProperty(name = "completionFromBatchConsumer", type = "boolean", defaultValue = "false", description = "Enables the batch completion mode where we aggregate from a org.apache.camel.BatchConsumer and aggregate the total number of exchanges the org.apache.camel.BatchConsumer has reported as total by checking the exchange property org.apache.camel.Exchange#BATCH_COMPLETE when its complete. This option cannot be used together with discardOnAggregationFailure. Important: When using this option, you should also enable eagerCheckCompletion() to ensure the aggregator checks for batch completion on each incoming exchange. Without eager checking, the batch completion signal may not be properly detected.", displayName = "Completion From Batch Consumer"), + @YamlProperty(name = "completionInterval", type = "string", description = "A repeating period in millis by which the aggregator will complete all current aggregated exchanges. Camel has a background task which is triggered every period. You cannot use this option together with completionTimeout, only one of them can be used.", displayName = "Completion Interval"), + @YamlProperty(name = "completionOnNewCorrelationGroup", type = "boolean", defaultValue = "false", description = "Enables completion on all previous groups when a new incoming correlation group. This can for example be used to complete groups with same correlation keys when they are in consecutive order. Notice when this is enabled then only 1 correlation group can be in progress as when a new correlation group starts, then the previous groups is forced completed.", displayName = "Completion On New Correlation Group"), + @YamlProperty(name = "completionPredicate", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "A Predicate to indicate when an aggregated exchange is complete. If this is not specified and the AggregationStrategy object implements Predicate, the aggregationStrategy object will be used as the completionPredicate.", displayName = "Completion Predicate"), + @YamlProperty(name = "completionSize", type = "number", description = "Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0.", displayName = "Completion Size"), + @YamlProperty(name = "completionSizeExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0.", displayName = "Completion Size Expression"), + @YamlProperty(name = "completionTimeout", type = "string", description = "Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot use this option together with completionInterval, only one of the two can be used. By default the timeout checker runs every second, you can use the completionTimeoutCheckerInterval option to configure how frequently to run the checker. The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout value. It is not recommended to use very low timeout values or checker intervals.", displayName = "Completion Timeout"), + @YamlProperty(name = "completionTimeoutCheckerInterval", type = "string", defaultValue = "1000", description = "Interval in millis that is used by the background task that checks for timeouts ( org.apache.camel.TimeoutMap ). By default the timeout checker runs every second. The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout value. It is not recommended to use very low timeout values or checker intervals.", displayName = "Completion Timeout Checker Interval"), + @YamlProperty(name = "completionTimeoutExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot use this option together with completionInterval, only one of the two can be used. By default the timeout checker runs every second, you can use the completionTimeoutCheckerInterval option to configure how frequently to run the checker. The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout value. It is not recommended to use very low timeout values or checker intervals.", displayName = "Completion Timeout Expression"), + @YamlProperty(name = "correlationExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "The expression used to calculate the correlation key to use for aggregation. The Exchange which has the same correlation key is aggregated together. If the correlation key could not be evaluated an Exception is thrown. You can disable this by using the ignoreBadCorrelationKeys option.", displayName = "Correlation Expression"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "discardOnAggregationFailure", type = "boolean", defaultValue = "false", description = "Discards the aggregated message when aggregation failed (an exception was thrown from AggregationStrategy . This means the partly aggregated message is dropped and not sent out of the aggregator. This option cannot be used together with completionFromBatchConsumer.", displayName = "Discard On Aggregation Failure"), + @YamlProperty(name = "discardOnCompletionTimeout", type = "boolean", defaultValue = "false", description = "Discards the aggregated message on completion timeout. This means on timeout the aggregated message is dropped and not sent out of the aggregator.", displayName = "Discard On Completion Timeout"), + @YamlProperty(name = "eagerCheckCompletion", type = "boolean", defaultValue = "false", description = "Use eager completion checking which means that the completionPredicate will use the incoming Exchange. As opposed to without eager completion checking the completionPredicate will use the aggregated Exchange.", displayName = "Eager Check Completion"), + @YamlProperty(name = "executorService", type = "string", description = "If using parallelProcessing you can specify a custom thread pool to be used. In fact also if you are not using parallelProcessing this custom thread pool is used to send out aggregated exchanges as well.", displayName = "Executor Service"), + @YamlProperty(name = "forceCompletionOnStop", type = "boolean", defaultValue = "false", description = "Indicates to complete all current aggregated exchanges when the context is stopped", displayName = "Force Completion On Stop"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "ignoreInvalidCorrelationKeys", type = "boolean", defaultValue = "false", description = "If a correlation key cannot be successfully evaluated it will be ignored by logging a DEBUG and then just ignore the incoming Exchange.", displayName = "Ignore Invalid Correlation Keys"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "optimisticLockRetryPolicy", type = "object:org.apache.camel.model.OptimisticLockRetryPolicyDefinition", description = "Allows to configure retry settings when using optimistic locking.", displayName = "Optimistic Lock Retry Policy"), + @YamlProperty(name = "optimisticLocking", type = "boolean", defaultValue = "false", description = "Turns on using optimistic locking, which requires the aggregationRepository being used, is supporting this by implementing org.apache.camel.spi.OptimisticLockingAggregationRepository .", displayName = "Optimistic Locking"), + @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "When aggregated are completed they are being send out of the aggregator. This option indicates whether or not Camel should use a thread pool with multiple threads for concurrency. If no custom thread pool has been specified then Camel creates a default pool with 10 concurrent threads.", displayName = "Parallel Processing"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), - @YamlProperty(name = "timeoutCheckerExecutorService", type = "string", description = "Reference to a custom thread pool for the background completion timeout checker.", displayName = "Timeout Checker Executor Service") + @YamlProperty(name = "timeoutCheckerExecutorService", type = "string", description = "If using either of the completionTimeout, completionTimeoutExpression, or completionInterval options a background thread is created to check for the completion for every aggregator. Set this option to provide a custom thread pool to be used rather than creating a new thread for every aggregator.", displayName = "Timeout Checker Executor Service") } ) public static class AggregateDefinitionDeserializer extends YamlDeserializerBase { @@ -599,11 +511,6 @@ protected boolean setProperty(AggregateDefinition target, String propertyKey, target.setOptimisticLocking(val); break; } - case "optimisticLockingSyncRetry": { - String val = asText(node); - target.setOptimisticLockingSyncRetry(val); - break; - } case "parallelProcessing": { String val = asText(node); target.setParallelProcessing(val); @@ -646,14 +553,14 @@ protected boolean setProperty(AggregateDefinition target, String propertyKey, types = org.apache.camel.model.rest.ApiKeyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Api Key", - description = "Configures API key authentication for a REST service", + description = "Rest security basic auth definition", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "A short description for the security scheme.", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "A short description for security scheme.", displayName = "Description"), @YamlProperty(name = "inCookie", type = "boolean", defaultValue = "false", description = "To use a cookie as the location of the API key.", displayName = "In Cookie"), @YamlProperty(name = "inHeader", type = "boolean", defaultValue = "false", description = "To use header as the location of the API key.", displayName = "In Header"), @YamlProperty(name = "inQuery", type = "boolean", defaultValue = "false", description = "To use query parameter as the location of the API key.", displayName = "In Query"), - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key"), + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key"), @YamlProperty(name = "name", type = "string", required = true, description = "The name of the header or query parameter to be used.", displayName = "Name") } ) @@ -716,28 +623,28 @@ protected boolean setProperty(ApiKeyDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.AvroDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Avro", - description = "Serialize and deserialize messages using Apache Avro binary data format", + description = "Serialize and deserialize messages using Apache Avro binary data format.", deprecated = false, properties = { @YamlProperty(name = "allowJmsType", type = "boolean", defaultValue = "false", description = "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", displayName = "Allow Jms Type"), - @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling.", displayName = "Allow Unmarshall Type"), - @YamlProperty(name = "autoDiscoverObjectMapper", type = "boolean", defaultValue = "false", description = "If set to true then Jackson will lookup for an objectMapper into the registry.", displayName = "Auto Discover Object Mapper"), - @YamlProperty(name = "autoDiscoverSchemaResolver", type = "boolean", defaultValue = "true", description = "When not disabled, the SchemaResolver will be looked up into the registry.", displayName = "Auto Discover Schema Resolver"), - @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use.", displayName = "Collection Type"), + @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used.", displayName = "Allow Unmarshall Type"), + @YamlProperty(name = "autoDiscoverObjectMapper", type = "boolean", defaultValue = "false", description = "If set to true then Jackson will lookup for an objectMapper into the registry", displayName = "Auto Discover Object Mapper"), + @YamlProperty(name = "autoDiscoverSchemaResolver", type = "boolean", defaultValue = "true", description = "When not disabled, the SchemaResolver will be looked up into the registry", displayName = "Auto Discover Schema Resolver"), + @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", displayName = "Collection Type"), @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), - @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated by comma.", displayName = "Disable Features"), - @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated by comma.", displayName = "Enable Features"), + @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Disable Features"), + @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Enable Features"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "include", type = "string", description = "If you want to marshal a pojo to JSON, and the pojo has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL.", displayName = "Include"), - @YamlProperty(name = "instanceClassName", type = "string", description = "Class name to use for marshal and unmarshalling.", displayName = "Instance Class Name"), - @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations.", displayName = "Json View"), + @YamlProperty(name = "include", type = "string", description = "If you want to marshal a pojo to JSON, and the pojo has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL", displayName = "Include"), + @YamlProperty(name = "instanceClassName", type = "string", description = "Class name to use for marshal and unmarshalling", displayName = "Instance Class Name"), + @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations", displayName = "Json View"), @YamlProperty(name = "library", type = "enum:ApacheAvro,Jackson", defaultValue = "avroJackson", description = "Which Avro library to use.", displayName = "Library"), @YamlProperty(name = "moduleClassNames", type = "string", description = "To use custom Jackson modules com.fasterxml.jackson.databind.Module specified as a String with FQN class names. Multiple classes can be separated by comma.", displayName = "Module Class Names"), @YamlProperty(name = "moduleRefs", type = "string", description = "To use custom Jackson modules referred from the Camel registry. Multiple modules can be separated by comma.", displayName = "Module Refs"), @YamlProperty(name = "objectMapper", type = "string", description = "Lookup and use the existing ObjectMapper with the given id when using Jackson.", displayName = "Object Mapper"), @YamlProperty(name = "schemaResolver", type = "string", description = "Optional schema resolver used to lookup schemas for the data in transit.", displayName = "Schema Resolver"), @YamlProperty(name = "timezone", type = "string", description = "If set then Jackson will use the Timezone when marshalling/unmarshalling.", displayName = "Timezone"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling.", displayName = "Unmarshal Type"), + @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling", displayName = "Unmarshal Type"), @YamlProperty(name = "useDefaultObjectMapper", type = "boolean", defaultValue = "true", description = "Whether to lookup and use default Jackson ObjectMapper from the registry.", displayName = "Use Default Object Mapper"), @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "To unmarshal to a List of Map or a List of Pojo.", displayName = "Use List") } @@ -879,14 +786,14 @@ protected boolean setProperty(AvroDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.BarcodeDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Barcode", - description = "Transform strings to various 1D/2D barcode bitmap formats and back", + description = "Transform strings to various 1D/2D barcode bitmap formats and back.", deprecated = false, properties = { - @YamlProperty(name = "barcodeFormat", type = "enum:AZTEC,CODABAR,CODE_39,CODE_93,CODE_128,DATA_MATRIX,EAN_8,EAN_13,ITF,MAXICODE,PDF_417,QR_CODE,RSS_14,RSS_EXPANDED,UPC_A,UPC_E,UPC_EAN_EXTENSION", defaultValue = "QR_CODE", description = "Barcode format such as QR-Code.", displayName = "Barcode Format"), - @YamlProperty(name = "height", type = "number", defaultValue = "100", description = "Height of the barcode.", displayName = "Height"), + @YamlProperty(name = "barcodeFormat", type = "enum:AZTEC,CODABAR,CODE_39,CODE_93,CODE_128,DATA_MATRIX,EAN_8,EAN_13,ITF,MAXICODE,PDF_417,QR_CODE,RSS_14,RSS_EXPANDED,UPC_A,UPC_E,UPC_EAN_EXTENSION", defaultValue = "QR_CODE", description = "Barcode format such as QR-Code", displayName = "Barcode Format"), + @YamlProperty(name = "height", type = "number", defaultValue = "100", description = "Height of the barcode", displayName = "Height"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "imageType", type = "enum:JPG,GIF,PNG", defaultValue = "PNG", description = "Image type of the barcode such as png.", displayName = "Image Type"), - @YamlProperty(name = "width", type = "number", defaultValue = "100", description = "Width of the barcode.", displayName = "Width") + @YamlProperty(name = "imageType", type = "enum:JPG,GIF,PNG", defaultValue = "PNG", description = "Image type of the barcode such as png", displayName = "Image Type"), + @YamlProperty(name = "width", type = "number", defaultValue = "100", description = "Width of the barcode", displayName = "Width") } ) public static class BarcodeDataFormatDeserializer extends YamlDeserializerBase { @@ -942,13 +849,13 @@ protected boolean setProperty(BarcodeDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.Base64DataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Base64", - description = "Encode and decode data using Base64", + description = "Encode and decode data using Base64.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "lineLength", type = "number", defaultValue = "76", description = "To specific a maximum line length for the encoded data. By default 76 is used.", displayName = "Line Length"), - @YamlProperty(name = "lineSeparator", type = "string", description = "The line separators to use. By default \\r\\n is used.", displayName = "Line Separator"), - @YamlProperty(name = "urlSafe", type = "boolean", defaultValue = "false", description = "Instead of emitting and / we emit - and _ respectively. urlSafe is only applied to encode operations. Decoding seamlessly handles both modes.", displayName = "Url Safe") + @YamlProperty(name = "lineSeparator", type = "string", description = "The line separators to use. Uses new line characters (CRLF) by default.", displayName = "Line Separator"), + @YamlProperty(name = "urlSafe", type = "boolean", defaultValue = "false", description = "Instead of emitting '' and '/' we emit '-' and '_' respectively. urlSafe is only applied to encode operations. Decoding seamlessly handles both modes. Is by default false.", displayName = "Url Safe") } ) public static class Base64DataFormatDeserializer extends YamlDeserializerBase { @@ -999,11 +906,11 @@ protected boolean setProperty(Base64DataFormat target, String propertyKey, types = org.apache.camel.model.rest.BasicAuthDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Basic Auth", - description = "Configures HTTP Basic authentication for a REST service", + description = "Rest security basic auth definition", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "A short description for the security scheme.", displayName = "Description"), - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key") + @YamlProperty(name = "description", type = "string", description = "A short description for security scheme.", displayName = "Description"), + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key") } ) public static class BasicAuthDefinitionDeserializer extends YamlDeserializerBase { @@ -1044,13 +951,13 @@ protected boolean setProperty(BasicAuthDefinition target, String propertyKey, types = org.apache.camel.model.config.BatchResequencerConfig.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Batch Config", - description = "Configures the batch-processing mode of the Resequence EIP, which collects messages into a batch and sorts them before releasing", + description = "Configures batch-processing resequence eip.", deprecated = false, properties = { @YamlProperty(name = "allowDuplicates", type = "boolean", defaultValue = "false", description = "Whether to allow duplicates.", displayName = "Allow Duplicates"), @YamlProperty(name = "batchSize", type = "number", defaultValue = "100", description = "Sets the size of the batch to be re-ordered. The default size is 100.", displayName = "Batch Size"), @YamlProperty(name = "batchTimeout", type = "string", defaultValue = "1000", description = "Sets the timeout for collecting elements to be re-ordered. The default timeout is 1000 msec.", displayName = "Batch Timeout"), - @YamlProperty(name = "ignoreInvalidExchanges", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid exchanges.", displayName = "Ignore Invalid Exchanges"), + @YamlProperty(name = "ignoreInvalidExchanges", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid exchanges", displayName = "Ignore Invalid Exchanges"), @YamlProperty(name = "reverse", type = "boolean", defaultValue = "false", description = "Whether to reverse the ordering.", displayName = "Reverse") } ) @@ -1182,17 +1089,17 @@ protected boolean setProperty(BeanConstructorsDefinition target, String property types = org.apache.camel.model.BeanDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Bean", - description = "Invokes a method on a Java bean, with automatic parameter binding from the message body, headers, and exchange properties", + description = "Calls a Java bean", deprecated = false, properties = { - @YamlProperty(name = "beanType", type = "string", description = "The class name (fully qualified) of the bean to use.", displayName = "Bean Type"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "method", type = "string", description = "The method name on the bean to invoke.", displayName = "Method"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "ref", type = "string", description = "A reference to an existing bean to use, which is looked up from the registry.", displayName = "Ref"), - @YamlProperty(name = "scope", type = "enum:Singleton,Request,Prototype", defaultValue = "Singleton", description = "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint.", displayName = "Scope") + @YamlProperty(name = "beanType", type = "string", description = "Sets the class name (fully qualified) of the bean to use", displayName = "Bean Type"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "method", type = "string", description = "Sets the method name on the bean to use", displayName = "Method"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "ref", type = "string", description = "Sets a reference to an existing bean to use, which is looked up from the registry", displayName = "Ref"), + @YamlProperty(name = "scope", type = "enum:Singleton,Request,Prototype", defaultValue = "Singleton", description = "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint. The bean should be thread-safe in case concurrent threads is calling the bean at the same time. When using request scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean while processing a request and you want to call the same bean instance multiple times while processing the request. The bean does not have to be thread-safe as the instance is only called from the same request. When using prototype scope, then the bean will be looked up or created per call. However in case of lookup then this is delegated to the bean registry such as Spring or CDI (if in use), which depends on their configuration can act as either singleton or prototype scope. So when using prototype scope then this depends on the bean registry implementation.", displayName = "Scope") } ) public static class BeanDefinitionDeserializer extends YamlDeserializerBase { @@ -1268,7 +1175,7 @@ protected boolean setProperty(BeanDefinition target, String propertyKey, types = org.apache.camel.model.BeanFactoryDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Bean Factory", - description = "Defines a custom bean that can be used in Camel routes and other beans. The bean is created by a factory class or method.", + description = "Define custom beans that can be used in your Camel routes and in general.", deprecated = false, properties = { @YamlProperty(name = "builderClass", type = "string", description = "Fully qualified class name of builder class to use for creating and configuring the bean. The builder will use the properties values to configure the bean.", displayName = "Builder Class"), @@ -1278,12 +1185,12 @@ protected boolean setProperty(BeanDefinition target, String propertyKey, @YamlProperty(name = "factoryBean", type = "string", description = "Name of factory bean (bean id) to use for creating the bean.", displayName = "Factory Bean"), @YamlProperty(name = "factoryMethod", type = "string", description = "Name of method to invoke when creating the bean via a factory bean.", displayName = "Factory Method"), @YamlProperty(name = "initMethod", type = "string", description = "The name of the custom initialization method to invoke after setting bean properties. The method must have no arguments, but may throw any exception.", displayName = "Init Method"), - @YamlProperty(name = "name", type = "string", required = true, description = "The name of the bean (bean id).", displayName = "Name"), + @YamlProperty(name = "name", type = "string", required = true, description = "The name of the bean (bean id)", displayName = "Name"), @YamlProperty(name = "properties", type = "object", description = "Optional properties to set on the created bean.", displayName = "Properties"), - @YamlProperty(name = "script", type = "string", description = "The script to execute that creates the bean when using scripting languages.", displayName = "Script"), + @YamlProperty(name = "script", type = "string", description = "The script to execute that creates the bean when using scripting languages. If the script use the prefix resource: such as resource:classpath:com/foo/myscript.groovy, resource:file:/var/myscript.groovy, then its loaded from the external resource.", displayName = "Script"), @YamlProperty(name = "scriptLanguage", type = "string", description = "The script language to use when using inlined script for creating the bean, such as groovy, java, javascript etc.", displayName = "Script Language"), @YamlProperty(name = "scriptPropertyPlaceholders", type = "boolean", defaultValue = "true", description = "Whether the script should support using Camel property placeholder syntax {{ }}.", displayName = "Script Property Placeholders"), - @YamlProperty(name = "type", type = "string", required = true, description = "The class name (fully qualified) of the bean.", displayName = "Type") + @YamlProperty(name = "type", type = "string", required = true, description = "The class name (fully qualified) of the bean", displayName = "Type") } ) public static class BeanFactoryDefinitionDeserializer extends YamlDeserializerBase { @@ -1459,10 +1366,10 @@ protected boolean setProperty(BeanPropertyDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.BeanioDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "BeanIO", - description = "Marshal and unmarshal Java beans to and from flat files (such as CSV, delimited, or fixed length formats)", + description = "Marshal and unmarshal Java beans to and from flat files (such as CSV, delimited, or fixed length formats).", deprecated = false, properties = { - @YamlProperty(name = "beanReaderErrorHandlerType", type = "string", description = "To use a custom org.apache.camel.dataformat.beanio.BeanIOErrorHandler as error handler while parsing. Configure the fully qualified class name of the error handler.", displayName = "Bean Reader Error Handler Type"), + @YamlProperty(name = "beanReaderErrorHandlerType", type = "string", description = "To use a custom org.apache.camel.dataformat.beanio.BeanIOErrorHandler as error handler while parsing. Configure the fully qualified class name of the error handler. Notice the options ignoreUnidentifiedRecords, ignoreUnexpectedRecords, and ignoreInvalidRecords may not be in use when you use a custom error handler.", displayName = "Bean Reader Error Handler Type"), @YamlProperty(name = "encoding", type = "string", description = "The charset to use. Is by default the JVM platform default charset.", displayName = "Encoding"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "ignoreInvalidRecords", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid records.", displayName = "Ignore Invalid Records"), @@ -1470,7 +1377,7 @@ protected boolean setProperty(BeanPropertyDefinition target, String propertyKey, @YamlProperty(name = "ignoreUnidentifiedRecords", type = "boolean", defaultValue = "false", description = "Whether to ignore unidentified records.", displayName = "Ignore Unidentified Records"), @YamlProperty(name = "mapping", type = "string", required = true, description = "The BeanIO mapping file. Is by default loaded from the classpath. You can prefix with file:, http:, or classpath: to denote from where to load the mapping file.", displayName = "Mapping"), @YamlProperty(name = "streamName", type = "string", required = true, description = "The name of the stream to use.", displayName = "Stream Name"), - @YamlProperty(name = "unmarshalSingleObject", type = "boolean", defaultValue = "false", description = "This option controls whether to unmarshal as a list of objects or as a single object only.", displayName = "Unmarshal Single Object") + @YamlProperty(name = "unmarshalSingleObject", type = "boolean", defaultValue = "false", description = "This options controls whether to unmarshal as a list of objects or as a single object only. The former is the default mode, and the latter is only intended in special use-cases where beanio maps the Camel message to a single POJO bean.", displayName = "Unmarshal Single Object") } ) public static class BeanioDataFormatDeserializer extends YamlDeserializerBase { @@ -1546,12 +1453,12 @@ protected boolean setProperty(BeanioDataFormat target, String propertyKey, types = org.apache.camel.model.rest.BearerTokenDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Bearer Token", - description = "Configures Bearer token authentication for a REST service", + description = "Rest security bearer token authentication definition", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "A short description for the security scheme.", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "A short description for security scheme.", displayName = "Description"), @YamlProperty(name = "format", type = "string", description = "A hint to the client to identify how the bearer token is formatted.", displayName = "Format"), - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key") + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key") } ) public static class BearerTokenDefinitionDeserializer extends YamlDeserializerBase { @@ -1597,14 +1504,14 @@ protected boolean setProperty(BearerTokenDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.BindyDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Bindy", - description = "Marshal and unmarshal Java beans from and to flat payloads (such as CSV, delimited, fixed length formats, or FIX messages)", + description = "Marshal and unmarshal Java beans from and to flat payloads (such as CSV, delimited, fixed length formats, or FIX messages).", deprecated = false, properties = { @YamlProperty(name = "allowEmptyStream", type = "boolean", defaultValue = "false", description = "Whether to allow empty streams in the unmarshal process. If true, no exception will be thrown when a body without records is provided.", displayName = "Allow Empty Stream"), @YamlProperty(name = "classType", type = "string", description = "Name of model class to use.", displayName = "Class Type"), @YamlProperty(name = "defaultValueStringAsNull", type = "boolean", defaultValue = "false", description = "To change the default value for string types to be null instead of an empty string.", displayName = "Default Value String As Null"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "locale", type = "string", description = "To configure a default locale to use, such as us for united states. To use the JVM platform default locale then use the name default.", displayName = "Locale"), + @YamlProperty(name = "locale", type = "string", description = "To configure a default locale to use, such as us for united states. To use the JVM platform default locale then use the name default", displayName = "Locale"), @YamlProperty(name = "type", type = "enum:Csv,Fixed,KeyValue", description = "Whether to use Csv, Fixed, or KeyValue.", displayName = "Type"), @YamlProperty(name = "unwrapSingleInstance", type = "boolean", defaultValue = "true", description = "When unmarshalling should a single instance be unwrapped and returned instead of wrapped in a java.util.List.", displayName = "Unwrap Single Instance") } @@ -1672,18 +1579,18 @@ protected boolean setProperty(BindyDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.CBORDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "CBOR", - description = "Unmarshal a CBOR payload to POJO and back", + description = "Unmarshal a CBOR payload to POJO and back.", deprecated = false, properties = { @YamlProperty(name = "allowJmsType", type = "boolean", defaultValue = "false", description = "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", displayName = "Allow Jms Type"), - @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson CBOR is allowed to attempt to use the CamelCBORUnmarshalType header during the unmarshalling.", displayName = "Allow Unmarshall Type"), - @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use.", displayName = "Collection Type"), - @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson ObjectMapper. Multiple features can be separated by comma.", displayName = "Disable Features"), - @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson ObjectMapper. Multiple features can be separated by comma.", displayName = "Enable Features"), + @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson CBOR is allowed to attempt to use the CamelCBORUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used.", displayName = "Allow Unmarshall Type"), + @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", displayName = "Collection Type"), + @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Disable Features"), + @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Enable Features"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "objectMapper", type = "string", description = "Lookup and use the existing CBOR ObjectMapper with the given id when using Jackson.", displayName = "Object Mapper"), @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "To enable pretty printing output nicely formatted. Is by default false.", displayName = "Pretty Print"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling.", displayName = "Unmarshal Type"), + @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling", displayName = "Unmarshal Type"), @YamlProperty(name = "useDefaultObjectMapper", type = "boolean", defaultValue = "true", description = "Whether to lookup and use default Jackson CBOR ObjectMapper from the registry.", displayName = "Use Default Object Mapper"), @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "To unmarshal to a List of Map or a List of Pojo.", displayName = "Use List") } @@ -1772,15 +1679,15 @@ protected boolean setProperty(CBORDataFormat target, String propertyKey, types = org.apache.camel.model.language.CSimpleExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "CSimple", - description = "Evaluate a compiled simple expression", + description = "Evaluate a compiled simple expression.", deprecated = true, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "pretty", type = "boolean", defaultValue = "false", description = "To pretty format the output (only JSon or XML supported).", displayName = "Pretty"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim"), - @YamlProperty(name = "trimResult", type = "boolean", defaultValue = "false", description = "Whether to trim the returned values when this language is in use.", displayName = "Trim Result") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "pretty", type = "boolean", defaultValue = "false", description = "To pretty format the output (only JSon or XML supported)", displayName = "Pretty"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim"), + @YamlProperty(name = "trimResult", type = "boolean", defaultValue = "false", description = "Whether to trim the returned values when this language are in use. For example the output result may contain unwanted line breaks at the beginning and end such as when using Java DSL with multi-line blocks. Is default false to be backwards compatible with existing behavior.", displayName = "Trim Result") } ) public static class CSimpleExpressionDeserializer extends YamlDeserializerBase { @@ -1855,15 +1762,15 @@ protected boolean setProperty(CSimpleExpression target, String propertyKey, types = org.apache.camel.model.CatchDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Do Catch", - description = "Catches specific exceptions within a doTry block, allowing fine-grained exception handling within the route", + description = "Catches exceptions as part of a try, catch, finally block", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "exception", type = "array:string", description = "The exception class names (fully qualified) to catch.", displayName = "Exception"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "An additional predicate that must evaluate to true for this doCatch to trigger. Allows fine-grained control over which exceptions are caught based on the exchange state.", displayName = "On When"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "exception", type = "array:string", description = "The exception(s) to catch.", displayName = "Exception"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "Used for triggering doCatch in specific situations", displayName = "On When"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -1929,16 +1836,16 @@ protected boolean setProperty(CatchDefinition target, String propertyKey, types = org.apache.camel.model.ChoiceDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Choice", - description = "Routes messages to different steps based on a series of conditions (predicates), similar to if-elseif-else in Java. Each condition is evaluated in order until one matches.", + description = "Route messages based on a series of predicates", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "otherwise", type = "object:org.apache.camel.model.OtherwiseDefinition", description = "The otherwise clause to execute when none of the when predicates matched.", displayName = "Otherwise"), - @YamlProperty(name = "precondition", type = "boolean", defaultValue = "false", description = "If enabled then the choice is evaluated at route initialization time (precondition). Only when predicates with property placeholders or simple expressions using only property placeholders are supported.", displayName = "Precondition"), - @YamlProperty(name = "when", type = "array:org.apache.camel.model.WhenDefinition", description = "The when clauses (predicates) to evaluate. The first when clause that matches determines which route branch to follow.", displayName = "When") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "otherwise", type = "object:org.apache.camel.model.OtherwiseDefinition", description = "Sets the otherwise node", displayName = "Otherwise"), + @YamlProperty(name = "precondition", type = "boolean", defaultValue = "false", description = "Indicates whether this Choice EIP is in precondition mode or not. If so its branches (when/otherwise) are evaluated during startup to keep at runtime only the branch that matched.", displayName = "Precondition"), + @YamlProperty(name = "when", type = "array:org.apache.camel.model.WhenDefinition", description = "Sets the when nodes", displayName = "When") } ) public static class ChoiceDefinitionDeserializer extends YamlDeserializerBase { @@ -2004,17 +1911,17 @@ protected boolean setProperty(ChoiceDefinition target, String propertyKey, types = org.apache.camel.model.CircuitBreakerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Circuit Breaker", - description = "Wraps message processing with a circuit breaker for fault tolerance. Prevents cascading failures by short-circuiting calls to an unhealthy service and routing to a fallback", + description = "Route messages in a fault tolerance way using Circuit Breaker", deprecated = false, properties = { - @YamlProperty(name = "configuration", type = "string", description = "Refers to a circuit breaker configuration to use for configuring the circuit breaker EIP.", displayName = "Configuration"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "configuration", type = "string", description = "Refers to a circuit breaker configuration (such as resillience4j, or microprofile-fault-tolerance) to use for configuring the circuit breaker EIP.", displayName = "Configuration"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), @YamlProperty(name = "faultToleranceConfiguration", type = "object:org.apache.camel.model.FaultToleranceConfigurationDefinition", description = "Configures the circuit breaker to use MicroProfile Fault Tolerance with the given configuration.", displayName = "Fault Tolerance Configuration"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "inheritErrorHandler", type = "boolean", defaultValue = "false", description = "Whether to inherit Camel error handling during circuit breaker. By default, Camel error handler is turned off.", displayName = "Inherit Error Handler"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "onFallback", type = "object:org.apache.camel.model.OnFallbackDefinition", description = "The fallback route path to execute when the circuit breaker triggers.", displayName = "On Fallback"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "inheritErrorHandler", type = "boolean", defaultValue = "false", description = "To turn on or off Camel error handling during circuit breaker. If this is enabled then Camel error handler will first trigger if there is an error in the circuit breaker, which allows to let Camel handle redeliveries. If all attempts is failed, then after the circuit breaker is finished, then Camel error handler can handle the error as well such as the dead letter channel. By default, Camel error handler is turned off.", displayName = "Inherit Error Handler"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "onFallback", type = "object:org.apache.camel.model.OnFallbackDefinition", description = "The fallback route path to execute that does not go over the network. This should be a static or cached result that can immediately be returned upon failure. If the fallback requires network connection then use onFallbackViaNetwork() .", displayName = "On Fallback"), @YamlProperty(name = "resilience4jConfiguration", type = "object:org.apache.camel.model.Resilience4jConfigurationDefinition", description = "Configures the circuit breaker to use Resilience4j with the given configuration.", displayName = "Resilience4j Configuration"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } @@ -2096,18 +2003,18 @@ protected boolean setProperty(CircuitBreakerDefinition target, String propertyKe types = org.apache.camel.model.ClaimCheckDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Claim Check", - description = "Temporarily stores the message content and replaces it with a claim check key, allowing the content to be retrieved later in the route. Useful for reducing memory when large payloads pass through processing steps that don't need them.", + description = "The Claim Check EIP allows you to replace message content with a claim check (a unique key), which can be used to retrieve the message content at a later time.", deprecated = false, properties = { - @YamlProperty(name = "aggregationStrategy", type = "string", description = "Reference to a custom AggregationStrategy to use for merging data back from the claim check repository.", displayName = "Aggregation Strategy"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "The method name to use when using a POJO as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "filter", type = "string", description = "Specifies a filter to control what data gets merged back when using Get or Pop operations. Use body, headers, header:pattern to include only matching data.", displayName = "Filter"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "key", type = "string", description = "The unique claim check key to use for Get, GetAndRemove, and Set operations.", displayName = "Key"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "operation", type = "enum:Get,GetAndRemove,Set,Push,Pop", description = "The claim check operation to use. Get=retrieve, GetAndRemove=retrieve and remove, Set=store with key, Push=store on stack, Pop=retrieve from stack.", displayName = "Operation") + @YamlProperty(name = "aggregationStrategy", type = "string", description = "To use a custom AggregationStrategy instead of the default implementation. Notice you cannot use both custom aggregation strategy and configure data at the same time.", displayName = "Aggregation Strategy"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "filter", type = "string", description = "Specify a filter to control what data gets merged data back from the claim check repository. The following syntax is supported: body - to aggregate the message body attachments - to aggregate all the message attachments headers - to aggregate all the message headers header:pattern - to aggregate all the message headers that matches the pattern. The following pattern rules are applied in this order: exact match, returns true wildcard match (pattern ends with a and the name starts with the pattern), returns true regular expression match, returns true otherwise returns false You can specify multiple rules separated by comma. For example, the following includes the message body and all headers starting with foo: body,header:foo. The syntax supports the following prefixes which can be used to specify include,exclude, or remove - to include (which is the default mode) - - to exclude (exclude takes precedence over include) -- - to remove (remove takes precedence) For example to exclude a header name foo, and remove all headers starting with bar, -header:foo,--headers:bar Note you cannot have both include and exclude header:pattern at the same time.", displayName = "Filter"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "key", type = "string", description = "To use a specific key for claim check id (for dynamic keys use simple language syntax as the key).", displayName = "Key"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "operation", type = "enum:Get,GetAndRemove,Set,Push,Pop", description = "The claim check operation to use. The following operations are supported: Get - Gets (does not remove) the claim check by the given key. GetAndRemove - Gets and removes the claim check by the given key. Set - Sets a new (will override if key already exists) claim check with the given key. Push - Sets a new claim check on the stack (does not use key). Pop - Gets the latest claim check from the stack (does not use key).", displayName = "Operation") } ) public static class ClaimCheckDefinitionDeserializer extends YamlDeserializerBase { @@ -2217,13 +2124,13 @@ protected boolean setProperty(ComponentScanDefinition target, String propertyKey types = org.apache.camel.model.language.ConstantExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Constant", - description = "A fixed value set only once during the route startup", + description = "A fixed value set only once during the route startup.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class ConstantExpressionDeserializer extends YamlDeserializerBase { @@ -2288,11 +2195,11 @@ protected boolean setProperty(ConstantExpression target, String propertyKey, types = org.apache.camel.model.ContextScanDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Context Scan", - description = "Scans for RouteBuilder instances in the Camel registry to auto-discover and register routes", + description = "Scans for Java org.apache.camel.builder.RouteBuilder instances in the context org.apache.camel.spi.Registry .", deprecated = false, properties = { @YamlProperty(name = "excludes", type = "array:string", description = "Exclude finding route builder from these java package names.", displayName = "Excludes"), - @YamlProperty(name = "includeNonSingletons", type = "boolean", defaultValue = "false", description = "Whether to include non-singleton beans (prototypes). By default only singleton beans are included in the context scan.", displayName = "Include Non Singletons"), + @YamlProperty(name = "includeNonSingletons", type = "boolean", defaultValue = "false", description = "Whether to include non-singleton beans (prototypes) By default only singleton beans is included in the context scan", displayName = "Include Non Singletons"), @YamlProperty(name = "includes", type = "array:string", description = "Include finding route builder from these java package names.", displayName = "Includes") } ) @@ -2340,16 +2247,16 @@ protected boolean setProperty(ContextScanDefinition target, String propertyKey, types = org.apache.camel.model.ConvertBodyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Convert Body To", - description = "Converts the message body to a specified Java type using Camel's built-in type converters", + description = "Converts the message body to another type", deprecated = false, properties = { - @YamlProperty(name = "charset", type = "string", description = "To use a specific charset when converting.", displayName = "Charset"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "mandatory", type = "boolean", defaultValue = "true", description = "Whether the conversion is mandatory. If mandatory and conversion is not possible, a NoTypeConversionAvailableException is thrown. Setting this to false means null may be returned if conversion is not possible.", displayName = "Mandatory"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "type", type = "string", required = true, description = "The java type to convert to.", displayName = "Type") + @YamlProperty(name = "charset", type = "string", description = "To use a specific charset when converting", displayName = "Charset"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "mandatory", type = "boolean", defaultValue = "true", description = "When mandatory then the conversion must return a value (cannot be null), if this is not possible then NoTypeConversionAvailableException is thrown. Setting this to false could mean conversion is not possible and the value is null.", displayName = "Mandatory"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "type", type = "string", required = true, description = "The java type to convert to", displayName = "Type") } ) public static class ConvertBodyDefinitionDeserializer extends YamlDeserializerBase { @@ -2420,18 +2327,18 @@ protected boolean setProperty(ConvertBodyDefinition target, String propertyKey, types = org.apache.camel.model.ConvertHeaderDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Convert Header To", - description = "Converts a message header value to a specified Java type using Camel's built-in type converters", + description = "Converts the message header to another type", deprecated = false, properties = { - @YamlProperty(name = "charset", type = "string", description = "To use a specific charset when converting.", displayName = "Charset"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "mandatory", type = "boolean", defaultValue = "true", description = "Whether the conversion is mandatory. If mandatory and conversion is not possible, a NoTypeConversionAvailableException is thrown. Setting this to false means null may be returned if conversion is not possible.", displayName = "Mandatory"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of message header to convert its value. The simple language can be used to define a dynamic evaluated header name.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "toName", type = "string", description = "To use another header to store the result. By default, the result is stored in the same header.", displayName = "To Name"), - @YamlProperty(name = "type", type = "string", required = true, description = "The java type to convert to.", displayName = "Type") + @YamlProperty(name = "charset", type = "string", description = "To use a specific charset when converting", displayName = "Charset"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "mandatory", type = "boolean", defaultValue = "true", description = "When mandatory then the conversion must return a value (cannot be null), if this is not possible then NoTypeConversionAvailableException is thrown. Setting this to false could mean conversion is not possible and the value is null.", displayName = "Mandatory"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of message header to convert its value The simple language can be used to define a dynamic evaluated header name to be used. Otherwise a constant name will be used.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "toName", type = "string", description = "To use another header to store the result. By default, the result is stored in the same header. This option allows to use another header. The simple language can be used to define a dynamic evaluated header name to be used. Otherwise a constant name will be used.", displayName = "To Name"), + @YamlProperty(name = "type", type = "string", required = true, description = "The java type to convert to", displayName = "Type") } ) public static class ConvertHeaderDefinitionDeserializer extends YamlDeserializerBase { @@ -2507,18 +2414,18 @@ protected boolean setProperty(ConvertHeaderDefinition target, String propertyKey types = org.apache.camel.model.ConvertVariableDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Convert Variable To", - description = "Converts a variable value to a specified Java type using Camel's built-in type converters", + description = "Converts the variable to another type", deprecated = false, properties = { - @YamlProperty(name = "charset", type = "string", description = "To use a specific charset when converting.", displayName = "Charset"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "mandatory", type = "boolean", defaultValue = "true", description = "Whether the conversion is mandatory. If mandatory and conversion is not possible, a NoTypeConversionAvailableException is thrown. Setting this to false means null may be returned if conversion is not possible.", displayName = "Mandatory"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of variable to convert its value. The simple language can be used to define a dynamic evaluated variable name.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "toName", type = "string", description = "To use another variable to store the result. By default, the result is stored in the same variable.", displayName = "To Name"), - @YamlProperty(name = "type", type = "string", required = true, description = "The java type to convert to.", displayName = "Type") + @YamlProperty(name = "charset", type = "string", description = "To use a specific charset when converting", displayName = "Charset"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "mandatory", type = "boolean", defaultValue = "true", description = "When mandatory then the conversion must return a value (cannot be null), if this is not possible then NoTypeConversionAvailableException is thrown. Setting this to false could mean conversion is not possible and the value is null.", displayName = "Mandatory"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of variable to convert its value The simple language can be used to define a dynamic evaluated header name to be used. Otherwise a constant name will be used.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "toName", type = "string", description = "To use another variable to store the result. By default, the result is stored in the same variable. This option allows to use another variable. The simple language can be used to define a dynamic evaluated variable name to be used. Otherwise a constant name will be used.", displayName = "To Name"), + @YamlProperty(name = "type", type = "string", required = true, description = "The java type to convert to", displayName = "Type") } ) public static class ConvertVariableDefinitionDeserializer extends YamlDeserializerBase { @@ -2594,11 +2501,11 @@ protected boolean setProperty(ConvertVariableDefinition target, String propertyK types = org.apache.camel.model.dataformat.CryptoDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Crypto (Java Cryptographic Extension)", - description = "Encrypt and decrypt messages using Java Cryptography Extension (JCE)", + description = "Encrypt and decrypt messages using Java Cryptography Extension (JCE).", deprecated = false, properties = { @YamlProperty(name = "algorithm", type = "string", description = "The JCE algorithm name indicating the cryptographic algorithm that will be used.", displayName = "Algorithm"), - @YamlProperty(name = "algorithmParameterSpec", type = "string", description = "A JCE AlgorithmParameterSpec used to initialize the Cipher.", displayName = "Algorithm Parameter Spec"), + @YamlProperty(name = "algorithmParameterSpec", type = "string", description = "A JCE AlgorithmParameterSpec used to initialize the Cipher. Will lookup the type using the given name as a java.security.spec.AlgorithmParameterSpec type.", displayName = "Algorithm Parameter Spec"), @YamlProperty(name = "bufferSize", type = "number", defaultValue = "4096", description = "The size of the buffer used in the signature process.", displayName = "Buffer Size"), @YamlProperty(name = "cryptoProvider", type = "string", description = "The name of the JCE Security Provider that should be used.", displayName = "Crypto Provider"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @@ -2688,37 +2595,37 @@ protected boolean setProperty(CryptoDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.CsvDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "CSV", - description = "Handle CSV (Comma Separated Values) payloads", + description = "Handle CSV (Comma Separated Values) payloads.", deprecated = false, properties = { @YamlProperty(name = "allowMissingColumnNames", type = "boolean", defaultValue = "false", description = "Whether to allow missing column names.", displayName = "Allow Missing Column Names"), - @YamlProperty(name = "captureHeaderRecord", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should capture the header record and store it in the message header.", displayName = "Capture Header Record"), + @YamlProperty(name = "captureHeaderRecord", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should capture the header record and store it in the message header", displayName = "Capture Header Record"), @YamlProperty(name = "commentMarker", type = "string", description = "Sets the comment marker of the reference format.", displayName = "Comment Marker"), @YamlProperty(name = "commentMarkerDisabled", type = "boolean", defaultValue = "false", description = "Disables the comment marker of the reference format.", displayName = "Comment Marker Disabled"), - @YamlProperty(name = "delimiter", type = "string", description = "The delimiter to use. The default value is , (comma).", displayName = "Delimiter"), - @YamlProperty(name = "escape", type = "string", description = "Sets the escape character to use.", displayName = "Escape"), - @YamlProperty(name = "escapeDisabled", type = "boolean", defaultValue = "false", description = "Whether to disable the escape character.", displayName = "Escape Disabled"), + @YamlProperty(name = "delimiter", type = "string", description = "Sets the delimiter to use. The default value is , (comma)", displayName = "Delimiter"), + @YamlProperty(name = "escape", type = "string", description = "Sets the escape character to use", displayName = "Escape"), + @YamlProperty(name = "escapeDisabled", type = "boolean", defaultValue = "false", description = "Use for disabling using escape character", displayName = "Escape Disabled"), @YamlProperty(name = "format", type = "enum:DEFAULT,EXCEL,INFORMIX_UNLOAD,INFORMIX_UNLOAD_CSV,MONGODB_CSV,MONGODB_TSV,MYSQL,ORACLE,POSTGRESQL_CSV,POSTGRESQL_TEXT,RFC4180", defaultValue = "DEFAULT", description = "The format to use.", displayName = "Format"), @YamlProperty(name = "header", type = "string", description = "To configure the CSV headers. Multiple headers can be separated by comma.", displayName = "Header"), - @YamlProperty(name = "headerDisabled", type = "boolean", defaultValue = "false", description = "Whether to disable headers.", displayName = "Header Disabled"), + @YamlProperty(name = "headerDisabled", type = "boolean", defaultValue = "false", description = "Use for disabling headers", displayName = "Header Disabled"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "ignoreEmptyLines", type = "boolean", defaultValue = "false", description = "Whether to ignore empty lines.", displayName = "Ignore Empty Lines"), - @YamlProperty(name = "ignoreHeaderCase", type = "boolean", defaultValue = "false", description = "Whether to ignore case when accessing header names.", displayName = "Ignore Header Case"), - @YamlProperty(name = "ignoreSurroundingSpaces", type = "boolean", defaultValue = "false", description = "Whether to ignore surrounding spaces.", displayName = "Ignore Surrounding Spaces"), + @YamlProperty(name = "ignoreHeaderCase", type = "boolean", defaultValue = "false", description = "Sets whether or not to ignore case when accessing header names.", displayName = "Ignore Header Case"), + @YamlProperty(name = "ignoreSurroundingSpaces", type = "boolean", defaultValue = "false", description = "Whether to ignore surrounding spaces", displayName = "Ignore Surrounding Spaces"), @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at one.", displayName = "Lazy Load"), - @YamlProperty(name = "marshallerFactoryRef", type = "string", description = "Sets the implementation of the CsvMarshallerFactory interface which is able to customize marshalling/unmarshalling behavior.", displayName = "Marshaller Factory Ref"), - @YamlProperty(name = "nullString", type = "string", description = "Sets the null string.", displayName = "Null String"), - @YamlProperty(name = "nullStringDisabled", type = "boolean", defaultValue = "false", description = "Whether to disable null string handling.", displayName = "Null String Disabled"), - @YamlProperty(name = "quote", type = "string", description = "The quote character to use. The default is double-quote character.", displayName = "Quote"), - @YamlProperty(name = "quoteDisabled", type = "boolean", defaultValue = "false", description = "Whether to disable quoting.", displayName = "Quote Disabled"), - @YamlProperty(name = "quoteMode", type = "enum:ALL,ALL_NON_NULL,MINIMAL,NON_NUMERIC,NONE", description = "Sets the quote mode.", displayName = "Quote Mode"), + @YamlProperty(name = "marshallerFactoryRef", type = "string", description = "Sets the implementation of the CsvMarshallerFactory interface which is able to customize marshalling/unmarshalling behavior by extending CsvMarshaller or creating it from scratch.", displayName = "Marshaller Factory Ref"), + @YamlProperty(name = "nullString", type = "string", description = "Sets the null string", displayName = "Null String"), + @YamlProperty(name = "nullStringDisabled", type = "boolean", defaultValue = "false", description = "Used to disable null strings", displayName = "Null String Disabled"), + @YamlProperty(name = "quote", type = "string", description = "Sets the quote to use which by default is double-quote character", displayName = "Quote"), + @YamlProperty(name = "quoteDisabled", type = "boolean", defaultValue = "false", description = "Used to disable quotes", displayName = "Quote Disabled"), + @YamlProperty(name = "quoteMode", type = "enum:ALL,ALL_NON_NULL,MINIMAL,NON_NUMERIC,NONE", description = "Sets the quote mode", displayName = "Quote Mode"), @YamlProperty(name = "recordConverterRef", type = "string", description = "Refers to a custom CsvRecordConverter to lookup from the registry to use.", displayName = "Record Converter Ref"), - @YamlProperty(name = "recordSeparator", type = "string", description = "The record separator (aka new line) which by default is new line characters (CRLF).", displayName = "Record Separator"), - @YamlProperty(name = "recordSeparatorDisabled", type = "boolean", defaultValue = "false", description = "Whether to disable the record separator.", displayName = "Record Separator Disabled"), - @YamlProperty(name = "skipHeaderRecord", type = "boolean", defaultValue = "false", description = "Whether to skip the header record in the output.", displayName = "Skip Header Record"), - @YamlProperty(name = "trailingDelimiter", type = "boolean", defaultValue = "false", description = "Whether to add a trailing delimiter.", displayName = "Trailing Delimiter"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "false", description = "Whether to trim leading and trailing blanks.", displayName = "Trim"), - @YamlProperty(name = "useMaps", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps (HashMap) for the lines values instead of lists. It requires to have header (either defined or collected).", displayName = "Use Maps"), + @YamlProperty(name = "recordSeparator", type = "string", description = "Sets the record separator (aka new line) which by default is new line characters (CRLF)", displayName = "Record Separator"), + @YamlProperty(name = "recordSeparatorDisabled", type = "string", description = "Used for disabling record separator", displayName = "Record Separator Disabled"), + @YamlProperty(name = "skipHeaderRecord", type = "boolean", defaultValue = "false", description = "Whether to skip the header record in the output", displayName = "Skip Header Record"), + @YamlProperty(name = "trailingDelimiter", type = "boolean", defaultValue = "false", description = "Sets whether or not to add a trailing delimiter.", displayName = "Trailing Delimiter"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "false", description = "Sets whether or not to trim leading and trailing blanks.", displayName = "Trim"), + @YamlProperty(name = "useMaps", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps (HashMap)for the lines values instead of lists. It requires to have header (either defined or collected).", displayName = "Use Maps"), @YamlProperty(name = "useOrderedMaps", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce ordered maps (LinkedHashMap) for the lines values instead of lists. It requires to have header (either defined or collected).", displayName = "Use Ordered Maps") } ) @@ -2901,11 +2808,11 @@ protected boolean setProperty(CsvDataFormat target, String propertyKey, String p types = org.apache.camel.model.dataformat.CustomDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Custom", - description = "Delegates to a custom DataFormat implementation looked up from the Camel registry by name", + description = "Delegate to a custom org.apache.camel.spi.DataFormat implementation via Camel registry.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the custom DataFormat to lookup from the Camel registry.", displayName = "Ref") + @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the custom org.apache.camel.spi.DataFormat to lookup from the Camel registry.", displayName = "Ref") } ) public static class CustomDataFormatDeserializer extends YamlDeserializerBase { @@ -2952,11 +2859,11 @@ protected boolean setProperty(CustomDataFormat target, String propertyKey, types = org.apache.camel.model.loadbalancer.CustomLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Custom Load Balancer", - description = "References a custom load balancer implementation from the registry", + description = "To use a custom load balancer implementation.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ref", type = "string", required = true, description = "Refers to the custom load balancer to lookup from the registry.", displayName = "Ref") + @YamlProperty(name = "ref", type = "string", required = true, description = "Refers to the custom load balancer to lookup from the registry", displayName = "Ref") } ) public static class CustomLoadBalancerDefinitionDeserializer extends YamlDeserializerBase { @@ -3002,15 +2909,15 @@ protected boolean setProperty(CustomLoadBalancerDefinition target, String proper types = org.apache.camel.model.transformer.CustomTransformerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Custom Transformer", - description = "References a custom data type transformer implementation from the registry for route-level transformations", + description = "To use a custom transformer on a route level.", deprecated = false, properties = { - @YamlProperty(name = "className", type = "string", description = "Fully qualified class name of the custom Transformer implementation.", displayName = "Class Name"), - @YamlProperty(name = "fromType", type = "string", description = "The source (from) data type name. If you specify 'xml:XYZ', the transformer is picked up when source type matches. If you specify just 'xml', it matches all xml source types.", displayName = "From Type"), - @YamlProperty(name = "name", type = "string", description = "Name under which the transformer gets referenced when specifying input/output data type on routes. If the name matches a data type scheme, the transformer will be picked up as a fallback.", displayName = "Name"), - @YamlProperty(name = "ref", type = "string", description = "Reference to a custom Transformer bean in the registry.", displayName = "Ref"), - @YamlProperty(name = "scheme", type = "string", description = "Scheme name supported by the transformer. If specified, the transformer will be picked up for all from/to transformation of this scheme. Scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), - @YamlProperty(name = "toType", type = "string", description = "The destination (to) data type name. If you specify 'json:XYZ', the transformer is picked up when destination type matches. If you specify just 'json', it matches all json destination types.", displayName = "To Type") + @YamlProperty(name = "className", type = "string", description = "Set a class name of the Transformer", displayName = "Class Name"), + @YamlProperty(name = "fromType", type = "string", description = "Set the 'from' data type name. If you specify 'xml:XYZ', the transformer will be picked up if source type is 'xml:XYZ'. If you specify just 'xml', the transformer matches with all of 'xml' source type like 'xml:ABC' or 'xml:DEF'.", displayName = "From Type"), + @YamlProperty(name = "name", type = "string", description = "Set the transformer name under which the transformer gets referenced when specifying the input/output data type on routes. If you specify a transformer name that matches a data type scheme like 'csv' the transformer will be picked up for all of 'csv:' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Name"), + @YamlProperty(name = "ref", type = "string", description = "Set a bean reference of the Transformer", displayName = "Ref"), + @YamlProperty(name = "scheme", type = "string", description = "Set a scheme name supported by the transformer. If you specify 'csv', the transformer will be picked up for all of 'csv' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), + @YamlProperty(name = "toType", type = "string", description = "Set the 'to' data type name. If you specify 'json:XYZ', the transformer will be picked up if destination type is 'json:XYZ'. If you specify just 'json', the transformer matches with all of 'json' destination type like 'json:ABC' or 'json:DEF'.", displayName = "To Type") } ) public static class CustomTransformerDefinitionDeserializer extends YamlDeserializerBase { @@ -3071,12 +2978,12 @@ protected boolean setProperty(CustomTransformerDefinition target, String propert types = org.apache.camel.model.validator.CustomValidatorDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Custom Validator", - description = "References a custom data type validator implementation from the registry for route-level validation", + description = "To use a custom validator on the route level.", deprecated = false, properties = { - @YamlProperty(name = "className", type = "string", description = "Fully qualified class name of the custom Validator implementation.", displayName = "Class Name"), - @YamlProperty(name = "ref", type = "string", description = "Reference to a custom Validator bean in the registry.", displayName = "Ref"), - @YamlProperty(name = "type", type = "string", 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.", displayName = "Type") + @YamlProperty(name = "className", type = "string", description = "Set a class name of the Validator", displayName = "Class Name"), + @YamlProperty(name = "ref", type = "string", description = "Set a bean reference of the Validator", displayName = "Ref"), + @YamlProperty(name = "type", type = "string", description = "Set the data type name. If you specify 'xml:XYZ', the validator will be picked up if message type is 'xml:XYZ'. If you specify just 'xml', the validator matches with all of 'xml' message type like 'xml:ABC' or 'xml:DEF'.", displayName = "Type") } ) public static class CustomValidatorDefinitionDeserializer extends YamlDeserializerBase { @@ -3155,7 +3062,7 @@ protected boolean setProperty(DataFormatDefinition target, String propertyKey, types = org.apache.camel.model.transformer.DataFormatTransformerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Data Format Transformer", - description = "Uses a Camel data format to perform data type transformation between input and output types", + description = "Represents a org.apache.camel.processor.transformer.DataFormatTransformer which leverages org.apache.camel.spi.DataFormat to perform transformation. One of the DataFormat 'ref' or DataFormat 'type' needs to be specified.", deprecated = false, properties = { @YamlProperty(name = "asn1", type = "object:org.apache.camel.model.dataformat.ASN1DataFormat", oneOf = "dataFormatType"), @@ -3173,7 +3080,7 @@ protected boolean setProperty(DataFormatDefinition target, String propertyKey, @YamlProperty(name = "fhirXml", type = "object:org.apache.camel.model.dataformat.FhirXmlDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "flatpack", type = "object:org.apache.camel.model.dataformat.FlatpackDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "fory", type = "object:org.apache.camel.model.dataformat.ForyDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "fromType", type = "string", description = "The source (from) data type name. If you specify 'xml:XYZ', the transformer is picked up when source type matches. If you specify just 'xml', it matches all xml source types.", displayName = "From Type"), + @YamlProperty(name = "fromType", type = "string", description = "Set the 'from' data type name. If you specify 'xml:XYZ', the transformer will be picked up if source type is 'xml:XYZ'. If you specify just 'xml', the transformer matches with all of 'xml' source type like 'xml:ABC' or 'xml:DEF'.", displayName = "From Type"), @YamlProperty(name = "grok", type = "object:org.apache.camel.model.dataformat.GrokDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "groovyJson", type = "object:org.apache.camel.model.dataformat.GroovyJSonDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "groovyXml", type = "object:org.apache.camel.model.dataformat.GroovyXmlDataFormat", oneOf = "dataFormatType"), @@ -3187,14 +3094,12 @@ protected boolean setProperty(DataFormatDefinition target, String propertyKey, @YamlProperty(name = "jsonApi", type = "object:org.apache.camel.model.dataformat.JsonApiDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "lzf", type = "object:org.apache.camel.model.dataformat.LZFDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "mimeMultipart", type = "object:org.apache.camel.model.dataformat.MimeMultipartDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "name", type = "string", description = "Name under which the transformer gets referenced when specifying input/output data type on routes. If the name matches a data type scheme, the transformer will be picked up as a fallback.", displayName = "Name"), - @YamlProperty(name = "ocsf", type = "object:org.apache.camel.model.dataformat.OcsfDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "name", type = "string", description = "Set the transformer name under which the transformer gets referenced when specifying the input/output data type on routes. If you specify a transformer name that matches a data type scheme like 'csv' the transformer will be picked up for all of 'csv:' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Name"), @YamlProperty(name = "parquetAvro", type = "object:org.apache.camel.model.dataformat.ParquetAvroDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "pgp", type = "object:org.apache.camel.model.dataformat.PGPDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "pqc", type = "object:org.apache.camel.model.dataformat.PQCDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "protobuf", type = "object:org.apache.camel.model.dataformat.ProtobufDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "rss", type = "object:org.apache.camel.model.dataformat.RssDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "scheme", type = "string", description = "Scheme name supported by the transformer. If specified, the transformer will be picked up for all from/to transformation of this scheme. Scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), + @YamlProperty(name = "scheme", type = "string", description = "Set a scheme name supported by the transformer. If you specify 'csv', the transformer will be picked up for all of 'csv' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), @YamlProperty(name = "smooks", type = "object:org.apache.camel.model.dataformat.SmooksDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "soap", type = "object:org.apache.camel.model.dataformat.SoapDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "swiftMt", type = "object:org.apache.camel.model.dataformat.SwiftMtDataFormat", oneOf = "dataFormatType"), @@ -3202,7 +3107,7 @@ protected boolean setProperty(DataFormatDefinition target, String propertyKey, @YamlProperty(name = "syslog", type = "object:org.apache.camel.model.dataformat.SyslogDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "tarFile", type = "object:org.apache.camel.model.dataformat.TarFileDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "thrift", type = "object:org.apache.camel.model.dataformat.ThriftDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "toType", type = "string", description = "The destination (to) data type name. If you specify 'json:XYZ', the transformer is picked up when destination type matches. If you specify just 'json', it matches all json destination types.", displayName = "To Type"), + @YamlProperty(name = "toType", type = "string", description = "Set the 'to' data type name. If you specify 'json:XYZ', the transformer will be picked up if destination type is 'json:XYZ'. If you specify just 'json', the transformer matches with all of 'json' destination type like 'json:ABC' or 'json:DEF'.", displayName = "To Type"), @YamlProperty(name = "univocityCsv", type = "object:org.apache.camel.model.dataformat.UniVocityCsvDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "univocityFixed", type = "object:org.apache.camel.model.dataformat.UniVocityFixedDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "univocityTsv", type = "object:org.apache.camel.model.dataformat.UniVocityTsvDataFormat", oneOf = "dataFormatType"), @@ -3372,26 +3277,11 @@ protected boolean setProperty(DataFormatTransformerDefinition target, String pro target.setDataFormatType(val); break; } - case "ocsf": { - org.apache.camel.model.dataformat.OcsfDataFormat val = asType(node, org.apache.camel.model.dataformat.OcsfDataFormat.class); - target.setDataFormatType(val); - break; - } case "parquetAvro": { org.apache.camel.model.dataformat.ParquetAvroDataFormat val = asType(node, org.apache.camel.model.dataformat.ParquetAvroDataFormat.class); target.setDataFormatType(val); break; } - case "pgp": { - org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); - target.setDataFormatType(val); - break; - } - case "pqc": { - org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); - target.setDataFormatType(val); - break; - } case "protobuf": { org.apache.camel.model.dataformat.ProtobufDataFormat val = asType(node, org.apache.camel.model.dataformat.ProtobufDataFormat.class); target.setDataFormatType(val); @@ -3457,6 +3347,11 @@ protected boolean setProperty(DataFormatTransformerDefinition target, String pro target.setDataFormatType(val); break; } + case "pgp": { + org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); + target.setDataFormatType(val); + break; + } case "yaml": { org.apache.camel.model.dataformat.YAMLDataFormat val = asType(node, org.apache.camel.model.dataformat.YAMLDataFormat.class); target.setDataFormatType(val); @@ -3505,7 +3400,7 @@ protected boolean setProperty(DataFormatTransformerDefinition target, String pro types = org.apache.camel.model.dataformat.DataFormatsDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Data formats", - description = "Container for defining data format configurations", + description = "Configure data formats.", deprecated = false, properties = { @YamlProperty(name = "asn1", type = "object:org.apache.camel.model.dataformat.ASN1DataFormat"), @@ -3536,10 +3431,8 @@ protected boolean setProperty(DataFormatTransformerDefinition target, String pro @YamlProperty(name = "jsonApi", type = "object:org.apache.camel.model.dataformat.JsonApiDataFormat"), @YamlProperty(name = "lzf", type = "object:org.apache.camel.model.dataformat.LZFDataFormat"), @YamlProperty(name = "mimeMultipart", type = "object:org.apache.camel.model.dataformat.MimeMultipartDataFormat"), - @YamlProperty(name = "ocsf", type = "object:org.apache.camel.model.dataformat.OcsfDataFormat"), @YamlProperty(name = "parquetAvro", type = "object:org.apache.camel.model.dataformat.ParquetAvroDataFormat"), @YamlProperty(name = "pgp", type = "object:org.apache.camel.model.dataformat.PGPDataFormat"), - @YamlProperty(name = "pqc", type = "object:org.apache.camel.model.dataformat.PQCDataFormat"), @YamlProperty(name = "protobuf", type = "object:org.apache.camel.model.dataformat.ProtobufDataFormat"), @YamlProperty(name = "rss", type = "object:org.apache.camel.model.dataformat.RssDataFormat"), @YamlProperty(name = "smooks", type = "object:org.apache.camel.model.dataformat.SmooksDataFormat"), @@ -3858,16 +3751,6 @@ protected boolean setProperty(DataFormatsDefinition target, String propertyKey, target.setDataFormats(existing); break; } - case "ocsf": { - org.apache.camel.model.dataformat.OcsfDataFormat val = asType(node, org.apache.camel.model.dataformat.OcsfDataFormat.class); - java.util.List existing = target.getDataFormats(); - if (existing == null) { - existing = new java.util.ArrayList<>(); - } - existing.add(val); - target.setDataFormats(existing); - break; - } case "parquetAvro": { org.apache.camel.model.dataformat.ParquetAvroDataFormat val = asType(node, org.apache.camel.model.dataformat.ParquetAvroDataFormat.class); java.util.List existing = target.getDataFormats(); @@ -3888,16 +3771,6 @@ protected boolean setProperty(DataFormatsDefinition target, String propertyKey, target.setDataFormats(existing); break; } - case "pqc": { - org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); - java.util.List existing = target.getDataFormats(); - if (existing == null) { - existing = new java.util.ArrayList<>(); - } - existing.add(val); - target.setDataFormats(existing); - break; - } case "protobuf": { org.apache.camel.model.dataformat.ProtobufDataFormat val = asType(node, org.apache.camel.model.dataformat.ProtobufDataFormat.class); java.util.List existing = target.getDataFormats(); @@ -4072,16 +3945,16 @@ protected boolean setProperty(DataFormatsDefinition target, String propertyKey, types = org.apache.camel.model.language.DatasonnetExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "DataSonnet", - description = "To use DataSonnet scripts for message transformations", + description = "To use DataSonnet scripts for message transformations.", deprecated = false, properties = { - @YamlProperty(name = "bodyMediaType", type = "string", description = "The media type of the message body, such as application/json.", displayName = "Body Media Type"), - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "outputMediaType", type = "string", description = "The media type to use for the output result.", displayName = "Output Media Type"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "bodyMediaType", type = "string", description = "The String representation of the message's body MediaType", displayName = "Body Media Type"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "outputMediaType", type = "string", description = "The String representation of the MediaType to output", displayName = "Output Media Type"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class DatasonnetExpressionDeserializer extends YamlDeserializerBase { @@ -4161,24 +4034,24 @@ protected boolean setProperty(DatasonnetExpression target, String propertyKey, types = org.apache.camel.model.errorhandler.DeadLetterChannelDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Dead Letter Channel", - description = "Error handler that moves failed messages to a dead letter endpoint after exhausting redelivery attempts", + description = "Error handler with dead letter queue.", deprecated = false, properties = { - @YamlProperty(name = "deadLetterHandleNewException", type = "boolean", defaultValue = "true", description = "Whether the dead letter channel should handle (and ignore) any new exception thrown while sending the exchange to the dead letter endpoint. Set to false to propagate the new exception back, which is useful with transactions so the transaction can detect the failure and rollback.", displayName = "Dead Letter Handle New Exception"), - @YamlProperty(name = "deadLetterUri", type = "string", required = true, description = "The endpoint URI where failed exchanges are sent after all redelivery attempts have been exhausted (the dead letter queue).", displayName = "Dead Letter Uri"), - @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used for asynchronous redelivery.", displayName = "Executor Service Ref"), + @YamlProperty(name = "deadLetterHandleNewException", type = "boolean", defaultValue = "true", description = "Whether the dead letter channel should handle (and ignore) any new exception that may been thrown during sending the message to the dead letter endpoint. The default value is true which means any such kind of exception is handled and ignored. Set this to false to let the exception be propagated back on the org.apache.camel.Exchange . This can be used in situations where you use transactions, and want to use Camel's dead letter channel to deal with exceptions during routing, but if the dead letter channel itself fails because of a new exception being thrown, then by setting this to false the new exceptions is propagated back and set on the org.apache.camel.Exchange , which allows the transaction to detect the exception, and rollback.", displayName = "Dead Letter Handle New Exception"), + @YamlProperty(name = "deadLetterUri", type = "string", required = true, description = "The dead letter endpoint uri for the Dead Letter error handler.", displayName = "Dead Letter Uri"), + @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used by the error handler", displayName = "Executor Service Ref"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "The logging level to use when logging caught exceptions.", displayName = "Level"), - @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler.", displayName = "Log Name"), - @YamlProperty(name = "loggerRef", type = "string", description = "Sets a reference to a logger to use for logging error handler activity.", displayName = "Logger Ref"), - @YamlProperty(name = "onExceptionOccurredRef", type = "string", 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.", displayName = "On Exception Occurred Ref"), - @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the exchange before handled by the failure processor or dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), - @YamlProperty(name = "onRedeliveryRef", type = "string", 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.", displayName = "On Redelivery Ref"), - @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "The redelivery settings for configuring retry attempts and delays when message processing fails.", displayName = "Redelivery Policy"), - @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a redelivery policy to lookup in the registry to be used.", displayName = "Redelivery Policy Ref"), - @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a reference to a retry while predicate. Redelivery continues as long as the predicate evaluates to true.", displayName = "Retry While Ref"), - @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "If enabled, uses the original input message body (but not headers) when the exchange is moved to the dead letter queue after all redelivery attempts have been exhausted. This allows enriching the message with custom headers while keeping the original body. Cannot be used together with useOriginalMessage.", displayName = "Use Original Body"), - @YamlProperty(name = "useOriginalMessage", type = "boolean", 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.", displayName = "Use Original Message") + @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "Logging level to use by error handler", displayName = "Level"), + @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler", displayName = "Log Name"), + @YamlProperty(name = "loggerRef", type = "string", description = "References to a logger to use as logger for the error handler", displayName = "Logger Ref"), + @YamlProperty(name = "onExceptionOccurredRef", type = "string", description = "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", displayName = "On Exception Occurred Ref"), + @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor / dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), + @YamlProperty(name = "onRedeliveryRef", type = "string", description = "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", displayName = "On Redelivery Ref"), + @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "Sets the redelivery settings", displayName = "Redelivery Policy"), + @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", displayName = "Redelivery Policy Ref"), + @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false.", displayName = "Retry While Ref"), + @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Body"), + @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Message") } ) public static class DeadLetterChannelDefinitionDeserializer extends YamlDeserializerBase { @@ -4284,22 +4157,22 @@ protected boolean setProperty(DeadLetterChannelDefinition target, String propert types = org.apache.camel.model.errorhandler.DefaultErrorHandlerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Default Error Handler", - description = "The default error handler that supports redelivery with configurable retry policies and delay patterns", + description = "The default error handler.", deprecated = false, properties = { - @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used for asynchronous redelivery.", displayName = "Executor Service Ref"), + @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used by the error handler", displayName = "Executor Service Ref"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "The logging level to use when logging caught exceptions.", displayName = "Level"), - @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler.", displayName = "Log Name"), - @YamlProperty(name = "loggerRef", type = "string", description = "Sets a reference to a logger to use for logging error handler activity.", displayName = "Logger Ref"), - @YamlProperty(name = "onExceptionOccurredRef", type = "string", 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.", displayName = "On Exception Occurred Ref"), - @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the exchange before handled by the failure processor or dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), - @YamlProperty(name = "onRedeliveryRef", type = "string", 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.", displayName = "On Redelivery Ref"), - @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "The redelivery settings for configuring retry attempts and delays when message processing fails.", displayName = "Redelivery Policy"), - @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a redelivery policy to lookup in the registry to be used.", displayName = "Redelivery Policy Ref"), - @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a reference to a retry while predicate. Redelivery continues as long as the predicate evaluates to true.", displayName = "Retry While Ref"), - @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "If enabled, uses the original input message body (but not headers) when the exchange is moved to the dead letter queue after all redelivery attempts have been exhausted. This allows enriching the message with custom headers while keeping the original body. Cannot be used together with useOriginalMessage.", displayName = "Use Original Body"), - @YamlProperty(name = "useOriginalMessage", type = "boolean", 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.", displayName = "Use Original Message") + @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "Logging level to use by error handler", displayName = "Level"), + @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler", displayName = "Log Name"), + @YamlProperty(name = "loggerRef", type = "string", description = "References to a logger to use as logger for the error handler", displayName = "Logger Ref"), + @YamlProperty(name = "onExceptionOccurredRef", type = "string", description = "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", displayName = "On Exception Occurred Ref"), + @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor / dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), + @YamlProperty(name = "onRedeliveryRef", type = "string", description = "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", displayName = "On Redelivery Ref"), + @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "Sets the redelivery settings", displayName = "Redelivery Policy"), + @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", displayName = "Redelivery Policy Ref"), + @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false.", displayName = "Retry While Ref"), + @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Body"), + @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Message") } ) public static class DefaultErrorHandlerDefinitionDeserializer extends YamlDeserializerBase { @@ -4395,18 +4268,18 @@ protected boolean setProperty(DefaultErrorHandlerDefinition target, String prope types = org.apache.camel.model.DelayDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Delay", - description = "Delays message processing for a specified duration, which can be a fixed value or computed dynamically per message", + description = "Delays processing for a specified length of time", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), @YamlProperty(name = "asyncDelayed", type = "boolean", defaultValue = "true", description = "Enables asynchronous delay which means the thread will not block while delaying.", displayName = "Async Delayed"), - @YamlProperty(name = "callerRunsWhenRejected", type = "boolean", defaultValue = "true", description = "Whether or not the caller should run the task when it was rejected by the thread pool.", displayName = "Caller Runs When Rejected"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "executorService", type = "string", description = "To use a custom thread pool if asyncDelay has been enabled.", displayName = "Executor Service"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression that determines the delay duration in milliseconds.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "callerRunsWhenRejected", type = "boolean", defaultValue = "true", description = "Whether or not the caller should run the task when it was rejected by the thread pool. Is by default true", displayName = "Caller Runs When Rejected"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "executorService", type = "string", description = "To use a custom Thread Pool if asyncDelay has been enabled.", displayName = "Executor Service"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to define how long time to wait (in millis)", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class DelayDefinitionDeserializer extends YamlDeserializerBase { @@ -4486,32 +4359,32 @@ protected boolean setProperty(DelayDefinition target, String propertyKey, types = org.apache.camel.model.rest.DeleteDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Delete", - description = "Defines an HTTP DELETE operation in the REST DSL", + description = "Rest DELETE command", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. The default value is true.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), @YamlProperty(name = "deprecated", type = "boolean", defaultValue = "false", description = "Marks this rest operation as deprecated in OpenApi documentation.", displayName = "Deprecated"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data. This option will override what may be configured on a parent level.", displayName = "Out Type"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), @YamlProperty(name = "param", type = "array:org.apache.camel.model.rest.ParamDefinition", description = "Information about parameters for this REST operation", displayName = "Param"), @YamlProperty(name = "path", type = "string", description = "The path mapping URIs of this REST operation such as /{id}.", displayName = "Path"), - @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), @YamlProperty(name = "responseMessage", type = "array:org.apache.camel.model.rest.ResponseMessageDefinition", description = "Response details for this REST operation", displayName = "Response Message"), - @YamlProperty(name = "routeId", type = "string", description = "The route id this REST service will refer to.", displayName = "Route Id"), + @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), @YamlProperty(name = "security", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Security settings for this REST operation", displayName = "Security"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "streamCache", type = "boolean", defaultValue = "false", description = "Whether stream caching is enabled on this rest operation.", displayName = "Stream Cache"), @YamlProperty(name = "to", type = "object:org.apache.camel.model.ToDefinition", description = "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", displayName = "To"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data. This option will override what may be configured on a parent level.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") } ) public static class DeleteDefinitionDeserializer extends YamlDeserializerBase { @@ -4658,7 +4531,7 @@ protected boolean setProperty(DeleteDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.DfdlDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "DFDL", - description = "Transforms fixed format data such as EDI message from/to XML using a Data Format Description Language (DFDL)", + description = "Transforms fixed format data such as EDI message from/to XML using a Data Format Description Language (DFDL).", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @@ -4720,18 +4593,18 @@ protected boolean setProperty(DfdlDataFormat target, String propertyKey, types = org.apache.camel.model.DynamicRouterDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Dynamic Router", - description = "Routes a message step-by-step through a series of endpoints, determined dynamically by calling an expression repeatedly. The expression is called after each hop and returns the next endpoint, or null to stop.", + description = "Route messages based on dynamic rules", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "cacheSize", type = "number", 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.", displayName = "Cache Size"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", 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.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreInvalidEndpoints", type = "boolean", defaultValue = "false", description = "If enabled then invalid endpoint URIs are ignored and logged instead of throwing an exception.", displayName = "Ignore Invalid Endpoints"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "uriDelimiter", type = "string", defaultValue = ",", description = "The delimiter used to separate endpoint URIs when the expression returns multiple endpoints. Default is comma.", displayName = "Uri Delimiter") + @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this dynamic router, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise producers/endpoints are stored in memory in the caches. However if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both producers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non frequent used producers.", displayName = "Cache Size"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to call that returns the endpoint(s) to route to in the dynamic routing. Important: The expression will be called in a while loop fashion, until the expression returns null which means the dynamic router is finished.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "ignoreInvalidEndpoints", type = "boolean", defaultValue = "false", description = "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", displayName = "Ignore Invalid Endpoints"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "uriDelimiter", type = "string", defaultValue = ",", description = "Sets the uri delimiter to use", displayName = "Uri Delimiter") } ) public static class DynamicRouterDefinitionDeserializer extends YamlDeserializerBase { @@ -4811,15 +4684,15 @@ protected boolean setProperty(DynamicRouterDefinition target, String propertyKey types = org.apache.camel.model.transformer.EndpointTransformerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Endpoint Transformer", - description = "Uses a Camel endpoint to perform data type transformation by sending the message through the endpoint", + description = "To use a Camel endpoint to perform transformation on the route level.", deprecated = false, properties = { - @YamlProperty(name = "fromType", type = "string", description = "The source (from) data type name. If you specify 'xml:XYZ', the transformer is picked up when source type matches. If you specify just 'xml', it matches all xml source types.", displayName = "From Type"), - @YamlProperty(name = "name", type = "string", description = "Name under which the transformer gets referenced when specifying input/output data type on routes. If the name matches a data type scheme, the transformer will be picked up as a fallback.", displayName = "Name"), - @YamlProperty(name = "ref", type = "string", description = "Reference of the Endpoint used for transformation.", displayName = "Ref"), - @YamlProperty(name = "scheme", type = "string", description = "Scheme name supported by the transformer. If specified, the transformer will be picked up for all from/to transformation of this scheme. Scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), - @YamlProperty(name = "toType", type = "string", description = "The destination (to) data type name. If you specify 'json:XYZ', the transformer is picked up when destination type matches. If you specify just 'json', it matches all json destination types.", displayName = "To Type"), - @YamlProperty(name = "uri", type = "string", description = "URI of the Endpoint used for transformation.", displayName = "Uri") + @YamlProperty(name = "fromType", type = "string", description = "Set the 'from' data type name. If you specify 'xml:XYZ', the transformer will be picked up if source type is 'xml:XYZ'. If you specify just 'xml', the transformer matches with all of 'xml' source type like 'xml:ABC' or 'xml:DEF'.", displayName = "From Type"), + @YamlProperty(name = "name", type = "string", description = "Set the transformer name under which the transformer gets referenced when specifying the input/output data type on routes. If you specify a transformer name that matches a data type scheme like 'csv' the transformer will be picked up for all of 'csv:' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Name"), + @YamlProperty(name = "ref", type = "string", description = "Set the reference of the Endpoint.", displayName = "Ref"), + @YamlProperty(name = "scheme", type = "string", description = "Set a scheme name supported by the transformer. If you specify 'csv', the transformer will be picked up for all of 'csv' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), + @YamlProperty(name = "toType", type = "string", description = "Set the 'to' data type name. If you specify 'json:XYZ', the transformer will be picked up if destination type is 'json:XYZ'. If you specify just 'json', the transformer matches with all of 'json' destination type like 'json:ABC' or 'json:DEF'.", displayName = "To Type"), + @YamlProperty(name = "uri", type = "string", description = "Set the URI of the Endpoint.", displayName = "Uri") } ) public static class EndpointTransformerDefinitionDeserializer extends YamlDeserializerBase { @@ -4880,12 +4753,12 @@ protected boolean setProperty(EndpointTransformerDefinition target, String prope types = org.apache.camel.model.validator.EndpointValidatorDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Endpoint Validator", - description = "Uses a Camel endpoint to perform data type validation by sending the message through the endpoint", + description = "To use a Camel endpoint to perform validation on the route level.", deprecated = false, properties = { - @YamlProperty(name = "ref", type = "string", description = "Reference of the Endpoint used for validation.", displayName = "Ref"), - @YamlProperty(name = "type", type = "string", 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.", displayName = "Type"), - @YamlProperty(name = "uri", type = "string", description = "URI of the Endpoint used for validation.", displayName = "Uri") + @YamlProperty(name = "ref", type = "string", description = "Set the reference of the Endpoint.", displayName = "Ref"), + @YamlProperty(name = "type", type = "string", description = "Set the data type name. If you specify 'xml:XYZ', the validator will be picked up if message type is 'xml:XYZ'. If you specify just 'xml', the validator matches with all of 'xml' message type like 'xml:ABC' or 'xml:DEF'.", displayName = "Type"), + @YamlProperty(name = "uri", type = "string", description = "Set the URI of the Endpoint.", displayName = "Uri") } ) public static class EndpointValidatorDefinitionDeserializer extends YamlDeserializerBase { @@ -4931,26 +4804,26 @@ protected boolean setProperty(EndpointValidatorDefinition target, String propert types = org.apache.camel.model.EnrichDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Enrich", - description = "Enriches the message with additional data obtained by sending to another endpoint using request-reply. The reply is merged into the original message using an aggregation strategy.", + description = "Enriches a message with data from a secondary resource", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "aggregateOnException", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method.", displayName = "Aggregate On Exception"), + @YamlProperty(name = "aggregateOnException", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method. For example to suppress the exception or set a custom message body etc.", displayName = "Aggregate On Exception"), @YamlProperty(name = "aggregationStrategy", type = "string", 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.", displayName = "Aggregation Strategy"), @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "string", description = "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicitly declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise enricher if they are SendDynamicAware.", displayName = "Allow Optimised Components"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise enricher if they are org.apache.camel.spi.SendDynamicAware", displayName = "Allow Optimised Components"), @YamlProperty(name = "autoStartComponents", type = "boolean", defaultValue = "true", description = "Whether to auto startup components when enricher is starting up.", displayName = "Auto Start Components"), - @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the ProducerCache which is used to cache and reuse producers when uris are reused. Use 0 for default cache size, or -1 to turn cache off.", displayName = "Cache Size"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression to compute the endpoint URI to enrich from.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreInvalidEndpoint", type = "boolean", defaultValue = "false", description = "Whether to ignore an invalid endpoint URI when trying to create a producer with that endpoint.", displayName = "Ignore Invalid Endpoint"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the UnitOfWork with the parent and the resource exchange. Enrich will by default not share unit of work between the parent exchange and the resource exchange. This means the resource exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), - @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive"), - @YamlProperty(name = "variableSend", type = "string", 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.", displayName = "Variable Send") + @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producer when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise producers/endpoints are stored in memory in the caches. However if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both producers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non frequent used producers.", displayName = "Cache Size"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression that computes the endpoint uri to use as the resource endpoint to enrich from", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "ignoreInvalidEndpoint", type = "boolean", defaultValue = "false", description = "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", displayName = "Ignore Invalid Endpoint"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the org.apache.camel.spi.UnitOfWork with the parent and the resource exchange. Enrich will by default not share unit of work between the parent exchange and the resource exchange. This means the resource exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), + @YamlProperty(name = "variableReceive", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Receive"), + @YamlProperty(name = "variableSend", type = "string", 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. Important: When using receive variable then the received body is stored only in this variable and not on the current message.", displayName = "Variable Send") } ) public static class EnrichDefinitionDeserializer extends YamlDeserializerBase { @@ -5070,7 +4943,7 @@ protected boolean setProperty(EnrichDefinition target, String propertyKey, types = org.apache.camel.model.ErrorHandlerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Error Handler", - description = "Configures error handling strategy for routes, controlling how failed exchanges are handled and redelivered", + description = "Camel error handling.", deprecated = false, properties = { @YamlProperty(name = "deadLetterChannel", type = "object:org.apache.camel.model.errorhandler.DeadLetterChannelDefinition", oneOf = "errorHandlerType"), @@ -5151,12 +5024,12 @@ protected boolean setProperty(ErrorHandlerDefinition target, String propertyKey, types = org.apache.camel.model.language.ExchangePropertyExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "ExchangeProperty", - description = "Gets a property from the Exchange", + description = "Gets a property from the Exchange.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class ExchangePropertyExpressionDeserializer extends YamlDeserializerBase { @@ -5216,15 +5089,15 @@ protected boolean setProperty(ExchangePropertyExpression target, String property types = org.apache.camel.model.loadbalancer.FailoverLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Failover Load Balancer", - description = "Load balancer that tries the next endpoint in case of failure, cycling through available endpoints until one succeeds", + description = "In case of failures the exchange will be tried on the next endpoint.", deprecated = false, properties = { - @YamlProperty(name = "exception", type = "array:string", description = "A list of class names for specific exceptions to monitor. If no exceptions are configured then all exceptions are monitored.", displayName = "Exception"), + @YamlProperty(name = "exception", type = "array:string", description = "A list of class names for specific exceptions to monitor. If no exceptions are configured then all exceptions are monitored", displayName = "Exception"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "inheritErrorHandler", type = "boolean", defaultValue = "true", description = "Whether to inherit the error handler. If turned off, the load balancer will fail over immediately on an error instead of waiting for Camel error handler to exhaust retries.", displayName = "Inherit Error Handler"), - @YamlProperty(name = "maximumFailoverAttempts", type = "string", defaultValue = "-1", description = "A value to indicate after X failover attempts we should exhaust (give up). Use -1 to indicate never give up and continuously try to failover. Use 0 to never failover. Use e.g. 3 to failover at most 3 times before giving up.", displayName = "Maximum Failover Attempts"), - @YamlProperty(name = "roundRobin", type = "boolean", defaultValue = "false", description = "Whether to use round robin mode. If enabled, the load balancer keeps state and continues with the next endpoint in a round robin fashion. If not, it always starts from the first endpoint for every message.", displayName = "Round Robin"), - @YamlProperty(name = "sticky", type = "boolean", defaultValue = "false", description = "Whether to use sticky mode. If enabled, the load balancer keeps state and continues with the last known good endpoint.", displayName = "Sticky") + @YamlProperty(name = "inheritErrorHandler", type = "boolean", defaultValue = "true", description = "To turn off Camel error handling during load balancing. By default, Camel error handler will attempt calling a service, which means you can specify retires and other fine-grained settings. And only when Camel error handler have failed all attempts, then this load balancer will fail over to the next endpoint and try again. You can turn this off, and then this load balancer will fail over immediately on an error.", displayName = "Inherit Error Handler"), + @YamlProperty(name = "maximumFailoverAttempts", type = "string", defaultValue = "-1", description = "A value to indicate after X failover attempts we should exhaust (give up). Use -1 to indicate never give up and continuously try to failover. Use 0 to never failover. And use e.g. 3 to failover at most 3 times before giving up. This option can be used whether roundRobin is enabled or not.", displayName = "Maximum Failover Attempts"), + @YamlProperty(name = "roundRobin", type = "boolean", defaultValue = "false", description = "Whether or not the failover load balancer should operate in round robin mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If round robin is enabled, then it keeps state and will continue with the next endpoint in a round robin fashion. You can also enable sticky mode together with round robin, if so then it will pick the last known good endpoint to use when starting the load balancing (instead of using the next when starting).", displayName = "Round Robin"), + @YamlProperty(name = "sticky", type = "boolean", defaultValue = "false", description = "Whether or not the failover load balancer should operate in sticky mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If sticky is enabled, then it keeps state and will continue with the last known good endpoint. You can also enable sticky mode together with round robin, if so then it will pick the last known good endpoint to use when starting the load balancing (instead of using the next when starting).", displayName = "Sticky") } ) public static class FailoverLoadBalancerDefinitionDeserializer extends YamlDeserializerBase { @@ -5285,21 +5158,21 @@ protected boolean setProperty(FailoverLoadBalancerDefinition target, String prop types = org.apache.camel.model.FaultToleranceConfigurationDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Fault Tolerance Configuration", - description = "Configures MicroProfile Fault Tolerance settings for the Circuit Breaker EIP, such as timeout, bulkhead, and retry parameters", + description = "MicroProfile Fault Tolerance Circuit Breaker EIP configuration", deprecated = false, properties = { - @YamlProperty(name = "bulkheadEnabled", type = "boolean", defaultValue = "false", description = "Whether bulkhead is enabled or not on the circuit breaker.", displayName = "Bulkhead Enabled"), + @YamlProperty(name = "bulkheadEnabled", type = "boolean", defaultValue = "false", description = "Whether bulkhead is enabled or not on the circuit breaker. Default is false.", displayName = "Bulkhead Enabled"), @YamlProperty(name = "bulkheadMaxConcurrentCalls", type = "number", defaultValue = "10", description = "Configures the max amount of concurrent calls the bulkhead will support.", displayName = "Bulkhead Max Concurrent Calls"), @YamlProperty(name = "bulkheadWaitingTaskQueue", type = "number", defaultValue = "10", description = "Configures the task queue size for holding waiting tasks to be processed by the bulkhead.", displayName = "Bulkhead Waiting Task Queue"), @YamlProperty(name = "delay", type = "string", defaultValue = "5000", description = "Control how long the circuit breaker stays open. The default is 5 seconds.", displayName = "Delay"), - @YamlProperty(name = "failureRatio", type = "number", defaultValue = "50", description = "Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls.", displayName = "Failure Ratio"), + @YamlProperty(name = "failureRatio", type = "number", defaultValue = "50", description = "Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 50 percentage.", displayName = "Failure Ratio"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "requestVolumeThreshold", type = "number", defaultValue = "20", description = "Controls the size of the rolling window used when the circuit breaker is closed.", displayName = "Request Volume Threshold"), - @YamlProperty(name = "successThreshold", type = "number", defaultValue = "1", description = "Controls the number of trial calls which are allowed when the circuit breaker is half-open.", displayName = "Success Threshold"), + @YamlProperty(name = "requestVolumeThreshold", type = "number", defaultValue = "20", description = "Controls the size of the rolling window used when the circuit breaker is closed", displayName = "Request Volume Threshold"), + @YamlProperty(name = "successThreshold", type = "number", defaultValue = "1", description = "Controls the number of trial calls which are allowed when the circuit breaker is half-open", displayName = "Success Threshold"), @YamlProperty(name = "threadOffloadExecutorService", type = "string", description = "References a custom thread pool to use when offloading a guarded action to another thread.", displayName = "Thread Offload Executor Service"), @YamlProperty(name = "timeoutDuration", type = "string", defaultValue = "1000", description = "Configures the thread execution timeout. Default value is 1 second.", displayName = "Timeout Duration"), - @YamlProperty(name = "timeoutEnabled", type = "boolean", defaultValue = "false", description = "Whether timeout is enabled or not on the circuit breaker.", displayName = "Timeout Enabled"), - @YamlProperty(name = "timeoutPoolSize", type = "number", defaultValue = "10", description = "Configures the pool size of the thread pool when timeout is enabled.", displayName = "Timeout Pool Size"), + @YamlProperty(name = "timeoutEnabled", type = "boolean", defaultValue = "false", description = "Whether timeout is enabled or not on the circuit breaker. Default is false.", displayName = "Timeout Enabled"), + @YamlProperty(name = "timeoutPoolSize", type = "number", defaultValue = "10", description = "Configures the pool size of the thread pool when timeout is enabled. Default value is 10.", displayName = "Timeout Pool Size"), @YamlProperty(name = "typedGuard", type = "string", description = "Refers to an existing io.smallrye.faulttolerance.api.TypedGuard instance to lookup and use from the registry. When using this, then any other TypedGuard circuit breaker options are not in use.", displayName = "Typed Guard") } ) @@ -5396,26 +5269,26 @@ protected boolean setProperty(FaultToleranceConfigurationDefinition target, types = org.apache.camel.model.dataformat.FhirJsonDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "FHIR JSon", - description = "Marshall and unmarshall FHIR objects to/from JSON", + description = "Marshall and unmarshall FHIR objects to/from JSON.", deprecated = false, properties = { @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), - @YamlProperty(name = "dontEncodeElements", type = "string", description = "If provided, specifies the elements which should NOT be encoded. Multiple elements can be separated by comma.", displayName = "Dont Encode Elements"), - @YamlProperty(name = "dontStripVersionsFromReferencesAtPaths", type = "string", description = "If supplied value(s), any resource references at the specified paths will have their resource versions encoded instead of being automatically stripped during the encoding process. Multiple elements can be separated by comma.", displayName = "Dont Strip Versions From References At Paths"), - @YamlProperty(name = "encodeElements", type = "string", description = "If provided, specifies the elements which should be encoded, to the exclusion of all others. Multiple elements can be separated by comma.", displayName = "Encode Elements"), - @YamlProperty(name = "encodeElementsAppliesToChildResourcesOnly", type = "boolean", defaultValue = "false", description = "If set to true (default is false), the values supplied to setEncodeElements will not be applied to the root resource (typically a Bundle), but will be applied to any sub-resources contained within it.", displayName = "Encode Elements Applies To Child Resources Only"), - @YamlProperty(name = "fhirContext", type = "string", description = "To use a custom fhir context. Reference to object of type ca.uhn.fhir.context.FhirContext.", displayName = "Fhir Context"), - @YamlProperty(name = "fhirVersion", type = "enum:DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", defaultValue = "R4", description = "The version of FHIR to use. Possible values are: DSTU2, DSTU2_HL7ORG, DSTU2_1, DSTU3, R4, R5.", displayName = "Fhir Version"), - @YamlProperty(name = "forceResourceId", type = "string", description = "When encoding, force this resource ID to be encoded as the resource ID. Reference to object of type org.hl7.fhir.instance.model.api.IIdType.", displayName = "Force Resource Id"), + @YamlProperty(name = "dontEncodeElements", type = "string", description = "If provided, specifies the elements which should NOT be encoded. Multiple elements can be separated by comma when using String parameter. Valid values for this field would include: Patient - Don't encode patient and all its children Patient.name - Don't encode the patient's name Patient.name.family - Don't encode the patient's family name .text - Don't encode the text element on any resource (only the very first position may contain a wildcard) DSTU2 note: Note that values including meta, such as Patient.meta will work for DSTU2 parsers, but values with subelements on meta such as Patient.meta.lastUpdated will only work in DSTU3 mode.", displayName = "Dont Encode Elements"), + @YamlProperty(name = "dontStripVersionsFromReferencesAtPaths", type = "string", description = "If supplied value(s), any resource references at the specified paths will have their resource versions encoded instead of being automatically stripped during the encoding process. This setting has no effect on the parsing process. Multiple elements can be separated by comma when using String parameter. This method provides a finer-grained level of control than setStripVersionsFromReferences(String) and any paths specified by this method will be encoded even if setStripVersionsFromReferences(String) has been set to true (which is the default)", displayName = "Dont Strip Versions From References At Paths"), + @YamlProperty(name = "encodeElements", type = "string", description = "If provided, specifies the elements which should be encoded, to the exclusion of all others. Multiple elements can be separated by comma when using String parameter. Valid values for this field would include: Patient - Encode patient and all its children Patient.name - Encode only the patient's name Patient.name.family - Encode only the patient's family name .text - Encode the text element on any resource (only the very first position may contain a wildcard) .(mandatory) - This is a special case which causes any mandatory fields (min 0) to be encoded", displayName = "Encode Elements"), + @YamlProperty(name = "encodeElementsAppliesToChildResourcesOnly", type = "boolean", defaultValue = "false", description = "If set to true (default is false), the values supplied to setEncodeElements(Set) will not be applied to the root resource (typically a Bundle), but will be applied to any sub-resources contained within it (i.e. search result resources in that bundle)", displayName = "Encode Elements Applies To Child Resources Only"), + @YamlProperty(name = "fhirContext", type = "string", description = "To use a custom fhir context. Reference to object of type ca.uhn.fhir.context.FhirContext", displayName = "Fhir Context"), + @YamlProperty(name = "fhirVersion", type = "enum:DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", defaultValue = "R4", description = "The version of FHIR to use. Possible values are: DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", displayName = "Fhir Version"), + @YamlProperty(name = "forceResourceId", type = "string", description = "When encoding, force this resource ID to be encoded as the resource ID. Reference to object of type org.hl7.fhir.instance.model.api.IIdType", displayName = "Force Resource Id"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "omitResourceId", type = "boolean", defaultValue = "false", description = "If set to true (default is false) the ID of any resources being encoded will not be included in the output.", displayName = "Omit Resource Id"), - @YamlProperty(name = "overrideResourceIdWithBundleEntryFullUrl", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), the Bundle.entry.fullUrl will override the Bundle.entry.resource's resource id if the fullUrl is defined.", displayName = "Override Resource Id With Bundle Entry Full Url"), - @YamlProperty(name = "parserErrorHandler", type = "string", description = "Registers an error handler which will be invoked when any parse errors are found. Reference to object of type ca.uhn.fhir.parser.IParserErrorHandler.", displayName = "Parser Error Handler"), + @YamlProperty(name = "omitResourceId", type = "boolean", defaultValue = "false", description = "If set to true (default is false) the ID of any resources being encoded will not be included in the output. Note that this does not apply to contained resources, only to root resources. In other words, if this is set to true, contained resources will still have local IDs but the outer/containing ID will not have an ID.", displayName = "Omit Resource Id"), + @YamlProperty(name = "overrideResourceIdWithBundleEntryFullUrl", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), the Bundle.entry.fullUrl will override the Bundle.entry.resource's resource id if the fullUrl is defined. This behavior happens when parsing the source data into a Bundle object. Set this to false if this is not the desired behavior (e.g. the client code wishes to perform additional validation checks between the fullUrl and the resource id).", displayName = "Override Resource Id With Bundle Entry Full Url"), + @YamlProperty(name = "parserErrorHandler", type = "string", description = "Registers an error handler which will be invoked when any parse errors are found. Reference to object of type ca.uhn.fhir.parser.IParserErrorHandler", displayName = "Parser Error Handler"), @YamlProperty(name = "parserOptions", type = "string", description = "Sets the parser options object which will be used to supply default options to newly created parsers. Reference to object of type ca.uhn.fhir.context.ParserOptions.", displayName = "Parser Options"), - @YamlProperty(name = "preferTypes", type = "string", description = "If set (FQN class names), when parsing resources the parser will try to use the given types when possible. Multiple class names can be separated by comma.", displayName = "Prefer Types"), - @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "Sets the pretty print flag, meaning that the parser will encode resources with human-readable spacing and newlines between elements.", displayName = "Pretty Print"), + @YamlProperty(name = "preferTypes", type = "string", description = "If set (FQN class names), when parsing resources the parser will try to use the given types when possible, in the order that they are provided (from highest to lowest priority). For example, if a custom type which declares to implement the Patient resource is passed in here, and the parser is parsing a Bundle containing a Patient resource, the parser will use the given custom type. Multiple class names can be separated by comma.", displayName = "Prefer Types"), + @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "Sets the pretty print flag, meaning that the parser will encode resources with human-readable spacing and newlines between elements instead of condensing output as much as possible.", displayName = "Pretty Print"), @YamlProperty(name = "serverBaseUrl", type = "string", description = "Sets the server's base URL used by this parser. If a value is set, resource references will be turned into relative references if they are provided as absolute URLs but have a base matching the given base.", displayName = "Server Base Url"), - @YamlProperty(name = "stripVersionsFromReferences", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), resource references containing a version will have the version removed when the resource is encoded.", displayName = "Strip Versions From References"), + @YamlProperty(name = "stripVersionsFromReferences", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), resource references containing a version will have the version removed when the resource is encoded. This is generally good behaviour because in most situations, references from one resource to another should be to the resource by ID, not by ID and version. In some cases though, it may be desirable to preserve the version in resource links. In that case, this value should be set to false. This method provides the ability to globally disable reference encoding. If finer-grained control is needed, use setDontStripVersionsFromReferencesAtPaths(List)", displayName = "Strip Versions From References"), @YamlProperty(name = "summaryMode", type = "boolean", defaultValue = "false", description = "If set to true (default is false) only elements marked by the FHIR specification as being summary elements will be included.", displayName = "Summary Mode"), @YamlProperty(name = "suppressNarratives", type = "boolean", defaultValue = "false", description = "If set to true (default is false), narratives will not be included in the encoded values.", displayName = "Suppress Narratives") } @@ -5543,26 +5416,26 @@ protected boolean setProperty(FhirJsonDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.FhirXmlDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "FHIR XML", - description = "Marshall and unmarshall FHIR objects to/from XML", + description = "Marshall and unmarshall FHIR objects to/from XML.", deprecated = false, properties = { @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), - @YamlProperty(name = "dontEncodeElements", type = "string", description = "If provided, specifies the elements which should NOT be encoded. Multiple elements can be separated by comma.", displayName = "Dont Encode Elements"), - @YamlProperty(name = "dontStripVersionsFromReferencesAtPaths", type = "string", description = "If supplied value(s), any resource references at the specified paths will have their resource versions encoded instead of being automatically stripped during the encoding process. Multiple elements can be separated by comma.", displayName = "Dont Strip Versions From References At Paths"), - @YamlProperty(name = "encodeElements", type = "string", description = "If provided, specifies the elements which should be encoded, to the exclusion of all others. Multiple elements can be separated by comma.", displayName = "Encode Elements"), - @YamlProperty(name = "encodeElementsAppliesToChildResourcesOnly", type = "boolean", defaultValue = "false", description = "If set to true (default is false), the values supplied to setEncodeElements will not be applied to the root resource (typically a Bundle), but will be applied to any sub-resources contained within it.", displayName = "Encode Elements Applies To Child Resources Only"), - @YamlProperty(name = "fhirContext", type = "string", description = "To use a custom fhir context. Reference to object of type ca.uhn.fhir.context.FhirContext.", displayName = "Fhir Context"), - @YamlProperty(name = "fhirVersion", type = "enum:DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", defaultValue = "R4", description = "The version of FHIR to use. Possible values are: DSTU2, DSTU2_HL7ORG, DSTU2_1, DSTU3, R4, R5.", displayName = "Fhir Version"), - @YamlProperty(name = "forceResourceId", type = "string", description = "When encoding, force this resource ID to be encoded as the resource ID. Reference to object of type org.hl7.fhir.instance.model.api.IIdType.", displayName = "Force Resource Id"), + @YamlProperty(name = "dontEncodeElements", type = "string", description = "If provided, specifies the elements which should NOT be encoded. Multiple elements can be separated by comma when using String parameter. Valid values for this field would include: Patient - Don't encode patient and all its children Patient.name - Don't encode the patient's name Patient.name.family - Don't encode the patient's family name .text - Don't encode the text element on any resource (only the very first position may contain a wildcard) DSTU2 note: Note that values including meta, such as Patient.meta will work for DSTU2 parsers, but values with subelements on meta such as Patient.meta.lastUpdated will only work in DSTU3 mode.", displayName = "Dont Encode Elements"), + @YamlProperty(name = "dontStripVersionsFromReferencesAtPaths", type = "string", description = "If supplied value(s), any resource references at the specified paths will have their resource versions encoded instead of being automatically stripped during the encoding process. This setting has no effect on the parsing process. Multiple elements can be separated by comma when using String parameter. This method provides a finer-grained level of control than setStripVersionsFromReferences(String) and any paths specified by this method will be encoded even if setStripVersionsFromReferences(String) has been set to true (which is the default)", displayName = "Dont Strip Versions From References At Paths"), + @YamlProperty(name = "encodeElements", type = "string", description = "If provided, specifies the elements which should be encoded, to the exclusion of all others. Multiple elements can be separated by comma when using String parameter. Valid values for this field would include: Patient - Encode patient and all its children Patient.name - Encode only the patient's name Patient.name.family - Encode only the patient's family name .text - Encode the text element on any resource (only the very first position may contain a wildcard) .(mandatory) - This is a special case which causes any mandatory fields (min 0) to be encoded", displayName = "Encode Elements"), + @YamlProperty(name = "encodeElementsAppliesToChildResourcesOnly", type = "boolean", defaultValue = "false", description = "If set to true (default is false), the values supplied to setEncodeElements(Set) will not be applied to the root resource (typically a Bundle), but will be applied to any sub-resources contained within it (i.e. search result resources in that bundle)", displayName = "Encode Elements Applies To Child Resources Only"), + @YamlProperty(name = "fhirContext", type = "string", description = "To use a custom fhir context. Reference to object of type ca.uhn.fhir.context.FhirContext", displayName = "Fhir Context"), + @YamlProperty(name = "fhirVersion", type = "enum:DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", defaultValue = "R4", description = "The version of FHIR to use. Possible values are: DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", displayName = "Fhir Version"), + @YamlProperty(name = "forceResourceId", type = "string", description = "When encoding, force this resource ID to be encoded as the resource ID. Reference to object of type org.hl7.fhir.instance.model.api.IIdType", displayName = "Force Resource Id"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "omitResourceId", type = "boolean", defaultValue = "false", description = "If set to true (default is false) the ID of any resources being encoded will not be included in the output.", displayName = "Omit Resource Id"), - @YamlProperty(name = "overrideResourceIdWithBundleEntryFullUrl", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), the Bundle.entry.fullUrl will override the Bundle.entry.resource's resource id if the fullUrl is defined.", displayName = "Override Resource Id With Bundle Entry Full Url"), - @YamlProperty(name = "parserErrorHandler", type = "string", description = "Registers an error handler which will be invoked when any parse errors are found. Reference to object of type ca.uhn.fhir.parser.IParserErrorHandler.", displayName = "Parser Error Handler"), + @YamlProperty(name = "omitResourceId", type = "boolean", defaultValue = "false", description = "If set to true (default is false) the ID of any resources being encoded will not be included in the output. Note that this does not apply to contained resources, only to root resources. In other words, if this is set to true, contained resources will still have local IDs but the outer/containing ID will not have an ID.", displayName = "Omit Resource Id"), + @YamlProperty(name = "overrideResourceIdWithBundleEntryFullUrl", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), the Bundle.entry.fullUrl will override the Bundle.entry.resource's resource id if the fullUrl is defined. This behavior happens when parsing the source data into a Bundle object. Set this to false if this is not the desired behavior (e.g. the client code wishes to perform additional validation checks between the fullUrl and the resource id).", displayName = "Override Resource Id With Bundle Entry Full Url"), + @YamlProperty(name = "parserErrorHandler", type = "string", description = "Registers an error handler which will be invoked when any parse errors are found. Reference to object of type ca.uhn.fhir.parser.IParserErrorHandler", displayName = "Parser Error Handler"), @YamlProperty(name = "parserOptions", type = "string", description = "Sets the parser options object which will be used to supply default options to newly created parsers. Reference to object of type ca.uhn.fhir.context.ParserOptions.", displayName = "Parser Options"), - @YamlProperty(name = "preferTypes", type = "string", description = "If set (FQN class names), when parsing resources the parser will try to use the given types when possible. Multiple class names can be separated by comma.", displayName = "Prefer Types"), - @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "Sets the pretty print flag, meaning that the parser will encode resources with human-readable spacing and newlines between elements.", displayName = "Pretty Print"), + @YamlProperty(name = "preferTypes", type = "string", description = "If set (FQN class names), when parsing resources the parser will try to use the given types when possible, in the order that they are provided (from highest to lowest priority). For example, if a custom type which declares to implement the Patient resource is passed in here, and the parser is parsing a Bundle containing a Patient resource, the parser will use the given custom type. Multiple class names can be separated by comma.", displayName = "Prefer Types"), + @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "Sets the pretty print flag, meaning that the parser will encode resources with human-readable spacing and newlines between elements instead of condensing output as much as possible.", displayName = "Pretty Print"), @YamlProperty(name = "serverBaseUrl", type = "string", description = "Sets the server's base URL used by this parser. If a value is set, resource references will be turned into relative references if they are provided as absolute URLs but have a base matching the given base.", displayName = "Server Base Url"), - @YamlProperty(name = "stripVersionsFromReferences", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), resource references containing a version will have the version removed when the resource is encoded.", displayName = "Strip Versions From References"), + @YamlProperty(name = "stripVersionsFromReferences", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), resource references containing a version will have the version removed when the resource is encoded. This is generally good behaviour because in most situations, references from one resource to another should be to the resource by ID, not by ID and version. In some cases though, it may be desirable to preserve the version in resource links. In that case, this value should be set to false. This method provides the ability to globally disable reference encoding. If finer-grained control is needed, use setDontStripVersionsFromReferencesAtPaths(List)", displayName = "Strip Versions From References"), @YamlProperty(name = "summaryMode", type = "boolean", defaultValue = "false", description = "If set to true (default is false) only elements marked by the FHIR specification as being summary elements will be included.", displayName = "Summary Mode"), @YamlProperty(name = "suppressNarratives", type = "boolean", defaultValue = "false", description = "If set to true (default is false), narratives will not be included in the encoded values.", displayName = "Suppress Narratives") } @@ -5690,16 +5563,16 @@ protected boolean setProperty(FhirXmlDataFormat target, String propertyKey, types = org.apache.camel.model.FilterDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Filter", - description = "Filters messages using a predicate expression. Messages matching the predicate continue processing; non-matching messages are skipped.", + description = "Filter out messages based using a predicate", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The predicate expression to evaluate. Messages where the predicate returns false are filtered out and not routed further.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "statusPropertyName", type = "string", description = "Name of an exchange property to store whether the filter predicate matched or not. The value is stored as a boolean.", displayName = "Status Property Name"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to determine if the message should be filtered or not. If the expression returns an empty value or false then the message is filtered (dropped), otherwise the message is continued being routed.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "statusPropertyName", type = "string", description = "Name of exchange property to use for storing the status of the filtering. Setting this allows to know if the filter predicate evaluated as true or false.", displayName = "Status Property Name"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -5774,13 +5647,13 @@ protected boolean setProperty(FilterDefinition target, String propertyKey, types = org.apache.camel.model.FinallyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Do Finally", - description = "Defines steps to always execute after a doTry block completes, regardless of whether an exception was thrown or caught", + description = "Path traversed when a try, catch, finally block exits", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -5836,17 +5709,17 @@ protected boolean setProperty(FinallyDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.FlatpackDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Flatpack", - description = "Marshal and unmarshal Java lists and maps to/from flat files (such as CSV, delimited, or fixed length formats) using Flatpack library", + description = "Marshal and unmarshal Java lists and maps to/from flat files (such as CSV, delimited, or fixed length formats) using Flatpack library.", deprecated = false, properties = { - @YamlProperty(name = "allowShortLines", type = "boolean", defaultValue = "false", description = "Allows for lines to be shorter than expected and ignores the extra characters.", displayName = "Allow Short Lines"), + @YamlProperty(name = "allowShortLines", type = "boolean", defaultValue = "false", description = "Allows for lines to be shorter than expected and ignores the extra characters", displayName = "Allow Short Lines"), @YamlProperty(name = "definition", type = "string", description = "The flatpack pzmap configuration file. Can be omitted in simpler situations, but its preferred to use the pzmap.", displayName = "Definition"), - @YamlProperty(name = "delimiter", type = "string", defaultValue = ",", description = "The delimiter char (could be ; , or similar).", displayName = "Delimiter"), - @YamlProperty(name = "fixed", type = "boolean", defaultValue = "false", description = "Delimited or fixed. Is by default false = delimited.", displayName = "Fixed"), + @YamlProperty(name = "delimiter", type = "string", defaultValue = ",", description = "The delimiter char (could be ; , or similar)", displayName = "Delimiter"), + @YamlProperty(name = "fixed", type = "boolean", defaultValue = "false", description = "Delimited or fixed. Is by default false = delimited", displayName = "Fixed"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "ignoreExtraColumns", type = "boolean", defaultValue = "false", description = "Allows for lines to be longer than expected and ignores the extra characters.", displayName = "Ignore Extra Columns"), @YamlProperty(name = "ignoreFirstRecord", type = "boolean", defaultValue = "true", description = "Whether the first line is ignored for delimited files (for the column headers). Is by default true.", displayName = "Ignore First Record"), - @YamlProperty(name = "parserFactory", type = "string", description = "References to a custom parser factory to lookup in the registry.", displayName = "Parser Factory"), + @YamlProperty(name = "parserFactory", type = "string", description = "References to a custom parser factory to lookup in the registry", displayName = "Parser Factory"), @YamlProperty(name = "textQualifier", type = "string", description = "If the text is qualified with a character. Uses quote character by default.", displayName = "Text Qualifier") } ) @@ -5986,32 +5859,32 @@ protected boolean setProperty(ForyDataFormat target, String propertyKey, types = org.apache.camel.model.rest.GetDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Get", - description = "Defines an HTTP GET operation in the REST DSL", + description = "Rest GET command", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. The default value is true.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), @YamlProperty(name = "deprecated", type = "boolean", defaultValue = "false", description = "Marks this rest operation as deprecated in OpenApi documentation.", displayName = "Deprecated"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data. This option will override what may be configured on a parent level.", displayName = "Out Type"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), @YamlProperty(name = "param", type = "array:org.apache.camel.model.rest.ParamDefinition", description = "Information about parameters for this REST operation", displayName = "Param"), @YamlProperty(name = "path", type = "string", description = "The path mapping URIs of this REST operation such as /{id}.", displayName = "Path"), - @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), @YamlProperty(name = "responseMessage", type = "array:org.apache.camel.model.rest.ResponseMessageDefinition", description = "Response details for this REST operation", displayName = "Response Message"), - @YamlProperty(name = "routeId", type = "string", description = "The route id this REST service will refer to.", displayName = "Route Id"), + @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), @YamlProperty(name = "security", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Security settings for this REST operation", displayName = "Security"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "streamCache", type = "boolean", defaultValue = "false", description = "Whether stream caching is enabled on this rest operation.", displayName = "Stream Cache"), @YamlProperty(name = "to", type = "object:org.apache.camel.model.ToDefinition", description = "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", displayName = "To"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data. This option will override what may be configured on a parent level.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") } ) public static class GetDefinitionDeserializer extends YamlDeserializerBase { @@ -6157,7 +6030,7 @@ protected boolean setProperty(GetDefinition target, String propertyKey, String p types = org.apache.camel.model.GlobalOptionDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Global Option", - description = "Defines a single global configuration option as a key/value pair for the CamelContext", + description = "Models a string key/value pair for configuring some global options on a Camel context such as max debug log length.", deprecated = false, properties = { @YamlProperty(name = "key", type = "string", required = true, description = "Global option key", displayName = "Key"), @@ -6202,9 +6075,9 @@ protected boolean setProperty(GlobalOptionDefinition target, String propertyKey, types = org.apache.camel.model.GlobalOptionsDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Global Options", - description = "Defines a collection of global configuration options for the CamelContext", + description = "Models a series of string key/value pairs for configuring some global options on a Camel context such as max debug log length.", deprecated = false, - properties = @YamlProperty(name = "globalOption", type = "array:org.apache.camel.model.GlobalOptionDefinition", description = "A series of global options as key value pairs.", displayName = "Global Option") + properties = @YamlProperty(name = "globalOption", type = "array:org.apache.camel.model.GlobalOptionDefinition", description = "A series of global options as key value pairs", displayName = "Global Option") ) public static class GlobalOptionsDefinitionDeserializer extends YamlDeserializerBase { public GlobalOptionsDefinitionDeserializer() { @@ -6239,14 +6112,14 @@ protected boolean setProperty(GlobalOptionsDefinition target, String propertyKey types = org.apache.camel.model.dataformat.GrokDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Grok", - description = "Unmarshal unstructured data to objects using Logstash based Grok patterns", + description = "Unmarshal unstructured data to objects using Logstash based Grok patterns.", deprecated = false, properties = { - @YamlProperty(name = "allowMultipleMatchesPerLine", type = "boolean", defaultValue = "true", description = "Whether to allow multiple matches per line. If false, every line of input is matched for the pattern only once. Otherwise the line can be scanned multiple times when a non-terminal pattern is used.", displayName = "Allow Multiple Matches Per Line"), - @YamlProperty(name = "flattened", type = "boolean", defaultValue = "false", description = "Whether to use flattened mode. In flattened mode an exception is thrown when there are multiple pattern matches with the same key.", displayName = "Flattened"), + @YamlProperty(name = "allowMultipleMatchesPerLine", type = "boolean", defaultValue = "true", description = "If false, every line of input is matched for pattern only once. Otherwise the line can be scanned multiple times when non-terminal pattern is used.", displayName = "Allow Multiple Matches Per Line"), + @YamlProperty(name = "flattened", type = "boolean", defaultValue = "false", description = "Turns on flattened mode. In flattened mode the exception is thrown when there are multiple pattern matches with same key.", displayName = "Flattened"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "namedOnly", type = "boolean", defaultValue = "false", description = "Whether to capture named expressions only or not (i.e. %{IP:ip} but not ${IP}).", displayName = "Named Only"), - @YamlProperty(name = "pattern", type = "string", required = true, description = "The grok pattern to match lines of input.", displayName = "Pattern") + @YamlProperty(name = "namedOnly", type = "boolean", defaultValue = "false", description = "Whether to capture named expressions only or not (i.e. %{IP:ip} but not ${IP})", displayName = "Named Only"), + @YamlProperty(name = "pattern", type = "string", required = true, description = "The grok pattern to match lines of input", displayName = "Pattern") } ) public static class GrokDataFormatDeserializer extends YamlDeserializerBase { @@ -6303,13 +6176,13 @@ protected boolean setProperty(GrokDataFormat target, String propertyKey, types = org.apache.camel.model.language.GroovyExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Groovy", - description = "Evaluates a Groovy script", + description = "Evaluates a Groovy script.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class GroovyExpressionDeserializer extends YamlDeserializerBase { @@ -6374,11 +6247,11 @@ protected boolean setProperty(GroovyExpression target, String propertyKey, types = org.apache.camel.model.dataformat.GroovyJSonDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Groovy JSon", - description = "Transform between JSon and java.util.Map or java.util.List objects", + description = "Transform between JSon and java.util.Map or java.util.List objects.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "true", description = "Whether to pretty print output nicely formatted.", displayName = "Pretty Print") + @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "true", description = "To pretty printing output nicely formatted. Is by default true.", displayName = "Pretty Print") } ) public static class GroovyJSonDataFormatDeserializer extends YamlDeserializerBase { @@ -6419,10 +6292,10 @@ protected boolean setProperty(GroovyJSonDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.GroovyXmlDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Groovy XML", - description = "Transform between XML and Groovy Node (Map structure) objects", + description = "Transform between XML and Groovy Node (Map structure) objects.", deprecated = false, properties = { - @YamlProperty(name = "attributeMapping", type = "boolean", defaultValue = "true", description = "Whether to enable attribute mapping. When enabled, keys that start with _ or character will be mapped to an XML attribute, and vice versa.", displayName = "Attribute Mapping"), + @YamlProperty(name = "attributeMapping", type = "boolean", defaultValue = "true", description = "To turn on or off attribute mapping. When enabled then keys that start with _ or character will be mapped to an XML attribute, and vise versa. This rule is what Jackson and other XML or JSon libraries uses.", displayName = "Attribute Mapping"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") } ) @@ -6464,7 +6337,7 @@ protected boolean setProperty(GroovyXmlDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.GzipDeflaterDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "GZip Deflater", - description = "Compress and decompress messages using java.util.zip.GZIP*Stream", + description = "Compress and decompress messages using java.util.zip.GZIPStream.", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -6501,13 +6374,12 @@ protected boolean setProperty(GzipDeflaterDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.HL7DataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "HL7", - description = "Marshal and unmarshal HL7 (Health Care) model objects using the HL7 MLLP codec", + description = "Marshal and unmarshal HL7 (Health Care) model objects using the HL7 MLLP codec.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "parser", type = "string", description = "To use a custom HL7 parser.", displayName = "Parser"), - @YamlProperty(name = "targetFormat", type = "enum:XML", description = "The target format for marshal output and unmarshal result type. By default, marshal encodes to HL7 ER7 and unmarshal returns a HAPI Message object. If set to XML, marshal encodes to HL7 XML and unmarshal returns an XML DOM Document.", displayName = "Target Format"), - @YamlProperty(name = "validate", type = "boolean", defaultValue = "true", description = "Whether to validate the HL7 message.", displayName = "Validate") + @YamlProperty(name = "parser", type = "string", description = "To use a custom HL7 parser", displayName = "Parser"), + @YamlProperty(name = "validate", type = "boolean", defaultValue = "true", description = "Whether to validate the HL7 message Is by default true.", displayName = "Validate") } ) public static class HL7DataFormatDeserializer extends YamlDeserializerBase { @@ -6535,11 +6407,6 @@ protected boolean setProperty(HL7DataFormat target, String propertyKey, String p target.setParser(val); break; } - case "targetFormat": { - String val = asText(node); - target.setTargetFormat(val); - break; - } case "validate": { String val = asText(node); target.setValidate(val); @@ -6558,32 +6425,32 @@ protected boolean setProperty(HL7DataFormat target, String propertyKey, String p types = org.apache.camel.model.rest.HeadDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Head", - description = "Defines an HTTP HEAD operation in the REST DSL", + description = "Rest HEAD command", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. The default value is true.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), @YamlProperty(name = "deprecated", type = "boolean", defaultValue = "false", description = "Marks this rest operation as deprecated in OpenApi documentation.", displayName = "Deprecated"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data. This option will override what may be configured on a parent level.", displayName = "Out Type"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), @YamlProperty(name = "param", type = "array:org.apache.camel.model.rest.ParamDefinition", description = "Information about parameters for this REST operation", displayName = "Param"), @YamlProperty(name = "path", type = "string", description = "The path mapping URIs of this REST operation such as /{id}.", displayName = "Path"), - @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), @YamlProperty(name = "responseMessage", type = "array:org.apache.camel.model.rest.ResponseMessageDefinition", description = "Response details for this REST operation", displayName = "Response Message"), - @YamlProperty(name = "routeId", type = "string", description = "The route id this REST service will refer to.", displayName = "Route Id"), + @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), @YamlProperty(name = "security", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Security settings for this REST operation", displayName = "Security"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "streamCache", type = "boolean", defaultValue = "false", description = "Whether stream caching is enabled on this rest operation.", displayName = "Stream Cache"), @YamlProperty(name = "to", type = "object:org.apache.camel.model.ToDefinition", description = "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", displayName = "To"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data. This option will override what may be configured on a parent level.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") } ) public static class HeadDefinitionDeserializer extends YamlDeserializerBase { @@ -6730,12 +6597,12 @@ protected boolean setProperty(HeadDefinition target, String propertyKey, types = org.apache.camel.model.language.HeaderExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Header", - description = "Gets a header from the Exchange", + description = "Gets a header from the Exchange.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class HeaderExpressionDeserializer extends YamlDeserializerBase { @@ -6796,14 +6663,14 @@ protected boolean setProperty(HeaderExpression target, String propertyKey, types = org.apache.camel.model.language.Hl7TerserExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "HL7 Terser", - description = "Get the value of a HL7 message field specified by terse location specification syntax", + description = "Get the value of a HL7 message field specified by terse location specification syntax.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class Hl7TerserExpressionDeserializer extends YamlDeserializerBase { @@ -6873,11 +6740,11 @@ protected boolean setProperty(Hl7TerserExpression target, String propertyKey, types = org.apache.camel.model.dataformat.IcalDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "iCal", - description = "Marshal and unmarshal iCal (*.ics) documents to/from model objects", + description = "Marshal and unmarshal iCal (.ics) documents to/from model objects.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "validating", type = "boolean", defaultValue = "false", description = "Whether to validate the iCal document.", displayName = "Validating") + @YamlProperty(name = "validating", type = "boolean", defaultValue = "false", description = "Whether to validate.", displayName = "Validating") } ) public static class IcalDataFormatDeserializer extends YamlDeserializerBase { @@ -6918,20 +6785,20 @@ protected boolean setProperty(IcalDataFormat target, String propertyKey, types = org.apache.camel.model.IdempotentConsumerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Idempotent Consumer", - description = "Filters out duplicate messages based on a unique message identifier and an idempotent repository that tracks previously seen IDs", + description = "Filters out duplicate messages", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "completionEager", type = "boolean", defaultValue = "false", description = "Sets whether to complete the idempotent consumer eager or when the exchange is done.", displayName = "Completion Eager"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "completionEager", type = "boolean", defaultValue = "false", description = "Sets whether to complete the idempotent consumer eager or when the exchange is done. If this option is true to complete eager, then the idempotent consumer will trigger its completion when the exchange reached the end of the block of the idempotent consumer pattern. So if the exchange is continued routed after the block ends, then whatever happens there does not affect the state. If this option is false (default) to not complete eager, then the idempotent consumer will complete when the exchange is done being routed. So if the exchange is continued routed after the block ends, then whatever happens there also affect the state. For example if the exchange failed due to an exception, then the state of the idempotent consumer will be a rollback.", displayName = "Completion Eager"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), @YamlProperty(name = "eager", type = "boolean", 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.", displayName = "Eager"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression to compute the unique message ID used for duplicate detection. Messages with the same ID are treated as duplicates and skipped.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "idempotentRepository", type = "string", required = true, description = "Sets the reference name of the message id repository to use for storing processed message ids to detect duplicates.", displayName = "Idempotent Repository"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression used to calculate the correlation key to use for duplicate check. The Exchange which has the same correlation key is regarded as a duplicate and will be rejected.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "idempotentRepository", type = "string", required = true, description = "Sets the reference name of the message id repository", displayName = "Idempotent Repository"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "removeOnFailure", type = "boolean", defaultValue = "true", description = "Sets whether to remove or keep the key on failure. The default behavior is to remove the key on failure.", displayName = "Remove On Failure"), - @YamlProperty(name = "skipDuplicate", type = "boolean", defaultValue = "true", description = "Sets whether to skip duplicates or not. The default behavior is to skip duplicates.", displayName = "Skip Duplicate"), + @YamlProperty(name = "skipDuplicate", type = "boolean", defaultValue = "true", description = "Sets whether to skip duplicates or not. The default behavior is to skip duplicates. A duplicate message would have the Exchange property org.apache.camel.Exchange#DUPLICATE_MESSAGE set to a Boolean#TRUE value. A none duplicate message will not have this property set.", displayName = "Skip Duplicate"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -7026,14 +6893,14 @@ protected boolean setProperty(IdempotentConsumerDefinition target, String proper types = org.apache.camel.model.InputTypeDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Input Type", - description = "Declares the expected input data type for a route. Camel will apply a data type transformer if the actual message type differs at runtime.", + description = "Set the expected data type of the input message. If the actual message type is different at runtime, camel look for a required Transformer and apply if exists. If validate attribute is true then camel applies Validator as well. Type name consists of two parts, 'scheme' and 'name' connected with ':'. For Java type 'name' is a fully qualified class name. For example {code java:java.lang.String} , {code json:ABCOrder} . It's also possible to specify only scheme part, so that it works like a wildcard. If only 'xml' is specified, all the XML message matches. It's handy to add only one transformer/validator for all the transformation from/to XML.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "urn", type = "string", required = true, description = "The input type URN in the format 'scheme:name' (e.g. 'java:com.example.MyClass' or 'json:JsonOrder'). Declares the expected data type for messages consumed by this route.", displayName = "Urn"), - @YamlProperty(name = "validate", type = "boolean", defaultValue = "false", description = "Whether validation is required for this input type.", displayName = "Validate") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "urn", type = "string", required = true, description = "The input type URN.", displayName = "Urn"), + @YamlProperty(name = "validate", type = "boolean", defaultValue = "false", description = "Whether if validation is required for this input type.", displayName = "Validate") } ) public static class InputTypeDefinitionDeserializer extends YamlDeserializerBase { @@ -7090,13 +6957,13 @@ protected boolean setProperty(InputTypeDefinition target, String propertyKey, types = org.apache.camel.model.InterceptDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Intercept", - description = "Intercepts each message at every processing step in the route, allowing cross-cutting logic such as logging or auditing", + description = "Intercepts a message at each step in the route", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "To use an expression to only trigger intercepting in specific situations", displayName = "On When"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } @@ -7160,16 +7027,16 @@ protected boolean setProperty(InterceptDefinition target, String propertyKey, types = org.apache.camel.model.InterceptFromDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Intercept From", - description = "Intercepts incoming messages arriving from consumer endpoints, optionally filtering by endpoint URI pattern", + description = "Intercepts incoming messages", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "To use an expression to only trigger intercepting in specific situations", displayName = "On When"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), - @YamlProperty(name = "uri", type = "string", description = "Intercept incoming messages from the uri or uri pattern. If not configured, then all incoming messages are intercepted.", displayName = "Uri") + @YamlProperty(name = "uri", type = "string", description = "Intercept incoming messages from the uri or uri pattern. If this option is not configured, then all incoming messages is intercepted.", displayName = "Uri") } ) public static class InterceptFromDefinitionDeserializer extends YamlDeserializerBase { @@ -7241,16 +7108,16 @@ protected boolean setProperty(InterceptFromDefinition target, String propertyKey types = org.apache.camel.model.InterceptSendToEndpointDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Intercept Send To Endpoint", - description = "Intercepts messages being sent to a specific endpoint, allowing the message to be modified or the send to be skipped", + description = "Intercepts messages being sent to an endpoint", deprecated = false, properties = { @YamlProperty(name = "afterUri", type = "string", description = "After sending to the endpoint then send the message to this uri which allows to process its result.", displayName = "After Uri"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "To use an expression to only trigger intercepting sending to an endpoint in specific situations", displayName = "On When"), - @YamlProperty(name = "skipSendToOriginalEndpoint", type = "boolean", defaultValue = "false", description = "Whether to skip sending the message to the original endpoint. By default, the message is both intercepted and then sent to the original endpoint.", displayName = "Skip Send To Original Endpoint"), + @YamlProperty(name = "skipSendToOriginalEndpoint", type = "string", description = "If set to true then the message is not sent to the original endpoint. By default (false) the message is both intercepted and then sent to the original endpoint.", displayName = "Skip Send To Original Endpoint"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), @YamlProperty(name = "uri", type = "string", required = true, description = "Intercept sending to the uri or uri pattern.", displayName = "Uri") } @@ -7332,7 +7199,7 @@ protected boolean setProperty(InterceptSendToEndpointDefinition target, String p types = org.apache.camel.model.dataformat.Iso8583DataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "ISO-8583", - description = "Create, edit and read ISO-8583 messages", + description = "Create, edit and read ISO-8583 messages.", deprecated = false, properties = { @YamlProperty(name = "allowAutoWiredMessageFormat", type = "boolean", defaultValue = "true", description = "Whether to auto-discover com.solab.iso8583.MessageFactory from the registry", displayName = "Allow Auto Wired Message Format"), @@ -7389,26 +7256,26 @@ protected boolean setProperty(Iso8583DataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.JacksonXMLDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Jackson XML", - description = "Unmarshal an XML payloads to POJOs and back using XMLMapper extension of Jackson", + description = "Unmarshal an XML payloads to POJOs and back using XMLMapper extension of Jackson.", deprecated = false, properties = { - @YamlProperty(name = "allowJmsType", type = "boolean", defaultValue = "false", description = "Whether to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", displayName = "Allow Jms Type"), - @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "Whether to allow Jackson to use the CamelJacksonUnmarshalType header during unmarshalling. Should only be enabled when desired.", displayName = "Allow Unmarshall Type"), - @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows using different collection types than java.util.Collection based as default.", displayName = "Collection Type"), + @YamlProperty(name = "allowJmsType", type = "boolean", defaultValue = "false", description = "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", displayName = "Allow Jms Type"), + @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used.", displayName = "Allow Unmarshall Type"), + @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", displayName = "Collection Type"), @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), - @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from SerializationFeature, DeserializationFeature, or MapperFeature. Multiple features can be separated by comma.", displayName = "Disable Features"), - @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from SerializationFeature, DeserializationFeature, or MapperFeature. Multiple features can be separated by comma.", displayName = "Enable Features"), - @YamlProperty(name = "enableJaxbAnnotationModule", type = "boolean", defaultValue = "false", description = "Whether to enable the JAXB annotations module when using Jackson. When enabled then JAXB annotations can be used by Jackson.", displayName = "Enable Jaxb Annotation Module"), + @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Disable Features"), + @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Enable Features"), + @YamlProperty(name = "enableJaxbAnnotationModule", type = "boolean", defaultValue = "false", description = "Whether to enable the JAXB annotations module when using jackson. When enabled then JAXB annotations can be used by Jackson.", displayName = "Enable Jaxb Annotation Module"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "include", type = "string", description = "If you want to marshal a POJO to JSON, and the POJO has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL.", displayName = "Include"), - @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations.", displayName = "Json View"), - @YamlProperty(name = "maxStringLength", type = "number", description = "Maximum allowed string length when deserializing (in chars or bytes, depending on input context). The default is 20,000,000.", displayName = "Max String Length"), + @YamlProperty(name = "include", type = "string", description = "If you want to marshal a pojo to JSON, and the pojo has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL", displayName = "Include"), + @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations", displayName = "Json View"), + @YamlProperty(name = "maxStringLength", type = "number", description = "Sets the maximum string length (in chars or bytes, depending on input context). The default is 20,000,000. This limit is not exact, the limit is applied when we increase internal buffer sizes and an exception will happen at sizes greater than this limit. Some text values that are a little bigger than the limit may be treated as valid but no text values with sizes less than or equal to this limit will be treated as invalid.", displayName = "Max String Length"), @YamlProperty(name = "moduleClassNames", type = "string", description = "To use custom Jackson modules com.fasterxml.jackson.databind.Module specified as a String with FQN class names. Multiple classes can be separated by comma.", displayName = "Module Class Names"), @YamlProperty(name = "moduleRefs", type = "string", description = "To use custom Jackson modules referred from the Camel registry. Multiple modules can be separated by comma.", displayName = "Module Refs"), - @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "Whether to enable pretty printing output nicely formatted. Is by default false.", displayName = "Pretty Print"), + @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "To enable pretty printing output nicely formatted. Is by default false.", displayName = "Pretty Print"), @YamlProperty(name = "timezone", type = "string", description = "If set then Jackson will use the Timezone when marshalling/unmarshalling.", displayName = "Timezone"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling.", displayName = "Unmarshal Type"), - @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "Whether to unmarshal to a List of Map or a List of Pojo.", displayName = "Use List"), + @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling", displayName = "Unmarshal Type"), + @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "To unmarshal to a List of Map or a List of Pojo.", displayName = "Use List"), @YamlProperty(name = "xmlMapper", type = "string", description = "Lookup and use the existing XmlMapper with the given id.", displayName = "Xml Mapper") } ) @@ -7531,15 +7398,15 @@ protected boolean setProperty(JacksonXMLDataFormat target, String propertyKey, types = org.apache.camel.model.language.JavaExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Java", - description = "Evaluates a Java (Java compiled once at runtime) expression", + description = "Evaluates a Java (Java compiled once at runtime) expression.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), @YamlProperty(name = "preCompile", type = "boolean", defaultValue = "true", description = "Whether the expression should be pre compiled once during initialization phase. If this is turned off, then the expression is reloaded and compiled on each evaluation.", displayName = "Pre Compile"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), @YamlProperty(name = "singleQuotes", type = "boolean", defaultValue = "true", description = "Whether single quotes can be used as replacement for double quotes. This is convenient when you need to work with strings inside strings.", displayName = "Single Quotes"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class JavaExpressionDeserializer extends YamlDeserializerBase { @@ -7615,13 +7482,13 @@ protected boolean setProperty(JavaExpression target, String propertyKey, types = org.apache.camel.model.language.JavaScriptExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "JavaScript", - description = "Evaluates a JavaScript expression", + description = "Evaluates a JavaScript expression.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class JavaScriptExpressionDeserializer extends YamlDeserializerBase { @@ -7686,29 +7553,29 @@ protected boolean setProperty(JavaScriptExpression target, String propertyKey, types = org.apache.camel.model.dataformat.JaxbDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "JAXB", - description = "Unmarshal XML payloads to POJOs and back using JAXB2 XML marshalling standard", + description = "Unmarshal XML payloads to POJOs and back using JAXB2 XML marshalling standard.", deprecated = false, properties = { - @YamlProperty(name = "accessExternalSchemaProtocols", type = "string", description = "Only in use if schema validation has been enabled. Restrict access to the protocols specified for external reference set by the schemaLocation attribute, Import and Include element.", displayName = "Access External Schema Protocols"), + @YamlProperty(name = "accessExternalSchemaProtocols", type = "string", description = "Only in use if schema validation has been enabled. Restrict access to the protocols specified for external reference set by the schemaLocation attribute, Import and Include element. Examples of protocols are file, http, jar:file. empty, false or none to deny all access to external references; a specific protocol, such as file, to give permission to only the protocol; the keyword all to grant permission to all protocols.", displayName = "Access External Schema Protocols"), @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), @YamlProperty(name = "contextPath", type = "string", required = true, description = "Package name where your JAXB classes are located.", displayName = "Context Path"), @YamlProperty(name = "contextPathIsClassName", type = "boolean", defaultValue = "false", description = "This can be set to true to mark that the contextPath is referring to a classname and not a package name.", displayName = "Context Path Is Class Name"), - @YamlProperty(name = "encoding", type = "string", description = "To overrule and use a specific encoding.", displayName = "Encoding"), - @YamlProperty(name = "filterNonXmlChars", type = "boolean", defaultValue = "false", description = "To ignore non xml characters and replace them with an empty space.", displayName = "Filter Non Xml Chars"), - @YamlProperty(name = "fragment", type = "boolean", defaultValue = "false", description = "To turn on marshalling XML fragment trees. This is useful when generated code does not have XmlRootElement annotation and you need to unmarshall only part of the tree.", displayName = "Fragment"), + @YamlProperty(name = "encoding", type = "string", description = "To overrule and use a specific encoding", displayName = "Encoding"), + @YamlProperty(name = "filterNonXmlChars", type = "boolean", defaultValue = "false", description = "To ignore non xml characheters and replace them with an empty space.", displayName = "Filter Non Xml Chars"), + @YamlProperty(name = "fragment", type = "boolean", defaultValue = "false", description = "To turn on marshalling XML fragment trees. By default JAXB looks for XmlRootElement annotation on given class to operate on whole XML tree. This is useful but not always - sometimes generated code does not have XmlRootElement annotation, sometimes you need unmarshall only part of tree. In that case you can use partial unmarshalling. To enable this behaviours you need set property partClass. Camel will pass this class to JAXB's unmarshaler.", displayName = "Fragment"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "ignoreJAXBElement", type = "boolean", defaultValue = "true", description = "Whether to ignore JAXBElement elements - only needed to be set to false in very special use-cases.", displayName = "Ignore JAXBElement"), @YamlProperty(name = "jaxbProviderProperties", type = "string", description = "Refers to a custom java.util.Map to lookup in the registry containing custom JAXB provider properties to be used with the JAXB marshaller.", displayName = "Jaxb Provider Properties"), - @YamlProperty(name = "mustBeJAXBElement", type = "boolean", defaultValue = "false", description = "Whether marshalling must be java objects with JAXB annotations. And if not then it fails. This option can be set to false to relax that, such as when the data is already in XML format.", displayName = "Must Be JAXBElement"), + @YamlProperty(name = "mustBeJAXBElement", type = "boolean", defaultValue = "false", description = "Whether marhsalling must be java objects with JAXB annotations. And if not then it fails. This option can be set to false to relax that, such as when the data is already in XML format.", displayName = "Must Be JAXBElement"), @YamlProperty(name = "namespacePrefix", type = "string", description = "When marshalling using JAXB or SOAP then the JAXB implementation will automatically assign namespace prefixes, such as ns2, ns3, ns4 etc. To control this mapping, Camel allows you to refer to a map which contains the desired mapping.", displayName = "Namespace Prefix"), - @YamlProperty(name = "noNamespaceSchemaLocation", type = "string", description = "To define the location of the namespaceless schema.", displayName = "No Namespace Schema Location"), - @YamlProperty(name = "objectFactory", type = "boolean", defaultValue = "true", description = "Whether to allow using ObjectFactory classes to create the POJO classes during marshalling.", displayName = "Object Factory"), - @YamlProperty(name = "partClass", type = "string", description = "Name of class used for fragment parsing.", displayName = "Part Class"), - @YamlProperty(name = "partNamespace", type = "string", description = "XML namespace to use for fragment parsing.", displayName = "Part Namespace"), + @YamlProperty(name = "noNamespaceSchemaLocation", type = "string", description = "To define the location of the namespaceless schema", displayName = "No Namespace Schema Location"), + @YamlProperty(name = "objectFactory", type = "boolean", defaultValue = "true", description = "Whether to allow using ObjectFactory classes to create the POJO classes during marshalling. This only applies to POJO classes that has not been annotated with JAXB and providing jaxb.index descriptor files.", displayName = "Object Factory"), + @YamlProperty(name = "partClass", type = "string", description = "Name of class used for fragment parsing. See more details at the fragment option.", displayName = "Part Class"), + @YamlProperty(name = "partNamespace", type = "string", description = "XML namespace to use for fragment parsing. See more details at the fragment option.", displayName = "Part Namespace"), @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "true", description = "To enable pretty printing output nicely formatted. Is by default false.", displayName = "Pretty Print"), - @YamlProperty(name = "schema", type = "string", description = "To validate against an existing schema. You can use the prefix classpath:, file: or http: to specify how the resource should be resolved. You can separate multiple schema files by using the comma character.", displayName = "Schema"), - @YamlProperty(name = "schemaLocation", type = "string", description = "To define the location of the schema.", displayName = "Schema Location"), - @YamlProperty(name = "schemaSeverityLevel", type = "enum:0,1,2", defaultValue = "0", description = "Sets the schema severity level to use when validating against a schema. The default value of 0 (warning) means that any error will trigger JAXB to stop. There are the following three levels: 0=warning, 1=error, 2=fatal error.", displayName = "Schema Severity Level"), + @YamlProperty(name = "schema", type = "string", description = "To validate against an existing schema. Your can use the prefix classpath:, file: or http: to specify how the resource should be resolved. You can separate multiple schema files by using the ',' character.", displayName = "Schema"), + @YamlProperty(name = "schemaLocation", type = "string", description = "To define the location of the schema", displayName = "Schema Location"), + @YamlProperty(name = "schemaSeverityLevel", type = "enum:0,1,2", defaultValue = "0", description = "Sets the schema severity level to use when validating against a schema. This level determines the minimum severity error that triggers JAXB to stop continue parsing. The default value of 0 (warning) means that any error (warning, error or fatal error) will trigger JAXB to stop. There are the following three levels: 0=warning, 1=error, 2=fatal error.", displayName = "Schema Severity Level"), @YamlProperty(name = "xmlStreamWriterWrapper", type = "string", description = "To use a custom xml stream writer.", displayName = "Xml Stream Writer Wrapper") } ) @@ -7846,15 +7713,15 @@ protected boolean setProperty(JaxbDataFormat target, String propertyKey, types = org.apache.camel.model.language.JoorExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "jOOR", - description = "Evaluates a jOOR (Java compiled once at runtime) expression", + description = "Evaluates a jOOR (Java compiled once at runtime) expression.", deprecated = true, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), @YamlProperty(name = "preCompile", type = "boolean", defaultValue = "true", description = "Whether the expression should be pre compiled once during initialization phase. If this is turned off, then the expression is reloaded and compiled on each evaluation.", displayName = "Pre Compile"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), @YamlProperty(name = "singleQuotes", type = "boolean", defaultValue = "true", description = "Whether single quotes can be used as replacement for double quotes. This is convenient when you need to work with strings inside strings.", displayName = "Single Quotes"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class JoorExpressionDeserializer extends YamlDeserializerBase { @@ -7930,14 +7797,14 @@ protected boolean setProperty(JoorExpression target, String propertyKey, types = org.apache.camel.model.language.JqExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "JQ", - description = "Evaluates a JQ expression against a JSON message body", + description = "Evaluates a JQ expression against a JSON message body.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class JqExpressionDeserializer extends YamlDeserializerBase { @@ -8007,7 +7874,7 @@ protected boolean setProperty(JqExpression target, String propertyKey, String pr types = org.apache.camel.model.dataformat.JsonApiDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "JSonApi", - description = "Marshal and unmarshal JSON:API resources using JSONAPI-Converter library", + description = "Marshal and unmarshal JSON:API resources using JSONAPI-Converter library.", deprecated = false, properties = { @YamlProperty(name = "dataFormatTypes", type = "string", description = "The classes to take into account for the marshalling. Multiple classes can be separated by comma.", displayName = "Data Format Types"), @@ -8058,32 +7925,32 @@ protected boolean setProperty(JsonApiDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.JsonDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "JSon", - description = "Marshal POJOs to JSON and back", + description = "Marshal POJOs to JSON and back.", deprecated = false, properties = { @YamlProperty(name = "allowJmsType", type = "boolean", defaultValue = "false", description = "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", displayName = "Allow Jms Type"), @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used.", displayName = "Allow Unmarshall Type"), - @YamlProperty(name = "autoDiscoverObjectMapper", type = "boolean", defaultValue = "false", description = "If set to true then Jackson will look for an objectMapper to use from the registry.", displayName = "Auto Discover Object Mapper"), - @YamlProperty(name = "autoDiscoverSchemaResolver", type = "boolean", defaultValue = "true", description = "When not disabled, the SchemaResolver will be looked up into the registry.", displayName = "Auto Discover Schema Resolver"), + @YamlProperty(name = "autoDiscoverObjectMapper", type = "boolean", defaultValue = "false", description = "If set to true then Jackson will look for an objectMapper to use from the registry", displayName = "Auto Discover Object Mapper"), + @YamlProperty(name = "autoDiscoverSchemaResolver", type = "boolean", defaultValue = "true", description = "When not disabled, the SchemaResolver will be looked up into the registry", displayName = "Auto Discover Schema Resolver"), @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows using different collection types than java.util.Collection based as default.", displayName = "Collection Type"), @YamlProperty(name = "combineUnicodeSurrogates", type = "boolean", defaultValue = "false", description = "Force generator that outputs JSON content to combine surrogate pairs (if any) into 4-byte characters. This should be preferred when using 4-byte characters such as Japanese.", displayName = "Combine Unicode Surrogates"), @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), @YamlProperty(name = "dateFormatPattern", type = "string", description = "To configure the date format while marshall or unmarshall Date fields in JSON using Gson", displayName = "Date Format Pattern"), - @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated by comma.", displayName = "Disable Features"), - @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated by comma.", displayName = "Enable Features"), + @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Disable Features"), + @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Enable Features"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "include", type = "string", description = "If you want to marshal a POJO to JSON, and the POJO has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL.", displayName = "Include"), - @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations.", displayName = "Json View"), + @YamlProperty(name = "include", type = "string", description = "If you want to marshal a pojo to JSON, and the pojo has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL", displayName = "Include"), + @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations", displayName = "Json View"), @YamlProperty(name = "library", type = "enum:Fastjson,Gson,Jackson,Jsonb", defaultValue = "Jackson", description = "Which json library to use.", displayName = "Library"), - @YamlProperty(name = "maxStringLength", type = "number", description = "Sets the maximum string length (in chars or bytes, depending on input context). The default is 20,000,000.", displayName = "Max String Length"), + @YamlProperty(name = "maxStringLength", type = "number", description = "Jackson. Sets the maximum string length (in chars or bytes, depending on input context). The default is 20,000,000. This limit is not exact, the limit is applied when we increase internal buffer sizes and an exception will happen at sizes greater than this limit. Some text values that are a little bigger than the limit may be treated as valid but no text values with sizes less than or equal to this limit will be treated as invalid.", displayName = "Max String Length"), @YamlProperty(name = "moduleClassNames", type = "string", description = "To use custom Jackson modules com.fasterxml.jackson.databind.Module specified as a String with FQN class names. Multiple classes can be separated by comma.", displayName = "Module Class Names"), @YamlProperty(name = "moduleRefs", type = "string", description = "To use custom Jackson modules referred from the Camel registry. Multiple modules can be separated by comma.", displayName = "Module Refs"), @YamlProperty(name = "namingStrategy", type = "string", description = "If set then Jackson will use the the defined Property Naming Strategy.Possible values are: LOWER_CAMEL_CASE, LOWER_DOT_CASE, LOWER_CASE, KEBAB_CASE, SNAKE_CASE and UPPER_CAMEL_CASE", displayName = "Naming Strategy"), @YamlProperty(name = "objectMapper", type = "string", description = "Lookup and use the existing ObjectMapper with the given id when using Jackson.", displayName = "Object Mapper"), @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "To enable pretty printing output nicely formatted. Is by default false.", displayName = "Pretty Print"), @YamlProperty(name = "schemaResolver", type = "string", description = "Optional schema resolver used to lookup schemas for the data in transit.", displayName = "Schema Resolver"), - @YamlProperty(name = "timezone", type = "string", description = "If set then Jackson will use the Timezone when marshalling/unmarshalling.", displayName = "Timezone"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling.", displayName = "Unmarshal Type"), + @YamlProperty(name = "timezone", type = "string", description = "If set then Jackson will use the Timezone when marshalling/unmarshalling. This option will have no effect on the others Json DataFormat, like gson and fastjson.", displayName = "Timezone"), + @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling", displayName = "Unmarshal Type"), @YamlProperty(name = "useDefaultObjectMapper", type = "boolean", defaultValue = "true", description = "Whether to lookup and use default Jackson ObjectMapper from the registry.", displayName = "Use Default Object Mapper"), @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "To unmarshal to a List of Map or a List of Pojo.", displayName = "Use List") } @@ -8241,18 +8108,18 @@ protected boolean setProperty(JsonDataFormat target, String propertyKey, types = org.apache.camel.model.language.JsonPathExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "JSONPath", - description = "Evaluates a JSONPath expression against a JSON message body", + description = "Evaluates a JSONPath expression against a JSON message body.", deprecated = false, properties = { @YamlProperty(name = "allowEasyPredicate", type = "boolean", defaultValue = "true", description = "Whether to allow using the easy predicate parser to pre-parse predicates.", displayName = "Allow Easy Predicate"), - @YamlProperty(name = "allowSimple", type = "boolean", defaultValue = "true", description = "Whether to allow in inlined Simple exceptions in the JSONPath expression.", displayName = "Allow Simple"), - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "allowSimple", type = "boolean", defaultValue = "true", description = "Whether to allow in inlined Simple exceptions in the JSONPath expression", displayName = "Allow Simple"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), @YamlProperty(name = "option", type = "enum:DEFAULT_PATH_LEAF_TO_NULL,ALWAYS_RETURN_LIST,AS_PATH_LIST,SUPPRESS_EXCEPTIONS,REQUIRE_PROPERTIES", description = "To configure additional options on JSONPath. Multiple values can be separated by comma.", displayName = "Option"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), @YamlProperty(name = "suppressExceptions", type = "boolean", defaultValue = "false", description = "Whether to suppress exceptions such as PathNotFoundException.", displayName = "Suppress Exceptions"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim"), @YamlProperty(name = "unpackArray", type = "boolean", defaultValue = "false", description = "Whether to unpack a single element json-array into an object.", displayName = "Unpack Array"), @YamlProperty(name = "writeAsString", type = "boolean", defaultValue = "false", description = "Whether to write the output of each row/element as a JSON String value instead of a Map/POJO value.", displayName = "Write As String") } @@ -8354,24 +8221,24 @@ protected boolean setProperty(JsonPathExpression target, String propertyKey, types = org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Jta Transaction Error Handler", - description = "Transactional error handler using JTA (Java Transaction API) that marks the transaction for rollback on failure", + description = "JTA based transactional error handler (requires camel-jta).", deprecated = false, properties = { - @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used for asynchronous redelivery.", displayName = "Executor Service Ref"), + @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used by the error handler", displayName = "Executor Service Ref"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "The logging level to use when logging caught exceptions.", displayName = "Level"), - @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler.", displayName = "Log Name"), - @YamlProperty(name = "loggerRef", type = "string", description = "Sets a reference to a logger to use for logging error handler activity.", displayName = "Logger Ref"), - @YamlProperty(name = "onExceptionOccurredRef", type = "string", 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.", displayName = "On Exception Occurred Ref"), - @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the exchange before handled by the failure processor or dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), - @YamlProperty(name = "onRedeliveryRef", type = "string", 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.", displayName = "On Redelivery Ref"), - @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "The redelivery settings for configuring retry attempts and delays when message processing fails.", displayName = "Redelivery Policy"), - @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a redelivery policy to lookup in the registry to be used.", displayName = "Redelivery Policy Ref"), - @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a reference to a retry while predicate. Redelivery continues as long as the predicate evaluates to true.", displayName = "Retry While Ref"), - @YamlProperty(name = "rollbackLoggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "WARN", description = "The logging level to use for logging transactional rollback. Default is WARN.", displayName = "Rollback Logging Level"), + @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "Logging level to use by error handler", displayName = "Level"), + @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler", displayName = "Log Name"), + @YamlProperty(name = "loggerRef", type = "string", description = "References to a logger to use as logger for the error handler", displayName = "Logger Ref"), + @YamlProperty(name = "onExceptionOccurredRef", type = "string", description = "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", displayName = "On Exception Occurred Ref"), + @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor / dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), + @YamlProperty(name = "onRedeliveryRef", type = "string", description = "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", displayName = "On Redelivery Ref"), + @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "Sets the redelivery settings", displayName = "Redelivery Policy"), + @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", displayName = "Redelivery Policy Ref"), + @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false.", displayName = "Retry While Ref"), + @YamlProperty(name = "rollbackLoggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "WARN", description = "Sets the logging level to use for logging transactional rollback. This option is default WARN.", displayName = "Rollback Logging Level"), @YamlProperty(name = "transactedPolicyRef", type = "string", description = "The transacted policy to use that is configured for either Spring or JTA based transactions. If no policy has been configured then Camel will attempt to auto-discover.", displayName = "Transacted Policy Ref"), - @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "If enabled, uses the original input message body (but not headers) when the exchange is moved to the dead letter queue after all redelivery attempts have been exhausted. This allows enriching the message with custom headers while keeping the original body. Cannot be used together with useOriginalMessage.", displayName = "Use Original Body"), - @YamlProperty(name = "useOriginalMessage", type = "boolean", 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.", displayName = "Use Original Message") + @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Body"), + @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Message") } ) public static class JtaTransactionErrorHandlerDefinitionDeserializer extends YamlDeserializerBase { @@ -8477,11 +8344,11 @@ protected boolean setProperty(JtaTransactionErrorHandlerDefinition target, types = org.apache.camel.model.dataformat.LZFDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "LZF Deflate Compression", - description = "Compress and decompress streams using LZF deflate algorithm", + description = "Compress and decompress streams using LZF deflate algorithm.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "usingParallelCompression", type = "boolean", defaultValue = "false", description = "Whether to enable encoding (compress) using multiple processing cores.", displayName = "Using Parallel Compression") + @YamlProperty(name = "usingParallelCompression", type = "boolean", defaultValue = "false", description = "Enable encoding (compress) using multiple processing cores.", displayName = "Using Parallel Compression") } ) public static class LZFDataFormatDeserializer extends YamlDeserializerBase { @@ -8522,14 +8389,14 @@ protected boolean setProperty(LZFDataFormat target, String propertyKey, String p types = org.apache.camel.model.tokenizer.LangChain4jCharacterTokenizerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "LangChain4J Tokenizer with character splitter", - description = "Splits text into chunks by character count, using LangChain4j's character tokenizer for AI text processing", + description = "Camel AI: Tokenizer for splitting by character.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "The maximum number of tokens that can overlap in each segment.", displayName = "Max Overlap"), - @YamlProperty(name = "maxTokens", type = "number", required = true, description = "The maximum number of tokens on each segment.", displayName = "Max Tokens"), - @YamlProperty(name = "modelName", type = "string", description = "The underlying model name used by the tokenizer. Providing this switches to computing segment sizes in terms of tokens.", displayName = "Model Name"), - @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "The tokenizer type. Must be one of OPEN_AI, AZURE or QWEN.", displayName = "Tokenizer Type") + @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "Sets the maximum number of tokens that can overlap in each segment", displayName = "Max Overlap"), + @YamlProperty(name = "maxTokens", type = "number", required = true, description = "Sets the maximum number of tokens on each segment", displayName = "Max Tokens"), + @YamlProperty(name = "modelName", type = "string", description = "Sets the model name", displayName = "Model Name"), + @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "Sets the tokenizer type", displayName = "Tokenizer Type") } ) public static class LangChain4jCharacterTokenizerDefinitionDeserializer extends YamlDeserializerBase { @@ -8585,14 +8452,14 @@ protected boolean setProperty(LangChain4jCharacterTokenizerDefinition target, types = org.apache.camel.model.tokenizer.LangChain4jLineTokenizerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "LangChain4J Tokenizer with line splitter", - description = "Splits text into chunks line by line, using LangChain4j's line tokenizer for AI text processing", + description = "Camel AI: Tokenizer for splitting line by line.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "The maximum number of tokens that can overlap in each segment.", displayName = "Max Overlap"), - @YamlProperty(name = "maxTokens", type = "number", required = true, description = "The maximum number of tokens on each segment.", displayName = "Max Tokens"), - @YamlProperty(name = "modelName", type = "string", description = "The underlying model name used by the tokenizer. Providing this switches to computing segment sizes in terms of tokens.", displayName = "Model Name"), - @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "The tokenizer type. Must be one of OPEN_AI, AZURE or QWEN.", displayName = "Tokenizer Type") + @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "Sets the maximum number of tokens that can overlap in each segment", displayName = "Max Overlap"), + @YamlProperty(name = "maxTokens", type = "number", required = true, description = "Sets the maximum number of tokens on each segment", displayName = "Max Tokens"), + @YamlProperty(name = "modelName", type = "string", description = "Sets the model name", displayName = "Model Name"), + @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "Sets the tokenizer type", displayName = "Tokenizer Type") } ) public static class LangChain4jLineTokenizerDefinitionDeserializer extends YamlDeserializerBase { @@ -8648,14 +8515,14 @@ protected boolean setProperty(LangChain4jLineTokenizerDefinition target, String types = org.apache.camel.model.tokenizer.LangChain4jParagraphTokenizerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "LangChain4J Tokenizer with paragraph splitter", - description = "Splits text into chunks by paragraph boundaries, using LangChain4j's paragraph tokenizer for AI text processing", + description = "Camel AI: Tokenizer for splitting by paragraphs.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "The maximum number of tokens that can overlap in each segment.", displayName = "Max Overlap"), - @YamlProperty(name = "maxTokens", type = "number", required = true, description = "The maximum number of tokens on each segment.", displayName = "Max Tokens"), - @YamlProperty(name = "modelName", type = "string", description = "The underlying model name used by the tokenizer. Providing this switches to computing segment sizes in terms of tokens.", displayName = "Model Name"), - @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "The tokenizer type. Must be one of OPEN_AI, AZURE or QWEN.", displayName = "Tokenizer Type") + @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "Sets the maximum number of tokens that can overlap in each segment", displayName = "Max Overlap"), + @YamlProperty(name = "maxTokens", type = "number", required = true, description = "Sets the maximum number of tokens on each segment", displayName = "Max Tokens"), + @YamlProperty(name = "modelName", type = "string", description = "Sets the model name", displayName = "Model Name"), + @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "Sets the tokenizer type", displayName = "Tokenizer Type") } ) public static class LangChain4jParagraphTokenizerDefinitionDeserializer extends YamlDeserializerBase { @@ -8711,14 +8578,14 @@ protected boolean setProperty(LangChain4jParagraphTokenizerDefinition target, types = org.apache.camel.model.tokenizer.LangChain4jSentenceTokenizerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "LangChain4J Tokenizer with sentence splitter", - description = "Splits text into chunks by sentence boundaries, using LangChain4j's sentence tokenizer for AI text processing", + description = "Camel AI: Tokenizer for splitting by sentences.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "The maximum number of tokens that can overlap in each segment.", displayName = "Max Overlap"), - @YamlProperty(name = "maxTokens", type = "number", required = true, description = "The maximum number of tokens on each segment.", displayName = "Max Tokens"), - @YamlProperty(name = "modelName", type = "string", description = "The underlying model name used by the tokenizer. Providing this switches to computing segment sizes in terms of tokens.", displayName = "Model Name"), - @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "The tokenizer type. Must be one of OPEN_AI, AZURE or QWEN.", displayName = "Tokenizer Type") + @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "Sets the maximum number of tokens that can overlap in each segment", displayName = "Max Overlap"), + @YamlProperty(name = "maxTokens", type = "number", required = true, description = "Sets the maximum number of tokens on each segment", displayName = "Max Tokens"), + @YamlProperty(name = "modelName", type = "string", description = "Sets the model name", displayName = "Model Name"), + @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "Sets the tokenizer type", displayName = "Tokenizer Type") } ) public static class LangChain4jSentenceTokenizerDefinitionDeserializer extends YamlDeserializerBase { @@ -8833,14 +8700,14 @@ protected boolean setProperty(LangChain4jTokenizerDefinition target, String prop types = org.apache.camel.model.tokenizer.LangChain4jWordTokenizerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "LangChain4J Tokenizer with word splitter", - description = "Splits text into chunks by word boundaries, using LangChain4j's word tokenizer for AI text processing", + description = "Camel AI: Tokenizer for splitting by word.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "The maximum number of tokens that can overlap in each segment.", displayName = "Max Overlap"), - @YamlProperty(name = "maxTokens", type = "number", required = true, description = "The maximum number of tokens on each segment.", displayName = "Max Tokens"), - @YamlProperty(name = "modelName", type = "string", description = "The underlying model name used by the tokenizer. Providing this switches to computing segment sizes in terms of tokens.", displayName = "Model Name"), - @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "The tokenizer type. Must be one of OPEN_AI, AZURE or QWEN.", displayName = "Tokenizer Type") + @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "Sets the maximum number of tokens that can overlap in each segment", displayName = "Max Overlap"), + @YamlProperty(name = "maxTokens", type = "number", required = true, description = "Sets the maximum number of tokens on each segment", displayName = "Max Tokens"), + @YamlProperty(name = "modelName", type = "string", description = "Sets the model name", displayName = "Model Name"), + @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "Sets the tokenizer type", displayName = "Tokenizer Type") } ) public static class LangChain4jWordTokenizerDefinitionDeserializer extends YamlDeserializerBase { @@ -8896,13 +8763,13 @@ protected boolean setProperty(LangChain4jWordTokenizerDefinition target, String types = org.apache.camel.model.language.LanguageExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Language", - description = "Evaluates a custom language", + description = "Evaluates a custom language.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "language", type = "string", required = true, description = "The name of the language to use.", displayName = "Language"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "language", type = "string", required = true, description = "The name of the language to use", displayName = "Language"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class LanguageExpressionDeserializer extends YamlDeserializerBase { @@ -8962,15 +8829,15 @@ protected boolean setProperty(LanguageExpression target, String propertyKey, types = org.apache.camel.model.LoadBalanceDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Load Balance", - description = "Distributes messages across multiple endpoints using a load balancing strategy such as round-robin, random, failover, or weighted", + description = "Balances message processing among a number of nodes", deprecated = false, properties = { @YamlProperty(name = "customLoadBalancer", type = "object:org.apache.camel.model.loadbalancer.CustomLoadBalancerDefinition", oneOf = "loadBalancerType"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), @YamlProperty(name = "failoverLoadBalancer", type = "object:org.apache.camel.model.loadbalancer.FailoverLoadBalancerDefinition", oneOf = "loadBalancerType"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "randomLoadBalancer", type = "object:org.apache.camel.model.loadbalancer.RandomLoadBalancerDefinition", oneOf = "loadBalancerType"), @YamlProperty(name = "roundRobinLoadBalancer", type = "object:org.apache.camel.model.loadbalancer.RoundRobinLoadBalancerDefinition", oneOf = "loadBalancerType"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), @@ -9071,15 +8938,15 @@ protected boolean setProperty(LoadBalanceDefinition target, String propertyKey, types = org.apache.camel.model.transformer.LoadTransformerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Load Transformer", - description = "Auto-discovers and loads data type transformers from the classpath via scanning", + description = "To load custom transformers from classpath scanning to be used for route level transformations.", deprecated = false, properties = { - @YamlProperty(name = "defaults", type = "boolean", defaultValue = "false", description = "Whether to enable loading of default transformers.", displayName = "Defaults"), - @YamlProperty(name = "fromType", type = "string", description = "The source (from) data type name. If you specify 'xml:XYZ', the transformer is picked up when source type matches. If you specify just 'xml', it matches all xml source types.", displayName = "From Type"), - @YamlProperty(name = "name", type = "string", description = "Name under which the transformer gets referenced when specifying input/output data type on routes. If the name matches a data type scheme, the transformer will be picked up as a fallback.", displayName = "Name"), - @YamlProperty(name = "packageScan", type = "string", description = "The classpath location to scan for annotated transformers.", displayName = "Package Scan"), - @YamlProperty(name = "scheme", type = "string", description = "Scheme name supported by the transformer. If specified, the transformer will be picked up for all from/to transformation of this scheme. Scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), - @YamlProperty(name = "toType", type = "string", description = "The destination (to) data type name. If you specify 'json:XYZ', the transformer is picked up when destination type matches. If you specify just 'json', it matches all json destination types.", displayName = "To Type") + @YamlProperty(name = "defaults", type = "boolean", defaultValue = "false", description = "Enable loading of default transformers.", displayName = "Defaults"), + @YamlProperty(name = "fromType", type = "string", description = "Set the 'from' data type name. If you specify 'xml:XYZ', the transformer will be picked up if source type is 'xml:XYZ'. If you specify just 'xml', the transformer matches with all of 'xml' source type like 'xml:ABC' or 'xml:DEF'.", displayName = "From Type"), + @YamlProperty(name = "name", type = "string", description = "Set the transformer name under which the transformer gets referenced when specifying the input/output data type on routes. If you specify a transformer name that matches a data type scheme like 'csv' the transformer will be picked up for all of 'csv:' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Name"), + @YamlProperty(name = "packageScan", type = "string", description = "Set the classpath location to scan for annotated transformers.", displayName = "Package Scan"), + @YamlProperty(name = "scheme", type = "string", description = "Set a scheme name supported by the transformer. If you specify 'csv', the transformer will be picked up for all of 'csv' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), + @YamlProperty(name = "toType", type = "string", description = "Set the 'to' data type name. If you specify 'json:XYZ', the transformer will be picked up if destination type is 'json:XYZ'. If you specify just 'json', the transformer matches with all of 'json' destination type like 'json:ABC' or 'json:DEF'.", displayName = "To Type") } ) public static class LoadTransformerDefinitionDeserializer extends YamlDeserializerBase { @@ -9141,19 +9008,19 @@ protected boolean setProperty(LoadTransformerDefinition target, String propertyK types = org.apache.camel.model.LogDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Logger", - description = "Logs a message using an expression that can include message body, headers, and other exchange data", + description = "Used for printing custom messages to the logger.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "logLanguage", type = "string", description = "The language to use for evaluating the log message, such as simple, groovy, or ognl.", displayName = "Log Language"), - @YamlProperty(name = "logName", type = "string", description = "The logger name to use. By default the route id is used.", displayName = "Log Name"), - @YamlProperty(name = "logger", type = "string", description = "Reference to a custom SLF4J logger instance to use.", displayName = "Logger"), - @YamlProperty(name = "loggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "INFO", description = "Sets the logging level to use for the log message. Available levels: TRACE, DEBUG, INFO, WARN, ERROR, OFF.", displayName = "Logging Level"), - @YamlProperty(name = "marker", type = "string", description = "An optional SLF4J marker to use with the log statement.", displayName = "Marker"), - @YamlProperty(name = "message", type = "string", required = true, description = "The log message to output. Supports simple language expressions.", displayName = "Message"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "logLanguage", type = "string", description = "To configure the language to use. By default, the simple language is used. However, Camel also supports other languages such as groovy.", displayName = "Log Language"), + @YamlProperty(name = "logName", type = "string", description = "Sets the name of the logger. The name is default the routeId or the source:line if source location is enabled. You can also specify the name using tokens: ${class} - the logger class name (org.apache.camel.processor.LogProcessor) ${contextId} - the camel context id ${routeId} - the route id ${groupId} - the route group id ${nodeId} - the node id ${nodePrefixId} - the node prefix id ${source} - the source:line (source location must be enabled) ${source.name} - the source filename (source location must be enabled) ${source.line} - the source line number (source location must be enabled) For example to use the route and node id you can specify the name as: ${routeId}/${nodeId}", displayName = "Log Name"), + @YamlProperty(name = "logger", type = "string", description = "To refer to a custom logger instance to lookup from the registry.", displayName = "Logger"), + @YamlProperty(name = "loggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "INFO", description = "Sets the logging level. The default value is INFO", displayName = "Logging Level"), + @YamlProperty(name = "marker", type = "string", description = "To use slf4j marker", displayName = "Marker"), + @YamlProperty(name = "message", type = "string", required = true, description = "Sets the log message (uses simple language)", displayName = "Message"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class LogDefinitionDeserializer extends YamlDeserializerBase { @@ -9239,19 +9106,19 @@ protected boolean setProperty(LogDefinition target, String propertyKey, String p types = org.apache.camel.model.LoopDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Loop", - description = "Processes the message body repeatedly for a specified number of iterations, or until a condition is met", + description = "Processes a message multiple times", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "breakOnShutdown", type = "boolean", defaultValue = "false", description = "If enabled, the loop will not iterate until it reaches the end when Camel is shut down.", displayName = "Break On Shutdown"), - @YamlProperty(name = "copy", type = "boolean", 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.", displayName = "Copy"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "breakOnShutdown", type = "boolean", defaultValue = "false", description = "If the breakOnShutdown attribute is true, then the loop will not iterate until it reaches the end when Camel is shut down.", displayName = "Break On Shutdown"), + @YamlProperty(name = "copy", type = "boolean", defaultValue = "false", description = "If the copy attribute is true, a copy of the input Exchange is used for each iteration. That means each iteration will start from a copy of the same message. By default loop will loop the same exchange all over, so each iteration may have different message content.", displayName = "Copy"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), @YamlProperty(name = "doWhile", type = "boolean", defaultValue = "false", description = "Enables the while loop that loops until the predicate evaluates to false or null.", displayName = "Do While"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression that determines the number of times to loop. The result is converted to an integer.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "onPrepare", type = "string", description = "Uses a processor when preparing the exchange for each loop iteration. This can be used to deep-clone messages, or any custom logic needed before the looping executes.", displayName = "On Prepare"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to define how many times we should loop. Notice the expression is only evaluated once, and should return a number as how many times to loop. A value of zero or negative means no looping. The loop is like a for-loop fashion, if you want a while loop, then the dynamic router may be a better choice.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the org.apache.camel.Exchange for each loop iteration. This can be used to deep-clone messages, or any custom logic needed before the looping executes.", displayName = "On Prepare"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -9341,7 +9208,7 @@ protected boolean setProperty(LoopDefinition target, String propertyKey, types = org.apache.camel.model.MarshalDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Marshal", - description = "Serializes the message body into a specific data format such as JSON, XML, CSV, or Protobuf for transmission or storage", + description = "Marshals data into a specified format for transmission over a transport or component", deprecated = false, properties = { @YamlProperty(name = "asn1", type = "object:org.apache.camel.model.dataformat.ASN1DataFormat", oneOf = "dataFormatType"), @@ -9354,9 +9221,9 @@ protected boolean setProperty(LoopDefinition target, String propertyKey, @YamlProperty(name = "crypto", type = "object:org.apache.camel.model.dataformat.CryptoDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "csv", type = "object:org.apache.camel.model.dataformat.CsvDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "custom", type = "object:org.apache.camel.model.dataformat.CustomDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), @YamlProperty(name = "dfdl", type = "object:org.apache.camel.model.dataformat.DfdlDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), @YamlProperty(name = "fhirJson", type = "object:org.apache.camel.model.dataformat.FhirJsonDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "fhirXml", type = "object:org.apache.camel.model.dataformat.FhirXmlDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "flatpack", type = "object:org.apache.camel.model.dataformat.FlatpackDataFormat", oneOf = "dataFormatType"), @@ -9367,7 +9234,7 @@ protected boolean setProperty(LoopDefinition target, String propertyKey, @YamlProperty(name = "gzipDeflater", type = "object:org.apache.camel.model.dataformat.GzipDeflaterDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "hl7", type = "object:org.apache.camel.model.dataformat.HL7DataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "ical", type = "object:org.apache.camel.model.dataformat.IcalDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), @YamlProperty(name = "iso8583", type = "object:org.apache.camel.model.dataformat.Iso8583DataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "jacksonXml", type = "object:org.apache.camel.model.dataformat.JacksonXMLDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "jaxb", type = "object:org.apache.camel.model.dataformat.JaxbDataFormat", oneOf = "dataFormatType"), @@ -9375,7 +9242,7 @@ protected boolean setProperty(LoopDefinition target, String propertyKey, @YamlProperty(name = "jsonApi", type = "object:org.apache.camel.model.dataformat.JsonApiDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "lzf", type = "object:org.apache.camel.model.dataformat.LZFDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "mimeMultipart", type = "object:org.apache.camel.model.dataformat.MimeMultipartDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "ocsf", type = "object:org.apache.camel.model.dataformat.OcsfDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "parquetAvro", type = "object:org.apache.camel.model.dataformat.ParquetAvroDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "pgp", type = "object:org.apache.camel.model.dataformat.PGPDataFormat", oneOf = "dataFormatType"), @@ -9392,8 +9259,8 @@ protected boolean setProperty(LoopDefinition target, String propertyKey, @YamlProperty(name = "univocityCsv", type = "object:org.apache.camel.model.dataformat.UniVocityCsvDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "univocityFixed", type = "object:org.apache.camel.model.dataformat.UniVocityFixedDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "univocityTsv", type = "object:org.apache.camel.model.dataformat.UniVocityTsvDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive"), - @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving.", displayName = "Variable Send"), + @YamlProperty(name = "variableReceive", type = "string", 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. Important: When using receive variable then the received body is stored only in this variable and not on the current message.", displayName = "Variable Receive"), + @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Send"), @YamlProperty(name = "xmlSecurity", type = "object:org.apache.camel.model.dataformat.XMLSecurityDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "yaml", type = "object:org.apache.camel.model.dataformat.YAMLDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "zipDeflater", type = "object:org.apache.camel.model.dataformat.ZipDeflaterDataFormat", oneOf = "dataFormatType"), @@ -9570,16 +9437,6 @@ protected boolean setProperty(MarshalDefinition target, String propertyKey, target.setDataFormatType(val); break; } - case "pgp": { - org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); - target.setDataFormatType(val); - break; - } - case "pqc": { - org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); - target.setDataFormatType(val); - break; - } case "protobuf": { org.apache.camel.model.dataformat.ProtobufDataFormat val = asType(node, org.apache.camel.model.dataformat.ProtobufDataFormat.class); target.setDataFormatType(val); @@ -9645,6 +9502,16 @@ protected boolean setProperty(MarshalDefinition target, String propertyKey, target.setDataFormatType(val); break; } + case "pgp": { + org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); + target.setDataFormatType(val); + break; + } + case "pqc": { + org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); + target.setDataFormatType(val); + break; + } case "yaml": { org.apache.camel.model.dataformat.YAMLDataFormat val = asType(node, org.apache.camel.model.dataformat.YAMLDataFormat.class); target.setDataFormatType(val); @@ -9704,16 +9571,16 @@ protected boolean setProperty(MarshalDefinition target, String propertyKey, types = org.apache.camel.model.language.MethodCallExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Bean Method", - description = "Calls a Java bean method", + description = "Calls a Java bean method.", deprecated = false, properties = { - @YamlProperty(name = "beanType", type = "string", description = "Class name (fully qualified) of the bean to use. Will lookup in registry and if there is a single instance of the same type, then the existing bean is used, otherwise a new bean is created (requires a default no-arg constructor).", displayName = "Bean Type"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "method", type = "string", description = "Name of method to call.", displayName = "Method"), - @YamlProperty(name = "ref", type = "string", description = "Reference to an existing bean (bean id) to lookup in the registry.", displayName = "Ref"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), - @YamlProperty(name = "scope", type = "enum:Singleton,Request,Prototype", defaultValue = "Singleton", description = "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint.", displayName = "Scope"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim"), + @YamlProperty(name = "beanType", type = "string", description = "Class name (fully qualified) of the bean to use Will lookup in registry and if there is a single instance of the same type, then the existing bean is used, otherwise a new bean is created (requires a default no-arg constructor).", displayName = "Bean Type"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "method", type = "string", description = "Name of method to call", displayName = "Method"), + @YamlProperty(name = "ref", type = "string", description = "Reference to an existing bean (bean id) to lookup in the registry", displayName = "Ref"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "scope", type = "enum:Singleton,Request,Prototype", defaultValue = "Singleton", description = "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint. The bean should be thread-safe in case concurrent threads is calling the bean at the same time. When using request scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean while processing a request and you want to call the same bean instance multiple times while processing the request. The bean does not have to be thread-safe as the instance is only called from the same request. When using prototype scope, then the bean will be looked up or created per call. However in case of lookup then this is delegated to the bean registry such as Spring or CDI (if in use), which depends on their configuration can act as either singleton or prototype scope. So when using prototype scope then this depends on the bean registry implementation.", displayName = "Scope"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim"), @YamlProperty(name = "validate", type = "boolean", defaultValue = "true", description = "Whether to validate the bean has the configured method.", displayName = "Validate") } ) @@ -9799,15 +9666,15 @@ protected boolean setProperty(MethodCallExpression target, String propertyKey, types = org.apache.camel.model.dataformat.MimeMultipartDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "MIME Multipart", - description = "Marshal Camel messages with attachments into MIME-Multipart messages and back", + description = "Marshal Camel messages with attachments into MIME-Multipart messages and back.", deprecated = false, properties = { - @YamlProperty(name = "binaryContent", type = "boolean", defaultValue = "false", description = "Whether the content of binary parts in the MIME multipart is binary (true) or Base-64 encoded (false).", displayName = "Binary Content"), - @YamlProperty(name = "headersInline", type = "boolean", defaultValue = "false", description = "Whether the MIME-Multipart headers are part of the message body (true) or are set as Camel headers (false).", displayName = "Headers Inline"), + @YamlProperty(name = "binaryContent", type = "boolean", defaultValue = "false", description = "Defines whether the content of binary parts in the MIME multipart is binary (true) or Base-64 encoded (false) Default is false.", displayName = "Binary Content"), + @YamlProperty(name = "headersInline", type = "boolean", defaultValue = "false", description = "Defines whether the MIME-Multipart headers are part of the message body (true) or are set as Camel headers (false). Default is false.", displayName = "Headers Inline"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "includeHeaders", type = "string", description = "A regex that defines which Camel headers are also included as MIME headers into the MIME multipart. This only works if headersInline is set to true.", displayName = "Include Headers"), - @YamlProperty(name = "multipartSubType", type = "string", defaultValue = "mixed", description = "Specify the subtype of the MIME Multipart.", displayName = "Multipart Sub Type"), - @YamlProperty(name = "multipartWithoutAttachment", type = "boolean", defaultValue = "false", description = "Whether a message without attachment is also marshaled into a MIME Multipart (with only one body part).", displayName = "Multipart Without Attachment") + @YamlProperty(name = "includeHeaders", type = "string", description = "A regex that defines which Camel headers are also included as MIME headers into the MIME multipart. This will only work if headersInline is set to true. Default is to include no headers", displayName = "Include Headers"), + @YamlProperty(name = "multipartSubType", type = "string", defaultValue = "mixed", description = "Specify the subtype of the MIME Multipart. Default is mixed.", displayName = "Multipart Sub Type"), + @YamlProperty(name = "multipartWithoutAttachment", type = "boolean", defaultValue = "false", description = "Defines whether a message without attachment is also marshaled into a MIME Multipart (with only one body part). Default is false.", displayName = "Multipart Without Attachment") } ) public static class MimeMultipartDataFormatDeserializer extends YamlDeserializerBase { @@ -9868,26 +9735,26 @@ protected boolean setProperty(MimeMultipartDataFormat target, String propertyKey types = org.apache.camel.model.MulticastDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Multicast", - description = "Sends a copy of the message to multiple fixed endpoints, processing them sequentially or in parallel, and optionally aggregating their replies", + description = "Routes the same message to multiple paths either sequentially or in parallel.", deprecated = false, properties = { - @YamlProperty(name = "aggregationStrategy", type = "string", description = "Reference to the AggregationStrategy to assemble the replies from the multicasts into a single outgoing message. By default Camel uses the last reply as the outgoing message.", displayName = "Aggregation Strategy"), - @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If true then null is used as the oldExchange when there is no data to aggregate, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "The method name to use when using a POJO as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "executorService", type = "string", description = "Reference to a custom thread pool to use for parallel processing. Setting this option implies parallel processing.", displayName = "Executor Service"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "onPrepare", type = "string", description = "Reference to a processor for preparing the exchange to be sent. Can be used to deep-clone messages that should be sent.", displayName = "On Prepare"), + @YamlProperty(name = "aggregationStrategy", type = "string", description = "Refers to an AggregationStrategy to be used to assemble the replies from the multicasts, into a single outgoing message from the Multicast. By default Camel will use the last reply as the outgoing message. You can also use a POJO as the AggregationStrategy", displayName = "Aggregation Strategy"), + @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy", displayName = "Aggregation Strategy Method Allow Null"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "executorService", type = "string", description = "Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well.", displayName = "Executor Service"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the org.apache.camel.Exchange to be send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send.", displayName = "On Prepare"), @YamlProperty(name = "parallelAggregate", type = "boolean", deprecated = true, defaultValue = "false", description = "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe.", displayName = "Parallel Aggregate"), - @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then sending messages to the multicasts occurs concurrently. The caller thread still waits until all messages are fully processed before it continues.", displayName = "Parallel Processing"), - @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the unit of work with the parent and each of the multicast exchanges. By default each multicast exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), + @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then sending messages to the multicasts occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the multicasts which happens concurrently. When parallel processing is enabled, then the Camel routing engin will continue processing using last used thread from the parallel thread pool. However, if you want to use the original thread that called the multicast, then make sure to enable the synchronous option as well. In parallel processing mode, you may want to also synchronous = true to force this EIP to process the sub-tasks using the upper bounds of the thread-pool. If using synchronous = false then Camel will allow its reactive routing engine to use as many threads as possible, which may be available due to sub-tasks using other thread-pools such as CompletableFuture.runAsync or others.", displayName = "Parallel Processing"), + @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Multicast will by default not share unit of work between the parent exchange and each multicasted exchange. This means each sub exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), - @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "If enabled then stops further multicast processing if an exception or failure occurred during processing of an exchange, and the caused exception will be thrown. The default behavior is to not stop but continue processing till the end.", displayName = "Stop On Exception"), - @YamlProperty(name = "streaming", type = "boolean", defaultValue = "false", description = "If enabled then Camel will process replies out-of-order, in the order they come back. If disabled, Camel will process replies in the same order as defined by the multicast.", displayName = "Streaming"), - @YamlProperty(name = "synchronous", type = "boolean", defaultValue = "false", description = "When enabled then the same thread is used to continue routing after the multicast is complete, even if parallel processing is enabled.", displayName = "Synchronous"), - @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Total timeout in millis when using parallel processing. If the multicast has not been able to process all replies within the given timeframe, then the timeout triggers and the multicast breaks out and continues.", displayName = "Timeout") + @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the multicast will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The default behavior is to not stop but continue processing till the end", displayName = "Stop On Exception"), + @YamlProperty(name = "streaming", type = "boolean", defaultValue = "false", description = "If enabled then Camel will process replies out-of-order, eg in the order they come back. If disabled, Camel will process replies in the same order as defined by the multicast.", displayName = "Streaming"), + @YamlProperty(name = "synchronous", type = "boolean", defaultValue = "false", description = "Sets whether synchronous processing should be strictly used. When enabled then the same thread is used to continue routing after the multicast is complete, even if parallel processing is enabled.", displayName = "Synchronous"), + @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Sets a total timeout specified in millis, when using parallel processing. If the Multicast hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Multicast breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care.", displayName = "Timeout") } ) public static class MulticastDefinitionDeserializer extends YamlDeserializerBase { @@ -10002,11 +9869,11 @@ protected boolean setProperty(MulticastDefinition target, String propertyKey, types = org.apache.camel.model.rest.MutualTLSDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Mutual TLS", - description = "Configures mutual TLS (mTLS) client certificate authentication for a REST service", + description = "Rest security mutual TLS authentication definition", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "A short description for the security scheme.", displayName = "Description"), - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key") + @YamlProperty(name = "description", type = "string", description = "A short description for security scheme.", displayName = "Description"), + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key") } ) public static class MutualTLSDefinitionDeserializer extends YamlDeserializerBase { @@ -10048,13 +9915,13 @@ protected boolean setProperty(MutualTLSDefinition target, String propertyKey, types = org.apache.camel.model.language.MvelExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "MVEL", - description = "Evaluates a MVEL template", + description = "Evaluates a MVEL template.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class MvelExpressionDeserializer extends YamlDeserializerBase { @@ -10119,7 +9986,7 @@ protected boolean setProperty(MvelExpression target, String propertyKey, types = org.apache.camel.model.errorhandler.NoErrorHandlerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "No Error Handler", - description = "Disables error handling for a route, causing exceptions to propagate immediately to the caller", + description = "To not use an error handler.", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -10156,16 +10023,16 @@ protected boolean setProperty(NoErrorHandlerDefinition target, String propertyKe types = org.apache.camel.model.rest.OAuth2Definition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Oauth2", - description = "Configures OAuth2 authentication for a REST service", + description = "Rest security OAuth2 definition", deprecated = false, properties = { - @YamlProperty(name = "authorizationUrl", type = "string", description = "The authorization URL to use for this flow. Required for implicit and access code flows.", displayName = "Authorization Url"), - @YamlProperty(name = "description", type = "string", description = "A short description for the security scheme.", displayName = "Description"), + @YamlProperty(name = "authorizationUrl", type = "string", description = "The authorization URL to be used for this flow. This SHOULD be in the form of a URL. Required for implicit and access code flows", displayName = "Authorization Url"), + @YamlProperty(name = "description", type = "string", description = "A short description for security scheme.", displayName = "Description"), @YamlProperty(name = "flow", type = "enum:implicit,password,application,clientCredentials,accessCode,authorizationCode", description = "The flow used by the OAuth2 security scheme. Valid values are implicit, password, application or accessCode.", displayName = "Flow"), - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key"), - @YamlProperty(name = "refreshUrl", type = "string", description = "The URL to use for obtaining refresh tokens.", displayName = "Refresh Url"), - @YamlProperty(name = "scopes", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "The available scopes for the OAuth2 security scheme.", displayName = "Scopes"), - @YamlProperty(name = "tokenUrl", type = "string", description = "The token URL to use for this flow. Required for password, application, and access code flows.", displayName = "Token Url") + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key"), + @YamlProperty(name = "refreshUrl", type = "string", description = "The URL to be used for obtaining refresh tokens. This MUST be in the form of a URL.", displayName = "Refresh Url"), + @YamlProperty(name = "scopes", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "The available scopes for an OAuth2 security scheme", displayName = "Scopes"), + @YamlProperty(name = "tokenUrl", type = "string", description = "The token URL to be used for this flow. This SHOULD be in the form of a URL. Required for password, application, and access code flows.", displayName = "Token Url") } ) public static class OAuth2DefinitionDeserializer extends YamlDeserializerBase { @@ -10231,17 +10098,17 @@ protected boolean setProperty(OAuth2Definition target, String propertyKey, types = org.apache.camel.model.dataformat.OcsfDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "OCSF", - description = "Marshal and unmarshal OCSF (Open Cybersecurity Schema Framework) security events to/from JSON", + description = "Marshal and unmarshal OCSF (Open Cybersecurity Schema Framework) security events to/from JSON.", deprecated = false, properties = { - @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "Whether to allow the unmarshal type to be specified via the CamelOcsfUnmarshalType header.", displayName = "Allow Unmarshall Type"), - @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows using different collection types than java.util.Collection based as default.", displayName = "Collection Type"), + @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then the unmarshal type can be specified via the CamelOcsfUnmarshalType header. This should only be enabled when desired to be used.", displayName = "Allow Unmarshall Type"), + @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", displayName = "Collection Type"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "objectMapper", type = "string", description = "Lookup and use the existing ObjectMapper with the given id when using Jackson.", displayName = "Object Mapper"), - @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "Whether to enable pretty printing output nicely formatted.", displayName = "Pretty Print"), + @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "To enable pretty printing output nicely formatted. Is by default false.", displayName = "Pretty Print"), @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the OCSF event type to use when unmarshalling. Defaults to OcsfEvent.", displayName = "Unmarshal Type"), @YamlProperty(name = "useDefaultObjectMapper", type = "boolean", defaultValue = "true", description = "Whether to lookup and use default Jackson ObjectMapper from the registry.", displayName = "Use Default Object Mapper"), - @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "Whether to unmarshal to a List of OCSF events.", displayName = "Use List") + @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "To unmarshal to a List of OCSF events.", displayName = "Use List") } ) public static class OcsfDataFormatDeserializer extends YamlDeserializerBase { @@ -10313,13 +10180,13 @@ protected boolean setProperty(OcsfDataFormat target, String propertyKey, types = org.apache.camel.model.language.OgnlExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "OGNL", - description = "Evaluates an OGNL expression (Apache Commons OGNL)", + description = "Evaluates an OGNL expression (Apache Commons OGNL).", deprecated = true, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class OgnlExpressionDeserializer extends YamlDeserializerBase { @@ -10385,21 +10252,21 @@ protected boolean setProperty(OgnlExpression target, String propertyKey, types = org.apache.camel.model.OnCompletionDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "On Completion", - description = "Defines steps to execute when route processing completes, either on success, failure, or both", + description = "Route to be executed when normal route processing completes", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "executorService", type = "string", description = "Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatically implied, and you do not have to enable that option as well.", displayName = "Executor Service"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "mode", type = "enum:AfterConsumer,BeforeConsumer", defaultValue = "AfterConsumer", description = "Controls when the on-completion callback runs. AfterConsumer (default) runs after the consumer has written the response back to the caller. BeforeConsumer runs before the consumer writes the response, allowing the on-completion route to modify the Exchange before it is returned to the caller (e.g. in InOut mode).", displayName = "Mode"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "onCompleteOnly", type = "boolean", defaultValue = "false", description = "Will only synchronize when the Exchange completed successfully (no errors)", displayName = "On Complete Only"), - @YamlProperty(name = "onFailureOnly", type = "boolean", defaultValue = "false", description = "Will only synchronize when the Exchange ended with failure (exception or FAULT message)", displayName = "On Failure Only"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "executorService", type = "string", description = "To use a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well.", displayName = "Executor Service"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "mode", type = "enum:AfterConsumer,BeforeConsumer", defaultValue = "AfterConsumer", description = "Sets the on completion mode. The default value is AfterConsumer", displayName = "Mode"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "onCompleteOnly", type = "boolean", defaultValue = "false", description = "Will only synchronize when the org.apache.camel.Exchange completed successfully (no errors).", displayName = "On Complete Only"), + @YamlProperty(name = "onFailureOnly", type = "boolean", defaultValue = "false", description = "Will only synchronize when the org.apache.camel.Exchange ended with failure (exception or FAULT message).", displayName = "On Failure Only"), @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "To use an expression to only trigger routing this completion steps in specific situations", displayName = "On When"), @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then the on completion process will run asynchronously by a separate thread from a thread pool. By default this is false, meaning the on completion process will run synchronously using the same caller thread as from the route.", displayName = "Parallel Processing"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), - @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input message when an Exchange for this on completion. By default this feature is off.", displayName = "Use Original Message") + @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input message body when an org.apache.camel.Exchange for this on completion. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the split message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Message") } ) public static class OnCompletionDefinitionDeserializer extends YamlDeserializerBase { @@ -10490,25 +10357,25 @@ protected boolean setProperty(OnCompletionDefinition target, String propertyKey, types = org.apache.camel.model.OnExceptionDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "On Exception", - description = "Defines exception handling for specific exception types, with options for redelivery, logging, and routing to error endpoints", + description = "Route to be executed when an exception is thrown", deprecated = false, properties = { - @YamlProperty(name = "continued", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", 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.", displayName = "Continued"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "exception", type = "array:string", description = "A list of exception class names to catch and handle.", displayName = "Exception"), - @YamlProperty(name = "handled", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", 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.", displayName = "Handled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "onExceptionOccurredRef", type = "string", 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.", displayName = "On Exception Occurred Ref"), - @YamlProperty(name = "onRedeliveryRef", type = "string", 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.", displayName = "On Redelivery Ref"), + @YamlProperty(name = "continued", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Sets whether the exchange should handle and continue routing from the point of failure. If this option is enabled then its considered handled as well.", displayName = "Continued"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "exception", type = "array:string", description = "A set of exceptions to react upon.", displayName = "Exception"), + @YamlProperty(name = "handled", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Sets whether the exchange should be marked as handled or not.", displayName = "Handled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "onExceptionOccurredRef", type = "string", description = "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", displayName = "On Exception Occurred Ref"), + @YamlProperty(name = "onRedeliveryRef", type = "string", description = "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", displayName = "On Redelivery Ref"), @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "To use an expression to only trigger this in specific situations", displayName = "On When"), - @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "Configures redelivery options such as maximum redeliveries, delays, and logging behavior.", displayName = "Redelivery Policy"), - @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a redelivery policy to lookup in the registry to be used.", displayName = "Redelivery Policy Ref"), - @YamlProperty(name = "retryWhile", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Sets a predicate to control whether redelivery should continue. Redelivery continues as long as the predicate evaluates to true.", displayName = "Retry While"), + @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "Used for configuring redelivery options", displayName = "Redelivery Policy"), + @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a redelivery policy to lookup in the org.apache.camel.spi.Registry to be used.", displayName = "Redelivery Policy Ref"), + @YamlProperty(name = "retryWhile", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Sets the retry while predicate. Will continue retrying until predicate returns false.", displayName = "Retry While"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), - @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "If enabled, uses the original input message body (but not headers) when the exchange is moved to the dead letter queue after all redelivery attempts have been exhausted. This allows enriching the message with custom headers while keeping the original body. Cannot be used together with useOriginalMessage.", displayName = "Use Original Body"), - @YamlProperty(name = "useOriginalMessage", type = "boolean", 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.", displayName = "Use Original Message") + @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the split message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Body"), + @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the split message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Message") } ) public static class OnExceptionDefinitionDeserializer extends YamlDeserializerBase { @@ -10618,13 +10485,13 @@ protected boolean setProperty(OnExceptionDefinition target, String propertyKey, types = org.apache.camel.model.OnFallbackDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "On Fallback", - description = "Defines the fallback route that executes when the Circuit Breaker trips or the primary route fails", + description = "Route to be executed when Circuit Breaker EIP executes fallback", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "fallbackViaNetwork", type = "boolean", defaultValue = "false", description = "Whether the fallback goes over the network. If so, the fallback is executed on a separate thread-pool to avoid exhausting the main thread-pool.", displayName = "Fallback Via Network"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "fallbackViaNetwork", type = "boolean", defaultValue = "false", description = "Whether the fallback goes over the network. If the fallback will go over the network it is another possible point of failure. It is important to execute the fallback command on a separate thread-pool, otherwise if the main command were to become latent and fill the thread-pool this would prevent the fallback from running if the two commands share the same pool.", displayName = "Fallback Via Network"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -10680,14 +10547,14 @@ protected boolean setProperty(OnFallbackDefinition target, String propertyKey, types = org.apache.camel.model.OnWhenDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "On When", - description = "Applies a predicate condition to filter when a parent definition (such as onException or onCompletion) should be triggered", + description = "To use a predicate to determine when to trigger this.", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The predicate expression to evaluate.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The predicate to use", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class OnWhenDefinitionDeserializer extends YamlDeserializerBase { @@ -10747,18 +10614,18 @@ protected boolean setProperty(OnWhenDefinition target, String propertyKey, types = org.apache.camel.model.rest.OpenApiDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Open Api", - description = "Configures a contract-first REST service using an OpenAPI specification, where Camel auto-generates routes for each operation", + description = "To use OpenApi as contract-first with Camel Rest DSL.", deprecated = false, properties = { - @YamlProperty(name = "apiContextPath", type = "string", description = "Context path for exposing the OpenAPI specification file as a REST endpoint, allowing clients to obtain the specification from the running application.", displayName = "Api Context Path"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "apiContextPath", type = "string", description = "Whether to enable api-doc that exposes the OpenAPI specification file as a REST endpoint. This allows clients to obtain the specification from the running Camel application.", displayName = "Api Context Path"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable all the REST services from the OpenAPI contract from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), @YamlProperty(name = "missingOperation", type = "enum:fail,ignore,mock", defaultValue = "fail", description = "Whether to fail, ignore or return a mock response for OpenAPI operations that are not mapped to a corresponding route.", displayName = "Missing Operation"), @YamlProperty(name = "mockIncludePattern", type = "string", defaultValue = "classpath:camel-mock/**", description = "Used for inclusive filtering of mock data from directories. The pattern is using Ant-path style pattern. Multiple patterns can be specified separated by comma.", displayName = "Mock Include Pattern"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "routeId", type = "string", description = "The route id.", displayName = "Route Id"), - @YamlProperty(name = "specification", type = "string", required = true, description = "Path to the OpenAPI specification file.", displayName = "Specification") + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), + @YamlProperty(name = "specification", type = "string", required = true, description = "Path to the OpenApi specification file.", displayName = "Specification") } ) public static class OpenApiDefinitionDeserializer extends YamlDeserializerBase { @@ -10834,12 +10701,12 @@ protected boolean setProperty(OpenApiDefinition target, String propertyKey, types = org.apache.camel.model.rest.OpenIdConnectDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Open Id Connect", - description = "Configures OpenID Connect authentication for a REST service", + description = "Rest security OpenID Connect definition", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "A short description for the security scheme.", displayName = "Description"), - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key"), - @YamlProperty(name = "url", type = "string", required = true, description = "OpenID Connect URL to discover OAuth2 configuration values.", displayName = "Url") + @YamlProperty(name = "description", type = "string", description = "A short description for security scheme.", displayName = "Description"), + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key"), + @YamlProperty(name = "url", type = "string", required = true, description = "OpenId Connect URL to discover OAuth2 configuration values.", displayName = "Url") } ) public static class OpenIdConnectDefinitionDeserializer extends YamlDeserializerBase { @@ -10885,14 +10752,14 @@ protected boolean setProperty(OpenIdConnectDefinition target, String propertyKey types = org.apache.camel.model.OptimisticLockRetryPolicyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Optimistic Lock Retry Policy", - description = "Configures the retry policy for optimistic locking in the Aggregate EIP, controlling retry attempts and delays on version conflicts", + description = "To configure optimistic locking", deprecated = false, properties = { - @YamlProperty(name = "exponentialBackOff", type = "boolean", defaultValue = "true", description = "Whether to enable exponential backoff, so each subsequent retry delay is doubled until the maximum retry delay is reached.", displayName = "Exponential Back Off"), - @YamlProperty(name = "maximumRetries", type = "number", description = "Sets the maximum number of retries before giving up on acquiring the optimistic lock.", displayName = "Maximum Retries"), - @YamlProperty(name = "maximumRetryDelay", type = "string", defaultValue = "1000", description = "Sets the upper bound on retry delay in milliseconds to prevent delays from growing unbounded when using exponential or random backoff.", displayName = "Maximum Retry Delay"), - @YamlProperty(name = "randomBackOff", type = "boolean", defaultValue = "false", description = "Whether to enable random backoff, which uses a random delay between 0 and the computed retry delay to avoid thundering herd problems.", displayName = "Random Back Off"), - @YamlProperty(name = "retryDelay", type = "string", defaultValue = "50", description = "Sets the delay in milliseconds between retry attempts when the optimistic lock fails.", displayName = "Retry Delay") + @YamlProperty(name = "exponentialBackOff", type = "boolean", defaultValue = "true", description = "Enable exponential backoff", displayName = "Exponential Back Off"), + @YamlProperty(name = "maximumRetries", type = "number", description = "Sets the maximum number of retries", displayName = "Maximum Retries"), + @YamlProperty(name = "maximumRetryDelay", type = "string", defaultValue = "1000", description = "Sets the upper value of retry in millis between retries, when using exponential or random backoff", displayName = "Maximum Retry Delay"), + @YamlProperty(name = "randomBackOff", type = "boolean", defaultValue = "false", description = "Enables random backoff", displayName = "Random Back Off"), + @YamlProperty(name = "retryDelay", type = "string", defaultValue = "50", description = "Sets the delay in millis between retries", displayName = "Retry Delay") } ) public static class OptimisticLockRetryPolicyDefinitionDeserializer extends YamlDeserializerBase { @@ -10948,13 +10815,13 @@ protected boolean setProperty(OptimisticLockRetryPolicyDefinition target, types = org.apache.camel.model.OtherwiseDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Otherwise", - description = "Defines the default branch within a Choice EIP that executes when no When condition matches", + description = "Route to be executed when all other choices evaluate to false", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -11068,14 +10935,14 @@ protected boolean setProperty(OutputDefinition target, String propertyKey, types = org.apache.camel.model.OutputTypeDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Output Type", - description = "Declares the expected output data type for a route. Camel will apply a data type transformer if the actual message type differs at runtime.", + description = "Set the expected data type of the output message. If the actual message type is different at runtime, camel look for a required Transformer and apply if exists. If validate attribute is true then camel applies Validator as well. Type name consists of two parts, 'scheme' and 'name' connected with ':'. For Java type 'name' is a fully qualified class name. For example {code java:java.lang.String} , {code json:ABCOrder} . It's also possible to specify only scheme part, so that it works like a wildcard. If only 'xml' is specified, all the XML message matches. It's handy to add only one transformer/validator for all the XML-Java transformation.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "urn", type = "string", required = true, description = "The output type URN, such as java:fully.qualified.ClassName or json:SchemaName.", displayName = "Urn"), - @YamlProperty(name = "validate", type = "boolean", defaultValue = "false", description = "Whether to validate the output type.", displayName = "Validate") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "urn", type = "string", required = true, description = "Set output type URN.", displayName = "Urn"), + @YamlProperty(name = "validate", type = "boolean", defaultValue = "false", description = "Whether if validation is required for this output type.", displayName = "Validate") } ) public static class OutputTypeDefinitionDeserializer extends YamlDeserializerBase { @@ -11131,24 +10998,24 @@ protected boolean setProperty(OutputTypeDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.PGPDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "PGP (Pretty Good Privacy Cryptographic)", - description = "Encrypt and decrypt messages using Java Cryptographic Extension (JCE) and PGP", + description = "Encrypt and decrypt messages using Java Cryptographic Extension (JCE) and PGP.", deprecated = false, properties = { - @YamlProperty(name = "algorithm", type = "number", description = "Symmetric key encryption algorithm; possible values are defined in org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags. Only relevant for encrypting.", displayName = "Algorithm"), + @YamlProperty(name = "algorithm", type = "number", description = "Symmetric key encryption algorithm; possible values are defined in org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags; for example 2 (= TRIPLE DES), 3 (= CAST5), 4 (= BLOWFISH), 6 (= DES), 7 (= AES_128). Only relevant for encrypting.", displayName = "Algorithm"), @YamlProperty(name = "armored", type = "boolean", defaultValue = "false", description = "This option will cause PGP to base64 encode the encrypted text, making it available for copy/paste, etc.", displayName = "Armored"), - @YamlProperty(name = "compressionAlgorithm", type = "number", description = "Compression algorithm; possible values are defined in org.bouncycastle.bcpg.CompressionAlgorithmTags. Only relevant for encrypting.", displayName = "Compression Algorithm"), - @YamlProperty(name = "hashAlgorithm", type = "number", description = "Signature hash algorithm; possible values are defined in org.bouncycastle.bcpg.HashAlgorithmTags. Only relevant for signing.", displayName = "Hash Algorithm"), + @YamlProperty(name = "compressionAlgorithm", type = "number", description = "Compression algorithm; possible values are defined in org.bouncycastle.bcpg.CompressionAlgorithmTags; for example 0 (= UNCOMPRESSED), 1 (= ZIP), 2 (= ZLIB), 3 (= BZIP2). Only relevant for encrypting.", displayName = "Compression Algorithm"), + @YamlProperty(name = "hashAlgorithm", type = "number", description = "Signature hash algorithm; possible values are defined in org.bouncycastle.bcpg.HashAlgorithmTags; for example 2 (= SHA1), 8 (= SHA256), 9 (= SHA384), 10 (= SHA512), 11 (=SHA224). Only relevant for signing.", displayName = "Hash Algorithm"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "integrity", type = "boolean", defaultValue = "true", description = "Adds an integrity check/sign into the encryption file.", displayName = "Integrity"), + @YamlProperty(name = "integrity", type = "boolean", defaultValue = "true", description = "Adds an integrity check/sign into the encryption file. The default value is true.", displayName = "Integrity"), @YamlProperty(name = "keyFileName", type = "string", description = "Filename of the keyring; must be accessible as a classpath resource (but you can specify a location in the file system by using the file: prefix).", displayName = "Key File Name"), - @YamlProperty(name = "keyUserid", type = "string", description = "The user ID of the key in the PGP keyring used during encryption. Can also be only a part of a user ID.", displayName = "Key Userid"), + @YamlProperty(name = "keyUserid", type = "string", description = "The user ID of the key in the PGP keyring used during encryption. Can also be only a part of a user ID. For example, if the user ID is Test User then you can use the part Test User or to address the user ID.", displayName = "Key Userid"), @YamlProperty(name = "password", type = "string", description = "Password used when opening the private key (not used for encryption).", displayName = "Password"), - @YamlProperty(name = "provider", type = "string", description = "Java Cryptography Extension (JCE) provider, default is Bouncy Castle (BC). Alternatively you can use, for example, the IAIK JCE provider.", displayName = "Provider"), + @YamlProperty(name = "provider", type = "string", description = "Java Cryptography Extension (JCE) provider, default is Bouncy Castle (BC). Alternatively you can use, for example, the IAIK JCE provider; in this case the provider must be registered beforehand and the Bouncy Castle provider must not be registered beforehand. The Sun JCE provider does not work.", displayName = "Provider"), @YamlProperty(name = "signatureKeyFileName", type = "string", description = "Filename of the keyring to use for signing (during encryption) or for signature verification (during decryption); must be accessible as a classpath resource (but you can specify a location in the file system by using the file: prefix).", displayName = "Signature Key File Name"), - @YamlProperty(name = "signatureKeyRing", type = "string", description = "Keyring used for signing/verifying as byte array. You cannot set the signatureKeyFileName and signatureKeyRing at the same time.", displayName = "Signature Key Ring"), - @YamlProperty(name = "signatureKeyUserid", type = "string", description = "User ID of the key in the PGP keyring used for signing (during encryption) or signature verification (during decryption).", displayName = "Signature Key Userid"), + @YamlProperty(name = "signatureKeyRing", type = "string", description = "Keyring used for signing/verifying as byte array. You can not set the signatureKeyFileName and signatureKeyRing at the same time.", displayName = "Signature Key Ring"), + @YamlProperty(name = "signatureKeyUserid", type = "string", description = "User ID of the key in the PGP keyring used for signing (during encryption) or signature verification (during decryption). During the signature verification process the specified User ID restricts the public keys from the public keyring which can be used for the verification. If no User ID is specified for the signature verficiation then any public key in the public keyring can be used for the verification. Can also be only a part of a user ID. For example, if the user ID is Test User then you can use the part Test User or to address the User ID.", displayName = "Signature Key Userid"), @YamlProperty(name = "signaturePassword", type = "string", description = "Password used when opening the private key used for signing (during encryption).", displayName = "Signature Password"), - @YamlProperty(name = "signatureVerificationOption", type = "string", description = "Controls the behavior for verifying the signature during unmarshaling. Possible values: optional, required, ignore, no_signature_allowed.", displayName = "Signature Verification Option") + @YamlProperty(name = "signatureVerificationOption", type = "string", description = "Controls the behavior for verifying the signature during unmarshaling. There are 4 values possible: optional: The PGP message may or may not contain signatures; if it does contain signatures, then a signature verification is executed. required: The PGP message must contain at least one signature; if this is not the case an exception (PGPException) is thrown. A signature verification is executed. ignore: Contained signatures in the PGP message are ignored; no signature verification is executed. no_signature_allowed: The PGP message must not contain a signature; otherwise an exception (PGPException) is thrown.", displayName = "Signature Verification Option") } ) public static class PGPDataFormatDeserializer extends YamlDeserializerBase { @@ -11254,15 +11121,16 @@ protected boolean setProperty(PGPDataFormat target, String propertyKey, String p types = org.apache.camel.model.dataformat.PQCDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "PQC (Post-Quantum Cryptography)", - description = "Encrypt and decrypt messages using Post-Quantum Cryptography Key Encapsulation Mechanisms (KEM)", + description = "Encrypt and decrypt messages using Post-Quantum Cryptography Key Encapsulation Mechanisms (KEM).", deprecated = false, properties = { + @YamlProperty(name = "bufferSize", type = "number", defaultValue = "4096", description = "The size of the buffer used for streaming encryption/decryption.", displayName = "Buffer Size"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "keyEncapsulationAlgorithm", type = "enum:MLKEM,BIKE,HQC,CMCE,SABER,FRODO,NTRU,NTRULPRime,SNTRUPrime,KYBER", defaultValue = "MLKEM", description = "The Post-Quantum KEM algorithm to use for key encapsulation.", displayName = "Key Encapsulation Algorithm"), - @YamlProperty(name = "keyGenerator", type = "string", description = "Refers to a custom KeyGenerator to lookup from the registry for KEM operations.", displayName = "Key Generator"), - @YamlProperty(name = "keyPair", type = "string", description = "Refers to the KeyPair to lookup from the registry to use for KEM operations.", displayName = "Key Pair"), + @YamlProperty(name = "keyEncapsulationAlgorithm", type = "enum:MLKEM,BIKE,HQC,CMCE,SABER,FRODO,NTRU,NTRULPRime,SNTRUPrime,KYBER", defaultValue = "MLKEM", description = "The Post-Quantum KEM algorithm to use for key encapsulation. Supported values: MLKEM, BIKE, HQC, CMCE, SABER, FRODO, NTRU, NTRULPRime, SNTRUPrime, KYBER", displayName = "Key Encapsulation Algorithm"), + @YamlProperty(name = "keyGenerator", type = "string", description = "Refers to a custom KeyGenerator to lookup from the register for KEM operations.", displayName = "Key Generator"), + @YamlProperty(name = "keyPair", type = "string", description = "Refers to the KeyPair to lookup from the register to use for KEM operations.", displayName = "Key Pair"), @YamlProperty(name = "provider", type = "string", description = "The JCE security provider to use.", displayName = "Provider"), - @YamlProperty(name = "symmetricKeyAlgorithm", type = "enum:AES,ARIA,CAMELLIA,CAST6,DSTU7624,GOST3412_2015,SEED,SM4,CHACHA7539", defaultValue = "AES", description = "The symmetric encryption algorithm to use with the shared secret. Only algorithms that support authenticated encryption (AEAD) are allowed: AES, ARIA, CAMELLIA, CAST6, DSTU7624, GOST3412_2015, SEED and SM4 are encrypted with GCM, and CHACHA7539 with ChaCha20-Poly1305.", displayName = "Symmetric Key Algorithm"), + @YamlProperty(name = "symmetricKeyAlgorithm", type = "enum:AES,ARIA,RC2,RC5,CAMELLIA,CAST5,CAST6,CHACHA7539,DSTU7624,GOST28147,GOST3412_2015,GRAIN128,HC128,HC256,SALSA20,SEED,SM4,DESEDE", defaultValue = "AES", description = "The symmetric encryption algorithm to use with the shared secret. Supported values: AES, ARIA, RC2, RC5, CAMELLIA, CAST5, CAST6, CHACHA7539, etc.", displayName = "Symmetric Key Algorithm"), @YamlProperty(name = "symmetricKeyLength", type = "number", defaultValue = "128", description = "The length (in bits) of the symmetric key.", displayName = "Symmetric Key Length") } ) @@ -11281,6 +11149,11 @@ protected boolean setProperty(PQCDataFormat target, String propertyKey, String p Node node) { propertyKey = org.apache.camel.util.StringHelper.dashToCamelCase(propertyKey); switch(propertyKey) { + case "bufferSize": { + String val = asText(node); + target.setBufferSize(val); + break; + } case "id": { String val = asText(node); target.setId(val); @@ -11329,12 +11202,12 @@ protected boolean setProperty(PQCDataFormat target, String propertyKey, String p types = org.apache.camel.model.PackageScanDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Package Scan", - description = "Scans Java packages on the classpath for RouteBuilder classes to auto-discover and register routes", + description = "Scans for Java org.apache.camel.builder.RouteBuilder classes in java packages", deprecated = false, properties = { @YamlProperty(name = "excludes", type = "array:string", description = "Exclude finding route builder from these java package names.", displayName = "Excludes"), @YamlProperty(name = "includes", type = "array:string", description = "Include finding route builder from these java package names.", displayName = "Includes"), - @YamlProperty(name = "package", type = "array:string", description = "Java package names to use for scanning for route builder classes.", displayName = "Package") + @YamlProperty(name = "package", type = "array:string", description = "Sets the java package names to use for scanning for route builder classes", displayName = "Package") } ) public static class PackageScanDefinitionDeserializer extends YamlDeserializerBase { @@ -11380,20 +11253,20 @@ protected boolean setProperty(PackageScanDefinition target, String propertyKey, types = org.apache.camel.model.rest.ParamDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Param", - description = "Defines a parameter for a REST operation, specifying its type, name, data type, and whether it is required", + description = "To specify the rest operation parameters.", deprecated = false, properties = { - @YamlProperty(name = "allowableValues", type = "array:org.apache.camel.model.ValueDefinition", description = "List of allowable values for the parameter (enum).", displayName = "Allowable Values"), + @YamlProperty(name = "allowableValues", type = "array:org.apache.camel.model.ValueDefinition", description = "Sets the parameter list of allowable values (enum).", displayName = "Allowable Values"), @YamlProperty(name = "arrayType", type = "string", defaultValue = "string", description = "Sets the parameter array type. Required if data type is array. Describes the type of items in the array.", displayName = "Array Type"), @YamlProperty(name = "collectionFormat", type = "enum:csv,multi,pipes,ssv,tsv", defaultValue = "csv", description = "Sets the parameter collection format.", displayName = "Collection Format"), - @YamlProperty(name = "dataFormat", type = "string", description = "The data format of the parameter such as binary, date, date-time, or password.", displayName = "Data Format"), - @YamlProperty(name = "dataType", type = "string", defaultValue = "string", description = "Sets the parameter data type such as string, integer, or boolean.", displayName = "Data Type"), - @YamlProperty(name = "defaultValue", type = "string", description = "The default value of the parameter.", displayName = "Default Value"), - @YamlProperty(name = "description", type = "string", description = "Description of the parameter.", displayName = "Description"), - @YamlProperty(name = "examples", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Examples of the parameter.", displayName = "Examples"), - @YamlProperty(name = "name", type = "string", required = true, description = "The parameter name.", displayName = "Name"), + @YamlProperty(name = "dataFormat", type = "string", description = "Sets the parameter data format.", displayName = "Data Format"), + @YamlProperty(name = "dataType", type = "string", defaultValue = "string", description = "Sets the parameter data type.", displayName = "Data Type"), + @YamlProperty(name = "defaultValue", type = "string", description = "Sets the parameter default value.", displayName = "Default Value"), + @YamlProperty(name = "description", type = "string", description = "Sets the parameter description.", displayName = "Description"), + @YamlProperty(name = "examples", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Sets the parameter examples.", displayName = "Examples"), + @YamlProperty(name = "name", type = "string", required = true, description = "Sets the parameter name.", displayName = "Name"), @YamlProperty(name = "required", type = "boolean", defaultValue = "true", description = "Sets the parameter required flag.", displayName = "Required"), - @YamlProperty(name = "type", type = "enum:body,formData,header,path,query", defaultValue = "path", description = "Sets the parameter type such as body, form, header, path, or query.", displayName = "Type") + @YamlProperty(name = "type", type = "enum:body,formData,header,path,query", defaultValue = "path", description = "Sets the parameter type.", displayName = "Type") } ) public static class ParamDefinitionDeserializer extends YamlDeserializerBase { @@ -11478,13 +11351,13 @@ protected boolean setProperty(ParamDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.ParquetAvroDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Parquet File", - description = "Parquet Avro serialization and de-serialization", + description = "Parquet Avro serialization and de-serialization.", deprecated = false, properties = { @YamlProperty(name = "compressionCodecName", type = "enum:UNCOMPRESSED,SNAPPY,GZIP,LZO,BROTLI,LZ4,ZSTD,LZ4_RAW", defaultValue = "GZIP", description = "Compression codec to use when marshalling.", displayName = "Compression Codec Name"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator of records or read all the records at once.", displayName = "Lazy Load"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class to use when (un)marshalling. If omitted, parquet files are converted into Avro GenericRecords for unmarshalling and input objects are assumed as GenericRecords for marshalling.", displayName = "Unmarshal Type") + @YamlProperty(name = "unmarshalType", type = "string", description = "Class to use when (un)marshalling. If omitted, parquet files are converted into Avro's GenericRecords for unmarshalling and input objects are assumed as GenericRecords for marshalling.", displayName = "Unmarshal Type") } ) public static class ParquetAvroDataFormatDeserializer extends YamlDeserializerBase { @@ -11540,32 +11413,32 @@ protected boolean setProperty(ParquetAvroDataFormat target, String propertyKey, types = org.apache.camel.model.rest.PatchDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Patch", - description = "Defines an HTTP PATCH operation in the REST DSL", + description = "Rest PATCH command", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. The default value is true.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), @YamlProperty(name = "deprecated", type = "boolean", defaultValue = "false", description = "Marks this rest operation as deprecated in OpenApi documentation.", displayName = "Deprecated"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data. This option will override what may be configured on a parent level.", displayName = "Out Type"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), @YamlProperty(name = "param", type = "array:org.apache.camel.model.rest.ParamDefinition", description = "Information about parameters for this REST operation", displayName = "Param"), @YamlProperty(name = "path", type = "string", description = "The path mapping URIs of this REST operation such as /{id}.", displayName = "Path"), - @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), @YamlProperty(name = "responseMessage", type = "array:org.apache.camel.model.rest.ResponseMessageDefinition", description = "Response details for this REST operation", displayName = "Response Message"), - @YamlProperty(name = "routeId", type = "string", description = "The route id this REST service will refer to.", displayName = "Route Id"), + @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), @YamlProperty(name = "security", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Security settings for this REST operation", displayName = "Security"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "streamCache", type = "boolean", defaultValue = "false", description = "Whether stream caching is enabled on this rest operation.", displayName = "Stream Cache"), @YamlProperty(name = "to", type = "object:org.apache.camel.model.ToDefinition", description = "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", displayName = "To"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data. This option will override what may be configured on a parent level.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") } ) public static class PatchDefinitionDeserializer extends YamlDeserializerBase { @@ -11711,15 +11584,15 @@ protected boolean setProperty(PatchDefinition target, String propertyKey, types = org.apache.camel.model.PausableDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Pausable", - description = "Pauses a consumer based on a condition, allowing it to be resumed later from the last known offset. Useful for controlling ingestion rate on polling consumers.", + description = "Pausable EIP to support resuming processing from last known offset.", deprecated = false, properties = { - @YamlProperty(name = "consumerListener", type = "string", required = true, description = "The consumer listener to use for pausing and resuming the consumer.", displayName = "Consumer Listener"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "untilCheck", type = "string", required = true, description = "Predicate to evaluate whether the processing can resume. Returns true if consumption can resume, or false otherwise.", displayName = "Until Check") + @YamlProperty(name = "consumerListener", type = "string", required = true, description = "Sets the consumer listener to use", displayName = "Consumer Listener"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "untilCheck", type = "string", required = true, description = "References to a java.util.function.Predicate to use for until checks. The predicate is responsible for evaluating whether the processing can resume or not. Such predicate should return true if the consumption can resume, or false otherwise. The exact point of when the predicate is called is dependent on the component, and it may be called on either one of the available events. Implementations should not assume the predicate to be called at any specific point.", displayName = "Until Check") } ) public static class PausableDefinitionDeserializer extends YamlDeserializerBase { @@ -11780,13 +11653,13 @@ protected boolean setProperty(PausableDefinition target, String propertyKey, types = org.apache.camel.model.PipelineDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Pipeline", - description = "Processes the message through a sequence of steps where the output of each step becomes the input of the next", + description = "Routes the message to a sequence of processors.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -11842,14 +11715,14 @@ protected boolean setProperty(PipelineDefinition target, String propertyKey, types = org.apache.camel.model.PolicyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Policy", - description = "Applies a policy to the route, such as a transactional policy or a custom policy for cross-cutting concerns", + description = "Defines a policy the route will use", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the policy to lookup in the registry.", displayName = "Ref"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "ref", type = "string", required = true, description = "Sets a reference to use for lookup the policy in the registry.", displayName = "Ref"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -11911,17 +11784,17 @@ protected boolean setProperty(PolicyDefinition target, String propertyKey, types = org.apache.camel.model.PollDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Poll", - description = "Polls a single message from a consumer endpoint and sets it as the message body. Useful for fetching data on-demand from file, database, or messaging endpoints.", + description = "Polls a message from a static endpoint", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "parameters", type = "object"), - @YamlProperty(name = "timeout", type = "string", defaultValue = "20000", description = "Timeout in millis when polling from the external service. The default value is 20000 (20 seconds).", displayName = "Timeout"), - @YamlProperty(name = "uri", type = "string", required = true, description = "The uri of the endpoint to poll a single message from. The result is stored in the original message body (or in a variable if variableReceive is set).", displayName = "Uri"), - @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive") + @YamlProperty(name = "timeout", type = "string", defaultValue = "20000", description = "Timeout in millis when polling from the external service. The timeout has influence about the poll enrich behavior. It basically operations in three different modes: negative value - Waits until a message is available and then returns it. Warning that this method could block indefinitely if no messages are available. 0 - Attempts to receive a message exchange immediately without waiting and returning null if a message exchange is not available yet. positive value - Attempts to receive a message exchange, waiting up to the given timeout to expire if a message is not yet available. Returns null if timed out The default value is 20000 (20 seconds).", displayName = "Timeout"), + @YamlProperty(name = "uri", type = "string", required = true, description = "Sets the uri of the endpoint to poll from.", displayName = "Uri"), + @YamlProperty(name = "variableReceive", type = "string", 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. Important: When using receive variable then the received body is stored only in this variable and not on the current message.", displayName = "Variable Receive") } ) public static class PollDefinitionDeserializer extends YamlDeserializerEndpointAwareBase { @@ -11998,25 +11871,25 @@ protected boolean setProperty(PollDefinition target, String propertyKey, types = org.apache.camel.model.PollEnrichDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Poll Enrich", - description = "Enriches the message with additional data obtained by polling a consumer endpoint (such as a file or message queue). The polled data is merged using an aggregation strategy.", + description = "Enriches messages with data polled from a secondary resource", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "aggregateOnException", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method.", displayName = "Aggregate On Exception"), + @YamlProperty(name = "aggregateOnException", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method. For example to suppress the exception or set a custom message body etc.", displayName = "Aggregate On Exception"), @YamlProperty(name = "aggregationStrategy", type = "string", 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.", displayName = "Aggregation Strategy"), @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "string", description = "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicitly declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise if they are PollDynamicAware.", displayName = "Allow Optimised Components"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise if they are org.apache.camel.spi.PollDynamicAware", displayName = "Allow Optimised Components"), @YamlProperty(name = "autoStartComponents", type = "boolean", defaultValue = "true", description = "Whether to auto startup components when poll enricher is starting up.", displayName = "Auto Start Components"), - @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the ConsumerCache which is used to cache and reuse consumers when uris are reused. Use 0 for default cache size, or -1 to turn cache off.", displayName = "Cache Size"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression to compute the endpoint URI to poll-enrich from.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreInvalidEndpoint", type = "boolean", defaultValue = "false", description = "Whether to ignore an invalid endpoint URI when trying to create a consumer with that endpoint.", displayName = "Ignore Invalid Endpoint"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "timeout", type = "string", defaultValue = "-1", description = "Timeout in millis when polling from the external service. A negative value waits until a message is available (could block indefinitely). Zero attempts to receive immediately without waiting. A positive value waits up to the given timeout.", displayName = "Timeout"), - @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive") + @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ConsumerCache which is used to cache and reuse consumers when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the consumers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise consumers/endpoints are stored in memory in the caches. However, if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both consumers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non-frequent used consumers.", displayName = "Cache Size"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression that computes the endpoint uri to use as the resource endpoint to enrich from", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "ignoreInvalidEndpoint", type = "boolean", defaultValue = "false", description = "Ignore the invalidate endpoint exception when try to create a consumer with that endpoint", displayName = "Ignore Invalid Endpoint"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "timeout", type = "string", defaultValue = "-1", description = "Timeout in millis when polling from the external service. The timeout has influence about the poll enrich behavior. It basically operations in three different modes: negative value - Waits until a message is available and then returns it. Warning that this method could block indefinitely if no messages are available. 0 - Attempts to receive a message exchange immediately without waiting and returning null if a message exchange is not available yet. positive value - Attempts to receive a message exchange, waiting up to the given timeout to expire if a message is not yet available. Returns null if timed out The default value is -1 and therefore the method could block indefinitely, and therefore its recommended to use a timeout value", displayName = "Timeout"), + @YamlProperty(name = "variableReceive", type = "string", 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. Important: When using receive variable then the received body is stored only in this variable and not on the current message.", displayName = "Variable Receive") } ) public static class PollEnrichDefinitionDeserializer extends YamlDeserializerBase { @@ -12131,32 +12004,32 @@ protected boolean setProperty(PollEnrichDefinition target, String propertyKey, types = org.apache.camel.model.rest.PostDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Post", - description = "Defines an HTTP POST operation in the REST DSL", + description = "Rest POST command", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. The default value is true.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), @YamlProperty(name = "deprecated", type = "boolean", defaultValue = "false", description = "Marks this rest operation as deprecated in OpenApi documentation.", displayName = "Deprecated"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data. This option will override what may be configured on a parent level.", displayName = "Out Type"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), @YamlProperty(name = "param", type = "array:org.apache.camel.model.rest.ParamDefinition", description = "Information about parameters for this REST operation", displayName = "Param"), @YamlProperty(name = "path", type = "string", description = "The path mapping URIs of this REST operation such as /{id}.", displayName = "Path"), - @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), @YamlProperty(name = "responseMessage", type = "array:org.apache.camel.model.rest.ResponseMessageDefinition", description = "Response details for this REST operation", displayName = "Response Message"), - @YamlProperty(name = "routeId", type = "string", description = "The route id this REST service will refer to.", displayName = "Route Id"), + @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), @YamlProperty(name = "security", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Security settings for this REST operation", displayName = "Security"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "streamCache", type = "boolean", defaultValue = "false", description = "Whether stream caching is enabled on this rest operation.", displayName = "Stream Cache"), @YamlProperty(name = "to", type = "object:org.apache.camel.model.ToDefinition", description = "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", displayName = "To"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data. This option will override what may be configured on a parent level.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") } ) public static class PostDefinitionDeserializer extends YamlDeserializerBase { @@ -12302,11 +12175,11 @@ protected boolean setProperty(PostDefinition target, String propertyKey, types = org.apache.camel.model.validator.PredicateValidatorDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Predicate Validator", - description = "Uses a predicate expression to validate message data types at the route level", + description = "To use a predicate to perform validation on the route level.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The predicate expression to use for validation.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "type", type = "string", 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.", displayName = "Type") + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The predicate to use for validation.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "type", type = "string", description = "Set the data type name. If you specify 'xml:XYZ', the validator will be picked up if message type is 'xml:XYZ'. If you specify just 'xml', the validator matches with all of 'xml' message type like 'xml:ABC' or 'xml:DEF'.", displayName = "Type") } ) public static class PredicateValidatorDefinitionDeserializer extends YamlDeserializerBase { @@ -12347,14 +12220,14 @@ protected boolean setProperty(PredicateValidatorDefinition target, String proper types = org.apache.camel.model.ProcessDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Process", - description = "Invokes a custom Camel Processor for programmatic message processing in Java", + description = "Calls a Camel processor", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the Processor to lookup in the registry to use. Can use prefixes such as #bean:, #class:, or #type: to control how the processor is obtained.", displayName = "Ref") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the Processor to lookup in the registry to use. A Processor is a class of type org.apache.camel.Processor, which can are to be called by this EIP. In this processor you have custom Java code, that can work with the message, such as to do custom business logic, special message manipulations and so on. By default, the ref, will lookup the bean in the Camel registry. The ref can use prefix that controls how the processor is obtained. You can use #bean:myBean where myBean is the id of the Camel processor (lookup). Can also be used for creating new beans by their class name by prefixing with #class, eg #class:com.foo.MyClassType. And it is also possible to refer to singleton beans by their type in the registry by prefixing with #type: syntax, eg #type:com.foo.MyClassType", displayName = "Ref") } ) public static class ProcessDefinitionDeserializer extends YamlDeserializerBase { @@ -12410,10 +12283,10 @@ protected boolean setProperty(ProcessDefinition target, String propertyKey, types = org.apache.camel.model.PropertyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Property", - description = "Defines a key/value pair with a literal value, used for passing parameters in route templates and other configurations", + description = "A key value pair where the value is a literal value", deprecated = false, properties = { - @YamlProperty(name = "key", type = "string", required = true, description = "The name of the property.", displayName = "Key"), + @YamlProperty(name = "key", type = "string", required = true, description = "The name of the property", displayName = "Key"), @YamlProperty(name = "value", type = "string", required = true, description = "The property value.", displayName = "Value") } ) @@ -12455,12 +12328,12 @@ protected boolean setProperty(PropertyDefinition target, String propertyKey, types = org.apache.camel.model.PropertyExpressionDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Property Expression", - description = "Defines a key/value pair where the value is computed by an expression, used for passing dynamic parameters", + description = "A key value pair where the value is an expression.", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The property value as an expression.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "key", type = "string", required = true, description = "The property key.", displayName = "Key") + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Property values as an expression", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "key", type = "string", required = true, description = "Property key", displayName = "Key") } ) public static class PropertyExpressionDefinitionDeserializer extends YamlDeserializerBase { @@ -12511,29 +12384,29 @@ protected boolean setProperty(PropertyExpressionDefinition target, String proper types = org.apache.camel.model.dataformat.ProtobufDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Protobuf", - description = "Serialize and deserialize Java objects using Google's Protocol buffers", + description = "Serialize and deserialize Java objects using Google's Protocol buffers.", deprecated = false, properties = { @YamlProperty(name = "allowJmsType", type = "boolean", defaultValue = "false", description = "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", displayName = "Allow Jms Type"), - @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling.", displayName = "Allow Unmarshall Type"), - @YamlProperty(name = "autoDiscoverObjectMapper", type = "boolean", defaultValue = "false", description = "If set to true then Jackson will lookup for an objectMapper into the registry.", displayName = "Auto Discover Object Mapper"), - @YamlProperty(name = "autoDiscoverSchemaResolver", type = "boolean", defaultValue = "true", description = "When not disabled, the SchemaResolver will be looked up into the registry.", displayName = "Auto Discover Schema Resolver"), - @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows using different collection types than java.util.Collection based as default.", displayName = "Collection Type"), - @YamlProperty(name = "contentTypeFormat", type = "enum:native,json", defaultValue = "native", description = "Defines a content type format in which protobuf message will be serialized/deserialized from(to) the Java been. The format can either be native or json for either native protobuf or json fields representation.", displayName = "Content Type Format"), + @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used.", displayName = "Allow Unmarshall Type"), + @YamlProperty(name = "autoDiscoverObjectMapper", type = "boolean", defaultValue = "false", description = "If set to true then Jackson will lookup for an objectMapper into the registry", displayName = "Auto Discover Object Mapper"), + @YamlProperty(name = "autoDiscoverSchemaResolver", type = "boolean", defaultValue = "true", description = "When not disabled, the SchemaResolver will be looked up into the registry", displayName = "Auto Discover Schema Resolver"), + @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", displayName = "Collection Type"), + @YamlProperty(name = "contentTypeFormat", type = "enum:native,json", defaultValue = "native", description = "Defines a content type format in which protobuf message will be serialized/deserialized from(to) the Java been. The format can either be native or json for either native protobuf or json fields representation. The default value is native.", displayName = "Content Type Format"), @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), - @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated by comma.", displayName = "Disable Features"), - @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated by comma.", displayName = "Enable Features"), + @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Disable Features"), + @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Enable Features"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "include", type = "string", description = "If you want to marshal a pojo to JSON, and the pojo has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL.", displayName = "Include"), - @YamlProperty(name = "instanceClass", type = "string", description = "Name of class to use when unmarshalling.", displayName = "Instance Class"), - @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations.", displayName = "Json View"), + @YamlProperty(name = "include", type = "string", description = "If you want to marshal a pojo to JSON, and the pojo has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL", displayName = "Include"), + @YamlProperty(name = "instanceClass", type = "string", description = "Name of class to use when unmarshalling", displayName = "Instance Class"), + @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations", displayName = "Json View"), @YamlProperty(name = "library", type = "enum:GoogleProtobuf,Jackson", defaultValue = "GoogleProtobuf", description = "Which Protobuf library to use.", displayName = "Library"), @YamlProperty(name = "moduleClassNames", type = "string", description = "To use custom Jackson modules com.fasterxml.jackson.databind.Module specified as a String with FQN class names. Multiple classes can be separated by comma.", displayName = "Module Class Names"), @YamlProperty(name = "moduleRefs", type = "string", description = "To use custom Jackson modules referred from the Camel registry. Multiple modules can be separated by comma.", displayName = "Module Refs"), @YamlProperty(name = "objectMapper", type = "string", description = "Lookup and use the existing ObjectMapper with the given id when using Jackson.", displayName = "Object Mapper"), @YamlProperty(name = "schemaResolver", type = "string", description = "Optional schema resolver used to lookup schemas for the data in transit.", displayName = "Schema Resolver"), @YamlProperty(name = "timezone", type = "string", description = "If set then Jackson will use the Timezone when marshalling/unmarshalling.", displayName = "Timezone"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling.", displayName = "Unmarshal Type"), + @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling", displayName = "Unmarshal Type"), @YamlProperty(name = "useDefaultObjectMapper", type = "boolean", defaultValue = "true", description = "Whether to lookup and use default Jackson ObjectMapper from the registry.", displayName = "Use Default Object Mapper"), @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "To unmarshal to a List of Map or a List of Pojo.", displayName = "Use List") } @@ -12680,32 +12553,32 @@ protected boolean setProperty(ProtobufDataFormat target, String propertyKey, types = org.apache.camel.model.rest.PutDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Put", - description = "Defines an HTTP PUT operation in the REST DSL", + description = "Rest PUT command", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. The default value is true.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), @YamlProperty(name = "deprecated", type = "boolean", defaultValue = "false", description = "Marks this rest operation as deprecated in OpenApi documentation.", displayName = "Deprecated"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data. This option will override what may be configured on a parent level.", displayName = "Out Type"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), @YamlProperty(name = "param", type = "array:org.apache.camel.model.rest.ParamDefinition", description = "Information about parameters for this REST operation", displayName = "Param"), @YamlProperty(name = "path", type = "string", description = "The path mapping URIs of this REST operation such as /{id}.", displayName = "Path"), - @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), @YamlProperty(name = "responseMessage", type = "array:org.apache.camel.model.rest.ResponseMessageDefinition", description = "Response details for this REST operation", displayName = "Response Message"), - @YamlProperty(name = "routeId", type = "string", description = "The route id this REST service will refer to.", displayName = "Route Id"), + @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), @YamlProperty(name = "security", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Security settings for this REST operation", displayName = "Security"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "streamCache", type = "boolean", defaultValue = "false", description = "Whether stream caching is enabled on this rest operation.", displayName = "Stream Cache"), @YamlProperty(name = "to", type = "object:org.apache.camel.model.ToDefinition", description = "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", displayName = "To"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data. This option will override what may be configured on a parent level.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") } ) public static class PutDefinitionDeserializer extends YamlDeserializerBase { @@ -12852,13 +12725,13 @@ protected boolean setProperty(PutDefinition target, String propertyKey, String p types = org.apache.camel.model.language.PythonExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Python", - description = "Evaluates a Python expression", + description = "Evaluates a Python expression.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class PythonExpressionDeserializer extends YamlDeserializerBase { @@ -12923,7 +12796,7 @@ protected boolean setProperty(PythonExpression target, String propertyKey, types = org.apache.camel.model.loadbalancer.RandomLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Random Load Balancer", - description = "Load balancer that randomly selects a destination endpoint for each message", + description = "The destination endpoints are selected randomly.", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -12960,30 +12833,30 @@ protected boolean setProperty(RandomLoadBalancerDefinition target, String proper types = org.apache.camel.model.RecipientListDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Recipient List", - description = "Routes a message to a list of dynamically calculated endpoints, determined at runtime from an expression. Each recipient receives a copy of the message.", + description = "Route messages to a number of dynamically specified recipients", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "aggregationStrategy", type = "string", description = "Sets the AggregationStrategy to be used to assemble the replies from the recipients, into a single outgoing message.", displayName = "Aggregation Strategy"), - @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicitly declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the ProducerCache which is used to cache and reuse producers when uris are reused. Use 0 for default cache size, or -1 to turn cache off.", displayName = "Cache Size"), - @YamlProperty(name = "delimiter", type = "string", defaultValue = ",", description = "Delimiter used if the Expression returned multiple endpoints. Can be turned off using the value false.", displayName = "Delimiter"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "executorService", type = "string", description = "Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatically implied, and you do not have to enable that option as well.", displayName = "Executor Service"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", 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.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreInvalidEndpoints", type = "boolean", defaultValue = "false", description = "Whether to ignore an invalid endpoint URI when trying to create a producer with that endpoint.", displayName = "Ignore Invalid Endpoints"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the exchange to be sent. This can be used to deep-clone messages that should be sent, or any custom logic needed before the exchange is sent.", displayName = "On Prepare"), + @YamlProperty(name = "aggregationStrategy", type = "string", description = "Sets the AggregationStrategy to be used to assemble the replies from the recipients, into a single outgoing message from the RecipientList. By default Camel will use the last reply as the outgoing message. You can also use a POJO as the AggregationStrategy", displayName = "Aggregation Strategy"), + @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy", displayName = "Aggregation Strategy Method Allow Null"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise producers/endpoints are stored in memory in the caches. However if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both producers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non frequent used producers.", displayName = "Cache Size"), + @YamlProperty(name = "delimiter", type = "string", defaultValue = ",", description = "Delimiter used if the Expression returned multiple endpoints. Can be turned off using the value false. The default value is ,", displayName = "Delimiter"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "executorService", type = "string", description = "To use a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well.", displayName = "Executor Service"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression that returns which endpoints (url) to send the message to (the recipients). If the expression return an empty value then the message is not sent to any recipients.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "ignoreInvalidEndpoints", type = "boolean", defaultValue = "false", description = "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", displayName = "Ignore Invalid Endpoints"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the org.apache.camel.Exchange to be used send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send.", displayName = "On Prepare"), @YamlProperty(name = "parallelAggregate", type = "boolean", deprecated = true, defaultValue = "false", description = "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe.", displayName = "Parallel Aggregate"), - @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then sending messages to the recipients occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues.", displayName = "Parallel Processing"), - @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the UnitOfWork with the parent and each of the sub messages. Recipient List will by default not share unit of work between the parent exchange and each recipient exchange. This means each sub exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), - @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "Stops further processing if an exception or failure occurred during processing of an exchange and the caused exception will be thrown.", displayName = "Stop On Exception"), + @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then sending messages to the recipients occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the recipients which happens concurrently. When parallel processing is enabled, then the Camel routing engin will continue processing using last used thread from the parallel thread pool. However, if you want to use the original thread that called the recipient list, then make sure to enable the synchronous option as well. In parallel processing mode, you may want to also synchronous = true to force this EIP to process the sub-tasks using the upper bounds of the thread-pool. If using synchronous = false then Camel will allow its reactive routing engine to use as many threads as possible, which may be available due to sub-tasks using other thread-pools such as CompletableFuture.runAsync or others.", displayName = "Parallel Processing"), + @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Recipient List will by default not share unit of work between the parent exchange and each recipient exchange. This means each sub exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), + @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the recipient list will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The default behavior is to not stop but continue processing till the end", displayName = "Stop On Exception"), @YamlProperty(name = "streaming", type = "boolean", defaultValue = "false", description = "If enabled then Camel will process replies out-of-order, eg in the order they come back. If disabled, Camel will process replies in the same order as defined by the recipient list.", displayName = "Streaming"), @YamlProperty(name = "synchronous", type = "boolean", defaultValue = "false", description = "Sets whether synchronous processing should be strictly used. When enabled then the same thread is used to continue routing after the recipient list is complete, even if parallel processing is enabled.", displayName = "Synchronous"), - @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Sets a total timeout specified in millis, when using parallel processing. If the Recipient List hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Recipient List breaks out and continues.", displayName = "Timeout") + @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Sets a total timeout specified in millis, when using parallel processing. If the Recipient List hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Recipient List breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care.", displayName = "Timeout") } ) public static class RecipientListDefinitionDeserializer extends YamlDeserializerBase { @@ -13123,34 +12996,34 @@ protected boolean setProperty(RecipientListDefinition target, String propertyKey types = org.apache.camel.model.RedeliveryPolicyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Redelivery Policy", - description = "Configures message redelivery for error handling, including maximum retries, delay patterns, and backoff settings", + description = "To configure re-delivery for error handling", deprecated = false, properties = { @YamlProperty(name = "allowRedeliveryWhileStopping", type = "boolean", defaultValue = "true", description = "Controls whether to allow redelivery while stopping/shutting down a route that uses error handling.", displayName = "Allow Redelivery While Stopping"), @YamlProperty(name = "asyncDelayedRedelivery", type = "boolean", defaultValue = "false", description = "Allow asynchronous delayed redelivery. The route, in particular the consumer's component, must support the Asynchronous Routing Engine (e.g. seda).", displayName = "Async Delayed Redelivery"), - @YamlProperty(name = "backOffMultiplier", type = "number", defaultValue = "2.0", description = "Sets the multiplier applied to the previous redelivery delay to compute the next delay when using exponential backoff.", displayName = "Back Off Multiplier"), - @YamlProperty(name = "collisionAvoidanceFactor", type = "number", defaultValue = "0.15", description = "Sets the collision avoidance factor, which adds a random percentage of the delay to avoid thundering herd problems when multiple redeliveries happen simultaneously.", displayName = "Collision Avoidance Factor"), - @YamlProperty(name = "delayPattern", type = "string", description = "Sets the delay pattern for redeliveries using a pattern such as '0:1000;5:5000;10:30000' where each entry maps a redelivery count to a delay in milliseconds (e.g. redeliveries 0-4 use 1s delay, 5-9 use 5s, 10 use 30s).", displayName = "Delay Pattern"), - @YamlProperty(name = "disableRedelivery", type = "boolean", defaultValue = "false", description = "Disables redelivery (same as setting maximum redeliveries to 0).", displayName = "Disable Redelivery"), + @YamlProperty(name = "backOffMultiplier", type = "number", defaultValue = "2.0", description = "Sets the back off multiplier", displayName = "Back Off Multiplier"), + @YamlProperty(name = "collisionAvoidanceFactor", type = "number", defaultValue = "0.15", description = "Sets the collision avoidance factor", displayName = "Collision Avoidance Factor"), + @YamlProperty(name = "delayPattern", type = "string", description = "Sets the delay pattern with delay intervals.", displayName = "Delay Pattern"), + @YamlProperty(name = "disableRedelivery", type = "boolean", defaultValue = "false", description = "Disables redelivery (same as setting maximum redeliveries to 0)", displayName = "Disable Redelivery"), @YamlProperty(name = "exchangeFormatterRef", type = "string", description = "Sets the reference of the instance of org.apache.camel.spi.ExchangeFormatter to generate the log message from exchange.", displayName = "Exchange Formatter Ref"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "logContinued", type = "boolean", defaultValue = "false", description = "Whether continued exceptions should be logged or not. Can be used to include or reduce verbose logging.", displayName = "Log Continued"), - @YamlProperty(name = "logExhausted", type = "boolean", defaultValue = "true", description = "Whether exhausted exceptions should be logged or not. Can be used to include or reduce verbose logging.", displayName = "Log Exhausted"), - @YamlProperty(name = "logExhaustedMessageBody", type = "boolean", defaultValue = "false", description = "Whether exhausted message body should be logged including message history. Requires logExhaustedMessageHistory to be enabled.", displayName = "Log Exhausted Message Body"), - @YamlProperty(name = "logExhaustedMessageHistory", type = "boolean", defaultValue = "false", description = "Whether exhausted exceptions should be logged including message history. Can be used to include or reduce verbose logging.", displayName = "Log Exhausted Message History"), - @YamlProperty(name = "logHandled", type = "boolean", defaultValue = "false", description = "Whether handled exceptions should be logged or not. Can be used to include or reduce verbose logging.", displayName = "Log Handled"), - @YamlProperty(name = "logNewException", type = "boolean", defaultValue = "true", description = "Whether new exceptions should be logged or not. A new exception is an exception that was thrown while handling a previous exception.", displayName = "Log New Exception"), - @YamlProperty(name = "logRetryAttempted", type = "boolean", defaultValue = "true", description = "Whether retry attempts should be logged or not. Can be used to include or reduce verbose logging.", displayName = "Log Retry Attempted"), - @YamlProperty(name = "logRetryStackTrace", type = "boolean", defaultValue = "false", description = "Whether stack traces should be logged when a retry attempt failed. Can be used to include or reduce verbose logging.", displayName = "Log Retry Stack Trace"), - @YamlProperty(name = "logStackTrace", type = "boolean", defaultValue = "true", description = "Whether stack traces should be logged. Can be used to include or reduce verbose logging.", displayName = "Log Stack Trace"), - @YamlProperty(name = "maximumRedeliveries", type = "number", description = "Sets the maximum number of redeliveries. Use 0 for no redeliveries, or -1 to redeliver forever.", displayName = "Maximum Redeliveries"), - @YamlProperty(name = "maximumRedeliveryDelay", type = "string", defaultValue = "60000", description = "Sets the upper bound on redelivery delay in milliseconds when using exponential backoff, to prevent delays from growing unbounded.", displayName = "Maximum Redelivery Delay"), - @YamlProperty(name = "redeliveryDelay", type = "string", defaultValue = "1000", description = "Sets the initial delay in milliseconds before the first redelivery attempt.", displayName = "Redelivery Delay"), - @YamlProperty(name = "retriesExhaustedLogLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "Sets the logging level to use when all retries have been exhausted and the message is moved to the dead letter channel or failed.", displayName = "Retries Exhausted Log Level"), - @YamlProperty(name = "retryAttemptedLogInterval", type = "number", defaultValue = "1", description = "Sets how often to log redelivery attempts. For example, a value of 3 logs every 3rd redelivery attempt.", displayName = "Retry Attempted Log Interval"), - @YamlProperty(name = "retryAttemptedLogLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "DEBUG", description = "Sets the logging level to use when a redelivery attempt is made.", displayName = "Retry Attempted Log Level"), - @YamlProperty(name = "useCollisionAvoidance", type = "boolean", defaultValue = "false", description = "Enables collision avoidance, which adds a random factor to redelivery delays to prevent multiple simultaneous redeliveries from colliding.", displayName = "Use Collision Avoidance"), - @YamlProperty(name = "useExponentialBackOff", type = "boolean", defaultValue = "false", description = "Enables exponential backoff, so each subsequent redelivery delay is multiplied by the backOffMultiplier.", displayName = "Use Exponential Back Off") + @YamlProperty(name = "logContinued", type = "boolean", defaultValue = "false", description = "Sets whether continued exceptions should be logged or not. Can be used to include or reduce verbose.", displayName = "Log Continued"), + @YamlProperty(name = "logExhausted", type = "boolean", defaultValue = "true", description = "Sets whether exhausted exceptions should be logged or not. Can be used to include or reduce verbose.", displayName = "Log Exhausted"), + @YamlProperty(name = "logExhaustedMessageBody", type = "boolean", defaultValue = "false", description = "Sets whether exhausted message body should be logged including message history or not (supports property placeholders). Can be used to include or reduce verbose. Requires logExhaustedMessageHistory to be enabled.", displayName = "Log Exhausted Message Body"), + @YamlProperty(name = "logExhaustedMessageHistory", type = "boolean", defaultValue = "false", description = "Sets whether exhausted exceptions should be logged including message history or not (supports property placeholders). Can be used to include or reduce verbose.", displayName = "Log Exhausted Message History"), + @YamlProperty(name = "logHandled", type = "boolean", defaultValue = "false", description = "Sets whether handled exceptions should be logged or not. Can be used to include or reduce verbose.", displayName = "Log Handled"), + @YamlProperty(name = "logNewException", type = "boolean", defaultValue = "true", description = "Sets whether new exceptions should be logged or not. Can be used to include or reduce verbose. A new exception is an exception that was thrown while handling a previous exception.", displayName = "Log New Exception"), + @YamlProperty(name = "logRetryAttempted", type = "boolean", defaultValue = "true", description = "Sets whether retry attempts should be logged or not. Can be used to include or reduce verbose.", displayName = "Log Retry Attempted"), + @YamlProperty(name = "logRetryStackTrace", type = "boolean", defaultValue = "false", description = "Sets whether stack traces should be logged when an retry attempt failed. Can be used to include or reduce verbose.", displayName = "Log Retry Stack Trace"), + @YamlProperty(name = "logStackTrace", type = "boolean", defaultValue = "true", description = "Sets whether stack traces should be logged. Can be used to include or reduce verbose.", displayName = "Log Stack Trace"), + @YamlProperty(name = "maximumRedeliveries", type = "number", description = "Sets the maximum redeliveries x = redeliver at most x times 0 = no redeliveries -1 = redeliver forever", displayName = "Maximum Redeliveries"), + @YamlProperty(name = "maximumRedeliveryDelay", type = "string", defaultValue = "60000", description = "Sets the maximum delay between redelivery", displayName = "Maximum Redelivery Delay"), + @YamlProperty(name = "redeliveryDelay", type = "string", defaultValue = "1000", description = "Sets the initial redelivery delay", displayName = "Redelivery Delay"), + @YamlProperty(name = "retriesExhaustedLogLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "Sets the logging level to use when retries have been exhausted", displayName = "Retries Exhausted Log Level"), + @YamlProperty(name = "retryAttemptedLogInterval", type = "number", defaultValue = "1", description = "Sets the interval to use for logging retry attempts", displayName = "Retry Attempted Log Interval"), + @YamlProperty(name = "retryAttemptedLogLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "DEBUG", description = "Sets the logging level to use for logging retry attempts", displayName = "Retry Attempted Log Level"), + @YamlProperty(name = "useCollisionAvoidance", type = "boolean", defaultValue = "false", description = "Turn on collision avoidance.", displayName = "Use Collision Avoidance"), + @YamlProperty(name = "useExponentialBackOff", type = "boolean", defaultValue = "false", description = "Turn on exponential back off", displayName = "Use Exponential Back Off") } ) public static class RedeliveryPolicyDefinitionDeserializer extends YamlDeserializerBase { @@ -13307,11 +13180,11 @@ protected boolean setProperty(RedeliveryPolicyDefinition target, String property types = org.apache.camel.model.errorhandler.RefErrorHandlerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Ref Error Handler", - description = "References a custom error handler bean from the registry by its name", + description = "References to an existing or custom error handler.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to an existing or custom error handler to lookup from the registry.", displayName = "Ref") + @YamlProperty(name = "ref", type = "string", required = true, description = "References to an existing or custom error handler.", displayName = "Ref") } ) public static class RefErrorHandlerDefinitionDeserializer extends YamlDeserializerBase { @@ -13358,13 +13231,13 @@ protected boolean setProperty(RefErrorHandlerDefinition target, String propertyK types = org.apache.camel.model.language.RefExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Ref", - description = "Uses an existing expression from the registry", + description = "Uses an existing expression from the registry.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class RefExpressionDeserializer extends YamlDeserializerBase { @@ -13430,14 +13303,14 @@ protected boolean setProperty(RefExpression target, String propertyKey, String p types = org.apache.camel.model.RemoveHeaderDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Remove Header", - description = "Removes a specific header from the message by name", + description = "Removes a named header from the message", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of header to remove.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of header to remove", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class RemoveHeaderDefinitionDeserializer extends YamlDeserializerBase { @@ -13499,15 +13372,15 @@ protected boolean setProperty(RemoveHeaderDefinition target, String propertyKey, types = org.apache.camel.model.RemoveHeadersDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Remove Headers", - description = "Removes all message headers whose names match a given pattern. Useful for stripping internal Camel headers before sending to external systems.", + description = "Removes message headers whose name matches a specified pattern", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "excludePattern", type = "string", description = "Name or pattern of headers to not remove. You can use comma to separate multiple patterns.", displayName = "Exclude Pattern"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "pattern", type = "string", required = true, description = "Name or pattern of headers to remove. The pattern supports exact match, wildcard (pattern ends with ), and regular expression (all case-insensitive).", displayName = "Pattern") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "excludePattern", type = "string", description = "Name or patter of headers to not remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", displayName = "Exclude Pattern"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "pattern", type = "string", required = true, description = "Name or pattern of headers to remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", displayName = "Pattern") } ) public static class RemoveHeadersDefinitionDeserializer extends YamlDeserializerBase { @@ -13574,15 +13447,15 @@ protected boolean setProperty(RemoveHeadersDefinition target, String propertyKey types = org.apache.camel.model.RemovePropertiesDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Remove Properties", - description = "Removes all exchange properties whose names match a given pattern", + description = "Removes message exchange properties whose name matches a specified pattern", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "excludePattern", type = "string", description = "Name or pattern of properties to not remove. You can use comma to separate multiple patterns.", displayName = "Exclude Pattern"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "pattern", type = "string", required = true, description = "Name or pattern of properties to remove. Supports exact match, wildcard (ending with ), and regular expression (all case-insensitive).", displayName = "Pattern") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "excludePattern", type = "string", description = "Name or pattern of properties to not remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", displayName = "Exclude Pattern"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "pattern", type = "string", required = true, description = "Name or pattern of properties to remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", displayName = "Pattern") } ) public static class RemovePropertiesDefinitionDeserializer extends YamlDeserializerBase { @@ -13649,14 +13522,14 @@ protected boolean setProperty(RemovePropertiesDefinition target, String property types = org.apache.camel.model.RemovePropertyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Remove Property", - description = "Removes a specific exchange property by name", + description = "Removes a named property from the message exchange", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of the exchange property to remove.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of property to remove.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class RemovePropertyDefinitionDeserializer extends YamlDeserializerBase { @@ -13718,14 +13591,14 @@ protected boolean setProperty(RemovePropertyDefinition target, String propertyKe types = org.apache.camel.model.RemoveVariableDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Remove Variable", - description = "Removes a specific variable by name", + description = "Removes a named variable", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of the variable to remove.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of variable to remove.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class RemoveVariableDefinitionDeserializer extends YamlDeserializerBase { @@ -13786,16 +13659,16 @@ protected boolean setProperty(RemoveVariableDefinition target, String propertyKe types = org.apache.camel.model.ResequenceDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Resequence", - description = "Reorders messages based on a sequence expression, either in batch mode (collect and sort) or stream mode (continuous reordering with a timeout)", + description = "Resequences (re-order) messages based on an expression", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), @YamlProperty(name = "batchConfig", type = "object:org.apache.camel.model.config.BatchResequencerConfig", oneOf = "resequencerConfig"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to use for re-ordering the messages, such as a header with a sequence number.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to use for re-ordering the messages, such as a header with a sequence number", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), @YamlProperty(name = "streamConfig", type = "object:org.apache.camel.model.config.StreamResequencerConfig", oneOf = "resequencerConfig") } @@ -13881,33 +13754,33 @@ protected boolean setProperty(ResequenceDefinition target, String propertyKey, types = org.apache.camel.model.Resilience4jConfigurationDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Resilience4j Configuration", - description = "Configures Resilience4j settings for the Circuit Breaker EIP, such as failure rate threshold, wait duration, and sliding window parameters", + description = "Resilience4j Circuit Breaker EIP configuration", deprecated = false, properties = { @YamlProperty(name = "automaticTransitionFromOpenToHalfOpenEnabled", type = "boolean", defaultValue = "false", description = "Enables automatic transition from OPEN to HALF_OPEN state once the waitDurationInOpenState has passed.", displayName = "Automatic Transition From Open To Half Open Enabled"), - @YamlProperty(name = "bulkheadEnabled", type = "boolean", defaultValue = "false", description = "Whether bulkhead is enabled or not on the circuit breaker.", displayName = "Bulkhead Enabled"), + @YamlProperty(name = "bulkheadEnabled", type = "boolean", defaultValue = "false", description = "Whether bulkhead is enabled or not on the circuit breaker. Default is false.", displayName = "Bulkhead Enabled"), @YamlProperty(name = "bulkheadMaxConcurrentCalls", type = "number", defaultValue = "25", description = "Configures the max amount of concurrent calls the bulkhead will support.", displayName = "Bulkhead Max Concurrent Calls"), - @YamlProperty(name = "bulkheadMaxWaitDuration", type = "number", defaultValue = "0", description = "Configures a maximum amount of time which the calling thread will wait to enter the bulkhead.", displayName = "Bulkhead Max Wait Duration"), + @YamlProperty(name = "bulkheadMaxWaitDuration", type = "number", defaultValue = "0", description = "Configures a maximum amount of time which the calling thread will wait to enter the bulkhead. If bulkhead has space available, entry is guaranteed and immediate. If bulkhead is full, calling threads will contest for space, if it becomes available. maxWaitDuration can be set to 0. Note: for threads running on an event-loop or equivalent (rx computation pool, etc), setting maxWaitDuration to 0 is highly recommended. Blocking an event-loop thread will most likely have a negative effect on application throughput.", displayName = "Bulkhead Max Wait Duration"), @YamlProperty(name = "circuitBreaker", type = "string", description = "Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreaker instance to lookup and use from the registry. When using this, then any other circuit breaker options are not in use.", displayName = "Circuit Breaker"), @YamlProperty(name = "config", type = "string", description = "Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreakerConfig instance to lookup and use from the registry.", displayName = "Config"), - @YamlProperty(name = "failureRateThreshold", type = "number", defaultValue = "50", description = "Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls.", displayName = "Failure Rate Threshold"), + @YamlProperty(name = "failureRateThreshold", type = "number", defaultValue = "50", description = "Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 50 percentage.", displayName = "Failure Rate Threshold"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreException", type = "array:string", description = "Configure a list of exceptions that are ignored and neither count as a failure nor success. Any exception matching or inheriting from one of the list will not count as a failure nor success, even if the exception is part of recordExceptions.", displayName = "Ignore Exception"), + @YamlProperty(name = "ignoreException", type = "array:string", description = "Configure a list of exceptions that are ignored and neither count as a failure nor success. Any exception matching or inheriting from one of the list will not count as a failure nor success, even if the exceptions is part of recordExceptions.", displayName = "Ignore Exception"), @YamlProperty(name = "micrometerEnabled", type = "boolean", defaultValue = "false", description = "Whether to enable collecting statistics using Micrometer. This requires adding camel-resilience4j-micrometer JAR to the classpath.", displayName = "Micrometer Enabled"), - @YamlProperty(name = "minimumNumberOfCalls", type = "number", defaultValue = "100", description = "Configures the minimum number of calls which are required (per sliding window period) before the CircuitBreaker can calculate the error rate.", displayName = "Minimum Number Of Calls"), - @YamlProperty(name = "permittedNumberOfCallsInHalfOpenState", type = "number", defaultValue = "10", description = "Configures the number of permitted calls when the CircuitBreaker is half open.", displayName = "Permitted Number Of Calls In Half Open State"), + @YamlProperty(name = "minimumNumberOfCalls", type = "number", defaultValue = "100", description = "Configures the minimum number of calls which are required (per sliding window period) before the CircuitBreaker can calculate the error rate. For example, if minimumNumberOfCalls is 10, then at least 10 calls must be recorded, before the failure rate can be calculated. If only 9 calls have been recorded the CircuitBreaker will not transition to open even if all 9 calls have failed. Default minimumNumberOfCalls is 100", displayName = "Minimum Number Of Calls"), + @YamlProperty(name = "permittedNumberOfCallsInHalfOpenState", type = "number", defaultValue = "10", description = "Configures the number of permitted calls when the CircuitBreaker is half open. The size must be greater than 0. Default size is 10.", displayName = "Permitted Number Of Calls In Half Open State"), @YamlProperty(name = "recordException", type = "array:string", description = "Configure a list of exceptions that are recorded as a failure and thus increase the failure rate. Any exception matching or inheriting from one of the list counts as a failure, unless explicitly ignored via ignoreExceptions.", displayName = "Record Exception"), - @YamlProperty(name = "slidingWindowSize", type = "number", defaultValue = "100", description = "Configures the size of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. Sliding window can either be count-based or time-based.", displayName = "Sliding Window Size"), - @YamlProperty(name = "slidingWindowType", type = "enum:TIME_BASED,COUNT_BASED", defaultValue = "COUNT_BASED", description = "Configures the type of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. Sliding window can either be count-based or time-based.", displayName = "Sliding Window Type"), - @YamlProperty(name = "slowCallDurationThreshold", type = "number", defaultValue = "60", description = "Configures the duration threshold (seconds) above which calls are considered as slow and increase the slow calls percentage.", displayName = "Slow Call Duration Threshold"), - @YamlProperty(name = "slowCallRateThreshold", type = "number", defaultValue = "100", description = "Configures a threshold in percentage. The CircuitBreaker considers a call as slow when the call duration is greater than slowCallDurationThreshold. When the percentage of slow calls is equal or greater the threshold, the CircuitBreaker transitions to open and starts short-circuiting calls.", displayName = "Slow Call Rate Threshold"), - @YamlProperty(name = "throwExceptionWhenHalfOpenOrOpenState", type = "boolean", defaultValue = "false", description = "Whether to throw io.github.resilience4j.circuitbreaker.CallNotPermittedException when the call is rejected because the circuit breaker is half open or open.", displayName = "Throw Exception When Half Open Or Open State"), + @YamlProperty(name = "slidingWindowSize", type = "number", defaultValue = "100", description = "Configures the size of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. slidingWindowSize configures the size of the sliding window. Sliding window can either be count-based or time-based. If slidingWindowType is COUNT_BASED, the last slidingWindowSize calls are recorded and aggregated. If slidingWindowType is TIME_BASED, the calls of the last slidingWindowSize seconds are recorded and aggregated. The slidingWindowSize must be greater than 0. The minimumNumberOfCalls must be greater than 0. If the slidingWindowType is COUNT_BASED, the minimumNumberOfCalls cannot be greater than slidingWindowSize . If the slidingWindowType is TIME_BASED, you can pick whatever you want. Default slidingWindowSize is 100.", displayName = "Sliding Window Size"), + @YamlProperty(name = "slidingWindowType", type = "enum:TIME_BASED,COUNT_BASED", defaultValue = "COUNT_BASED", description = "Configures the type of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. Sliding window can either be count-based or time-based. If slidingWindowType is COUNT_BASED, the last slidingWindowSize calls are recorded and aggregated. If slidingWindowType is TIME_BASED, the calls of the last slidingWindowSize seconds are recorded and aggregated. Default slidingWindowType is COUNT_BASED.", displayName = "Sliding Window Type"), + @YamlProperty(name = "slowCallDurationThreshold", type = "number", defaultValue = "60", description = "Configures the duration threshold (seconds) above which calls are considered as slow and increase the slow calls percentage. Default value is 60 seconds.", displayName = "Slow Call Duration Threshold"), + @YamlProperty(name = "slowCallRateThreshold", type = "number", defaultValue = "100", description = "Configures a threshold in percentage. The CircuitBreaker considers a call as slow when the call duration is greater than slowCallDurationThreshold Duration. When the percentage of slow calls is equal or greater the threshold, the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 100 percentage which means that all recorded calls must be slower than slowCallDurationThreshold.", displayName = "Slow Call Rate Threshold"), + @YamlProperty(name = "throwExceptionWhenHalfOpenOrOpenState", type = "boolean", defaultValue = "false", description = "Whether to throw io.github.resilience4j.circuitbreaker.CallNotPermittedException when the call is rejected due circuit breaker is half open (and was not attempted but rejected immediately) or open (always rejected). This option is only in use when there is NOT a fallback configured on the circuit breaker. When there is a fallback then the fallback is always executed and CallNotPermittedException is not thrown.", displayName = "Throw Exception When Half Open Or Open State"), @YamlProperty(name = "timeoutCancelRunningFuture", type = "boolean", defaultValue = "true", description = "Configures whether cancel is called on the running future. Defaults to true.", displayName = "Timeout Cancel Running Future"), @YamlProperty(name = "timeoutDuration", type = "number", defaultValue = "1000", description = "Configures the thread execution timeout. Default value is 1 second.", displayName = "Timeout Duration"), - @YamlProperty(name = "timeoutEnabled", type = "boolean", defaultValue = "false", description = "Whether timeout is enabled or not on the circuit breaker.", displayName = "Timeout Enabled"), - @YamlProperty(name = "timeoutExecutorService", type = "string", description = "References to a custom thread pool to use when timeout is enabled (uses ForkJoinPool.commonPool() by default).", displayName = "Timeout Executor Service"), - @YamlProperty(name = "waitDurationInOpenState", type = "number", defaultValue = "60", description = "Configures the wait duration (in seconds) which specifies how long the CircuitBreaker should stay open, before it switches to half open.", displayName = "Wait Duration In Open State"), - @YamlProperty(name = "writableStackTraceEnabled", type = "boolean", defaultValue = "true", description = "Enables writable stack traces. When set to false, Exception.getStackTrace returns a zero length array. This may be used to reduce log spam when the circuit breaker is open.", displayName = "Writable Stack Trace Enabled") + @YamlProperty(name = "timeoutEnabled", type = "boolean", defaultValue = "false", description = "Whether timeout is enabled or not on the circuit breaker. Default is false.", displayName = "Timeout Enabled"), + @YamlProperty(name = "timeoutExecutorService", type = "string", description = "References to a custom thread pool to use when timeout is enabled (uses ForkJoinPool#commonPool() by default)", displayName = "Timeout Executor Service"), + @YamlProperty(name = "waitDurationInOpenState", type = "number", defaultValue = "60", description = "Configures the wait duration (in seconds) which specifies how long the CircuitBreaker should stay open, before it switches to half open. Default value is 60 seconds.", displayName = "Wait Duration In Open State"), + @YamlProperty(name = "writableStackTraceEnabled", type = "boolean", defaultValue = "true", description = "Enables writable stack traces. When set to false, Exception.getStackTrace returns a zero length array. This may be used to reduce log spam when the circuit breaker is open as the cause of the exceptions is already known (the circuit breaker is short-circuiting calls).", displayName = "Writable Stack Trace Enabled") } ) public static class Resilience4jConfigurationDefinitionDeserializer extends YamlDeserializerBase { @@ -14058,17 +13931,17 @@ protected boolean setProperty(Resilience4jConfigurationDefinition target, types = org.apache.camel.model.rest.ResponseHeaderDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Response Header", - description = "Defines a response header for a REST operation, used for API documentation and OpenAPI spec generation", + description = "To specify the rest operation response headers.", deprecated = false, properties = { - @YamlProperty(name = "allowableValues", type = "array:org.apache.camel.model.ValueDefinition", description = "List of allowable values for the header (enum).", displayName = "Allowable Values"), + @YamlProperty(name = "allowableValues", type = "array:org.apache.camel.model.ValueDefinition", description = "Sets the parameter list of allowable values.", displayName = "Allowable Values"), @YamlProperty(name = "arrayType", type = "string", defaultValue = "string", description = "Sets the parameter array type. Required if data type is array. Describes the type of items in the array.", displayName = "Array Type"), @YamlProperty(name = "collectionFormat", type = "enum:csv,multi,pipes,ssv,tsv", defaultValue = "csv", description = "Sets the parameter collection format.", displayName = "Collection Format"), - @YamlProperty(name = "dataFormat", type = "string", description = "The data format of the header such as binary, date, date-time, or password.", displayName = "Data Format"), - @YamlProperty(name = "dataType", type = "string", defaultValue = "string", description = "Sets the header data type such as string, integer, or boolean.", displayName = "Data Type"), - @YamlProperty(name = "description", type = "string", description = "Description of the response header.", displayName = "Description"), - @YamlProperty(name = "example", type = "string", description = "An example value of this response header.", displayName = "Example"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of the response header.", displayName = "Name") + @YamlProperty(name = "dataFormat", type = "string", description = "Sets the parameter data format.", displayName = "Data Format"), + @YamlProperty(name = "dataType", type = "string", defaultValue = "string", description = "Sets the header data type.", displayName = "Data Type"), + @YamlProperty(name = "description", type = "string", description = "Description of the parameter.", displayName = "Description"), + @YamlProperty(name = "example", type = "string", description = "Sets the example", displayName = "Example"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of the parameter. This option is mandatory.", displayName = "Name") } ) public static class ResponseHeaderDefinitionDeserializer extends YamlDeserializerBase { @@ -14138,15 +14011,15 @@ protected boolean setProperty(ResponseHeaderDefinition target, String propertyKe types = org.apache.camel.model.rest.ResponseMessageDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Response Message", - description = "Defines a response message for a REST operation, including HTTP status code and description for API documentation", + description = "To specify the rest operation response messages.", deprecated = false, properties = { - @YamlProperty(name = "code", type = "string", defaultValue = "200", description = "The response code such as a HTTP status code.", displayName = "Code"), - @YamlProperty(name = "contentType", type = "string", description = "The response content type such as application/json.", displayName = "Content Type"), - @YamlProperty(name = "examples", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Examples of response messages.", displayName = "Examples"), - @YamlProperty(name = "header", type = "array:org.apache.camel.model.rest.ResponseHeaderDefinition", description = "The response headers.", displayName = "Header"), - @YamlProperty(name = "message", type = "string", required = true, description = "The response message (description).", displayName = "Message"), - @YamlProperty(name = "responseModel", type = "string", description = "The response model (class name).", displayName = "Response Model") + @YamlProperty(name = "code", type = "string", defaultValue = "200", description = "The response code such as a HTTP status code", displayName = "Code"), + @YamlProperty(name = "contentType", type = "string", description = "The response content-type such as application/json.", displayName = "Content Type"), + @YamlProperty(name = "examples", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Examples of response messages", displayName = "Examples"), + @YamlProperty(name = "header", type = "array:org.apache.camel.model.rest.ResponseHeaderDefinition", description = "Adds a response header", displayName = "Header"), + @YamlProperty(name = "message", type = "string", required = true, description = "The response message (description)", displayName = "Message"), + @YamlProperty(name = "responseModel", type = "string", description = "The response model", displayName = "Response Model") } ) public static class ResponseMessageDefinitionDeserializer extends YamlDeserializerBase { @@ -14207,23 +14080,23 @@ protected boolean setProperty(ResponseMessageDefinition target, String propertyK types = org.apache.camel.model.rest.RestBindingDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest Binding", - description = "Configures data binding for a REST service, controlling how request and response bodies are marshalled and unmarshalled", + description = "To configure rest binding", deprecated = false, properties = { - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML.", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), - @YamlProperty(name = "component", type = "string", description = "Sets the component name that this definition will apply to.", displayName = "Component"), - @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service accepts (consumes) as input, such as application/xml or application/json.", displayName = "Consumes"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data.", displayName = "Out Type"), - @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json.", displayName = "Produces"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. The default value is off", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), + @YamlProperty(name = "component", type = "string", description = "Sets the component name that this definition will apply to", displayName = "Component"), + @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json", displayName = "Consumes"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. The default value is false.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), + @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json", displayName = "Produces"), @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do.", displayName = "Skip Binding On Error Code"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") } ) public static class RestBindingDefinitionDeserializer extends YamlDeserializerBase { @@ -14325,40 +14198,40 @@ protected boolean setProperty(RestBindingDefinition target, String propertyKey, types = org.apache.camel.model.rest.RestConfigurationDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest Configuration", - description = "Configures global settings for the REST DSL, such as host, port, context path, binding mode, and the underlying HTTP component to use", + description = "To configure rest", deprecated = false, properties = { - @YamlProperty(name = "apiComponent", type = "enum:openapi,swagger", description = "The name of the Camel component to use as the REST API (such as OpenApi).", displayName = "Api Component"), - @YamlProperty(name = "apiContextPath", type = "string", description = "Sets a leading context-path the REST API will be using.", displayName = "Api Context Path"), + @YamlProperty(name = "apiComponent", type = "enum:openapi,swagger", description = "The name of the Camel component to use as the REST API. If no API Component has been explicit configured, then Camel will lookup if there is a Camel component responsible for servicing and generating the REST API documentation, or if a org.apache.camel.spi.RestApiProcessorFactory is registered in the registry. If either one is found, then that is being used.", displayName = "Api Component"), + @YamlProperty(name = "apiContextPath", type = "string", description = "Sets a leading context-path the REST API will be using. This can be used when using components such as camel-servlet where the deployed web application is deployed using a context-path.", displayName = "Api Context Path"), @YamlProperty(name = "apiContextRouteId", type = "string", description = "Sets the route id to use for the route that services the REST API. The route will by default use an auto assigned route id.", displayName = "Api Context Route Id"), - @YamlProperty(name = "apiHost", type = "string", description = "To use a specific hostname for the API documentation (such as swagger or openapi). This can be used to override the generated host with this configured hostname.", displayName = "Api Host"), - @YamlProperty(name = "apiProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the api documentation.", displayName = "Api Property"), - @YamlProperty(name = "apiVendorExtension", type = "boolean", defaultValue = "false", description = "Whether vendor extension is enabled in the Rest APIs. If enabled then Camel will include additional information as vendor extension (eg keys starting with x-) such as route ids, class names etc.", displayName = "Api Vendor Extension"), - @YamlProperty(name = "bindingMode", type = "enum:auto,json,json_xml,off,xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML.", displayName = "Binding Mode"), + @YamlProperty(name = "apiHost", type = "string", description = "To use a specific hostname for the API documentation (such as swagger or openapi) This can be used to override the generated host with this configured hostname", displayName = "Api Host"), + @YamlProperty(name = "apiProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the api documentation. For example set property api.title to my cool stuff", displayName = "Api Property"), + @YamlProperty(name = "apiVendorExtension", type = "boolean", defaultValue = "false", description = "Whether vendor extension is enabled in the Rest APIs. If enabled then Camel will include additional information as vendor extension (eg keys starting with x-) such as route ids, class names etc. Not all 3rd party API gateways and tools supports vendor-extensions when importing your API docs.", displayName = "Api Vendor Extension"), + @YamlProperty(name = "bindingMode", type = "enum:auto,json,json_xml,off,xml", defaultValue = "off", description = "Sets the binding mode to use. The default value is off", displayName = "Binding Mode"), @YamlProperty(name = "bindingPackageScan", type = "string", description = "Package name to use as base (offset) for classpath scanning of POJO classes are located when using binding mode is enabled for JSon or XML. Multiple package names can be separated by comma.", displayName = "Binding Package Scan"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), - @YamlProperty(name = "component", type = "enum:platform-http,servlet,jetty,undertow,netty-http,coap", description = "The Camel Rest component to use for the REST transport (consumer), such as netty-http, jetty, servlet, undertow.", displayName = "Component"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), + @YamlProperty(name = "component", type = "enum:platform-http,servlet,jetty,undertow,netty-http,coap", description = "The Camel Rest component to use for the REST transport (consumer), such as netty-http, jetty, servlet, undertow. If no component has been explicit configured, then Camel will lookup if there is a Camel component that integrates with the Rest DSL, or if a org.apache.camel.spi.RestConsumerFactory is registered in the registry. If either one is found, then that is being used.", displayName = "Component"), @YamlProperty(name = "componentProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the rest component in use.", displayName = "Component Property"), @YamlProperty(name = "consumerProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the rest consumer in use.", displayName = "Consumer Property"), - @YamlProperty(name = "contextPath", type = "string", description = "Sets a leading context-path the REST services will be using. This can be used when using components such as camel-servlet where the deployed web application is deployed using a context-path.", displayName = "Context Path"), + @YamlProperty(name = "contextPath", type = "string", description = "Sets a leading context-path the REST services will be using. This can be used when using components such as camel-servlet where the deployed web application is deployed using a context-path. Or for components such as camel-jetty or camel-netty-http that includes a HTTP server.", displayName = "Context Path"), @YamlProperty(name = "corsHeaders", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure custom CORS headers.", displayName = "Cors Headers"), - @YamlProperty(name = "dataFormatProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the data formats in use. For example set property prettyPrint to true to have json outputted in pretty mode.", displayName = "Data Format Property"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), + @YamlProperty(name = "dataFormatProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the data formats in use. For example set property prettyPrint to true to have json outputted in pretty mode. The properties can be prefixed to denote the option is only for either JSON or XML and for either the IN or the OUT. The prefixes are: json.in. json.out. xml.in. xml.out. For example a key with value xml.out.mustBeJAXBElement is only for the XML data format for the outgoing. A key without a prefix is a common key for all situations.", displayName = "Data Format Property"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. The default value is false.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), @YamlProperty(name = "endpointProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the rest endpoint in use.", displayName = "Endpoint Property"), @YamlProperty(name = "host", type = "string", description = "The hostname to use for exposing the REST service.", displayName = "Host"), @YamlProperty(name = "hostNameResolver", type = "enum:allLocalIp,localHostName,localIp,none", defaultValue = "allLocalIp", description = "If no hostname has been explicit configured, then this resolver is used to compute the hostname the REST service will be using.", displayName = "Host Name Resolver"), - @YamlProperty(name = "inlineRoutes", type = "boolean", defaultValue = "true", description = "Inline routes in rest-dsl which are linked using direct endpoints. By inlining, Camel can optimize and inline this as a single route, however this requires to use direct endpoints, which must be unique per service.", displayName = "Inline Routes"), - @YamlProperty(name = "jsonDataFormat", type = "enum:jackson,jsonb,fastjson,gson", defaultValue = "jackson", description = "Name of specific json data format to use. By default jackson will be used. Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance.", displayName = "Json Data Format"), - @YamlProperty(name = "port", type = "string", description = "The port number to use for exposing the REST service.", displayName = "Port"), - @YamlProperty(name = "producerApiDoc", type = "string", description = "Sets the location of the api document the REST producer will use to validate the REST uri and query parameters are valid accordingly to the api document.", displayName = "Producer Api Doc"), - @YamlProperty(name = "producerComponent", type = "enum:vertx-http,http,undertow,netty-http", description = "Sets the name of the Camel component to use as the REST producer.", displayName = "Producer Component"), - @YamlProperty(name = "scheme", type = "string", description = "The scheme to use for exposing the REST service. Usually http or https is supported.", displayName = "Scheme"), + @YamlProperty(name = "inlineRoutes", type = "boolean", defaultValue = "true", description = "Inline routes in rest-dsl which are linked using direct endpoints. Each service in Rest DSL is an individual route, meaning that you would have at least two routes per service (rest-dsl, and the route linked from rest-dsl). By inlining (default) allows Camel to optimize and inline this as a single route, however this requires to use direct endpoints, which must be unique per service. If a route is not using direct endpoint then the rest-dsl is not inlined, and will become an individual route. This option is default true.", displayName = "Inline Routes"), + @YamlProperty(name = "jsonDataFormat", type = "enum:jackson,jsonb,fastjson,gson", defaultValue = "jackson", description = "Name of specific json data format to use. By default, jackson will be used. Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance.", displayName = "Json Data Format"), + @YamlProperty(name = "port", type = "string", description = "The port number to use for exposing the REST service. Notice if you use servlet component then the port number configured here does not apply, as the port number in use is the actual port number the servlet component is using. eg if using Apache Tomcat its the tomcat http port, if using Apache Karaf its the HTTP service in Karaf that uses port 8181 by default etc. Though in those situations setting the port number here, allows tooling and JMX to know the port number, so its recommended to set the port number to the number that the servlet engine uses.", displayName = "Port"), + @YamlProperty(name = "producerApiDoc", type = "string", description = "Sets the location of the api document the REST producer will use to validate the REST uri and query parameters are valid accordingly to the api document. The location of the api document is loaded from classpath by default, but you can use file: or http: to refer to resources to load from file or http url.", displayName = "Producer Api Doc"), + @YamlProperty(name = "producerComponent", type = "enum:vertx-http,http,undertow,netty-http", description = "Sets the name of the Camel component to use as the REST producer", displayName = "Producer Component"), + @YamlProperty(name = "scheme", type = "string", description = "The scheme to use for exposing the REST service. Usually http or https is supported. The default value is http", displayName = "Scheme"), @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do.", displayName = "Skip Binding On Error Code"), - @YamlProperty(name = "useXForwardHeaders", type = "boolean", defaultValue = "false", description = "Whether to use X-Forward headers to set host etc. for OpenApi. This may be needed in special cases involving reverse-proxy and networking going from HTTP to HTTPS etc.", displayName = "Use XForward Headers"), + @YamlProperty(name = "useXForwardHeaders", type = "boolean", defaultValue = "false", description = "Whether to use X-Forward headers to set host etc. for OpenApi. This may be needed in special cases involving reverse-proxy and networking going from HTTP to HTTPS etc. Then the proxy can send X-Forward headers (X-Forwarded-Proto) that influences the host names in the OpenAPI schema that camel-openapi-java generates from Rest DSL routes.", displayName = "Use XForward Headers"), @YamlProperty(name = "validationLevels", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure custom validation levels when using camel-openapi-validator with client request/response validator.", displayName = "Validation Levels"), - @YamlProperty(name = "xmlDataFormat", type = "enum:jaxb,jacksonXml", defaultValue = "jaxb", description = "Name of specific XML data format to use. By default jaxb will be used. Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance.", displayName = "Xml Data Format") + @YamlProperty(name = "xmlDataFormat", type = "enum:jaxb,jacksonXml", defaultValue = "jaxb", description = "Name of specific XML data format to use. By default jaxb will be used, but jacksonXml is also supported. Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance.", displayName = "Xml Data Format") } ) public static class RestConfigurationDefinitionDeserializer extends YamlDeserializerBase { @@ -14543,9 +14416,9 @@ protected boolean setProperty(RestConfigurationDefinition target, String propert types = org.apache.camel.model.RestContextRefDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest Context Ref", - description = "References an external XML file containing REST service definitions for inclusion in the current context", + description = "To refer to an XML file with rest services defined using the rest-dsl", deprecated = false, - properties = @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the rest-dsl.", displayName = "Ref") + properties = @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the rest-dsl", displayName = "Ref") ) public static class RestContextRefDefinitionDeserializer extends YamlDeserializerBase { public RestContextRefDefinitionDeserializer() { @@ -14586,32 +14459,32 @@ protected boolean setProperty(RestContextRefDefinition target, String propertyKe types = org.apache.camel.model.rest.RestDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest", - description = "Defines a REST service with HTTP operations (GET, POST, PUT, DELETE, etc.) using the Camel REST DSL", + description = "Defines a rest service using the rest-dsl", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. This option will override what may be configured on a parent level.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. This option will override what may be configured on a parent level. The default value is true.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is auto", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), @YamlProperty(name = "delete", type = "array:org.apache.camel.model.rest.DeleteDefinition"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), @YamlProperty(name = "get", type = "array:org.apache.camel.model.rest.GetDefinition"), @YamlProperty(name = "head", type = "array:org.apache.camel.model.rest.HeadDefinition"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "openApi", type = "object:org.apache.camel.model.rest.OpenApiDefinition", description = "To use an existing OpenAPI specification as contract-first for Camel Rest DSL.", displayName = "Open Api"), @YamlProperty(name = "patch", type = "array:org.apache.camel.model.rest.PatchDefinition"), - @YamlProperty(name = "path", type = "string", description = "Path of the rest service, such as /foo.", displayName = "Path"), + @YamlProperty(name = "path", type = "string", description = "Path of the rest service, such as /foo", displayName = "Path"), @YamlProperty(name = "post", type = "array:org.apache.camel.model.rest.PostDefinition"), - @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), @YamlProperty(name = "put", type = "array:org.apache.camel.model.rest.PutDefinition"), @YamlProperty(name = "securityDefinitions", type = "object:org.apache.camel.model.rest.RestSecuritiesDefinition", description = "Sets the security definitions such as Basic, OAuth2 etc.", displayName = "Security Definitions"), @YamlProperty(name = "securityRequirements", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Sets the security requirement(s) for all endpoints.", displayName = "Security Requirements"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "tag", type = "string", description = "To configure a special tag for the operations within this rest definition.", displayName = "Tag") } ) @@ -14793,11 +14666,11 @@ protected boolean setProperty(RestDefinition target, String propertyKey, types = org.apache.camel.model.rest.RestPropertyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest Property", - description = "Defines a key/value property for REST configuration, used to pass component-specific settings", + description = "A key value pair", deprecated = false, properties = { - @YamlProperty(name = "key", type = "string", required = true, description = "Property key.", displayName = "Key"), - @YamlProperty(name = "value", type = "string", required = true, description = "Property value.", displayName = "Value") + @YamlProperty(name = "key", type = "string", required = true, description = "Property key", displayName = "Key"), + @YamlProperty(name = "value", type = "string", required = true, description = "Property value", displayName = "Value") } ) public static class RestPropertyDefinitionDeserializer extends YamlDeserializerBase { @@ -14838,7 +14711,7 @@ protected boolean setProperty(RestPropertyDefinition target, String propertyKey, types = org.apache.camel.model.rest.RestSecuritiesDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest Security Definitions", - description = "Container for security scheme definitions used by REST services", + description = "To configure rest security definitions.", deprecated = false, properties = { @YamlProperty(name = "apiKey", type = "object:org.apache.camel.model.rest.ApiKeyDefinition"), @@ -14942,12 +14815,12 @@ protected boolean setProperty(RestSecuritiesDefinition target, String propertyKe types = org.apache.camel.model.rest.RestsDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rests", - description = "Container for a collection of REST service definitions", + description = "A series of rest services defined using the rest-dsl", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "rest", type = "array:org.apache.camel.model.rest.RestDefinition") } ) @@ -14999,16 +14872,16 @@ protected boolean setProperty(RestsDefinition target, String propertyKey, types = org.apache.camel.model.ResumableDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Resumable", - description = "Enables resuming processing from the last known offset after a restart, using a resume strategy to track and restore position", + description = "Resume EIP to support resuming processing from last known offset.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "intermittent", type = "boolean", defaultValue = "false", description = "Whether the offsets will be intermittently present or whether they must be present in every exchange.", displayName = "Intermittent"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "intermittent", type = "boolean", defaultValue = "false", description = "Sets whether the offsets will be intermittently present or whether they must be present in every exchange", displayName = "Intermittent"), @YamlProperty(name = "loggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "The logging level to use in case of failures.", displayName = "Logging Level"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "resumeStrategy", type = "string", required = true, description = "The resume strategy to use for resuming processing from the last known offset.", displayName = "Resume Strategy") + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "resumeStrategy", type = "string", required = true, description = "Sets the resume strategy to use", displayName = "Resume Strategy") } ) public static class ResumableDefinitionDeserializer extends YamlDeserializerBase { @@ -15075,16 +14948,16 @@ protected boolean setProperty(ResumableDefinition target, String propertyKey, types = org.apache.camel.model.RollbackDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rollback", - description = "Forces a rollback of the current transaction and stops routing the message. Can set a custom message on the exception.", + description = "Forces a rollback by stopping routing the message", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "markRollbackOnly", type = "boolean", defaultValue = "false", description = "If enabled then only the current transaction is marked for rollback. No exception is thrown and the route continues to execute.", displayName = "Mark Rollback Only"), - @YamlProperty(name = "markRollbackOnlyLast", type = "boolean", defaultValue = "false", description = "If enabled then only the last sub-transaction (from the last transacted EIP) is marked for rollback. This allows partial rollbacks in nested transaction scenarios.", displayName = "Mark Rollback Only Last"), - @YamlProperty(name = "message", type = "string", description = "The message to set on the exception when rolling back.", displayName = "Message"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "markRollbackOnly", type = "boolean", defaultValue = "false", description = "Mark the transaction for rollback only (cannot be overruled to commit)", displayName = "Mark Rollback Only"), + @YamlProperty(name = "markRollbackOnlyLast", type = "boolean", defaultValue = "false", description = "Mark only last sub transaction for rollback only. When using sub transactions (if the transaction manager support this)", displayName = "Mark Rollback Only Last"), + @YamlProperty(name = "message", type = "string", description = "Message to use in rollback exception", displayName = "Message"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class RollbackDefinitionDeserializer extends YamlDeserializerBase { @@ -15155,7 +15028,7 @@ protected boolean setProperty(RollbackDefinition target, String propertyKey, types = org.apache.camel.model.loadbalancer.RoundRobinLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Round Robin Load Balancer", - description = "Load balancer that cycles through destination endpoints in sequential order, distributing the load evenly", + description = "The destination endpoints are selected in a round-robin fashion. This is a well-known and classic policy, which spreads the load evenly.", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -15193,11 +15066,11 @@ protected boolean setProperty(RoundRobinLoadBalancerDefinition target, String pr types = org.apache.camel.model.RouteBuilderDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Route Builder", - description = "References a Java RouteBuilder class to include its routes in the current CamelContext", + description = "To refer to a Java org.apache.camel.builder.RouteBuilder instance to use.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the RouteBuilder instance.", displayName = "Ref") + @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the route builder instance", displayName = "Ref") } ) public static class RouteBuilderDefinitionDeserializer extends YamlDeserializerBase { @@ -15244,9 +15117,9 @@ protected boolean setProperty(RouteBuilderDefinition target, String propertyKey, types = org.apache.camel.model.RouteConfigurationContextRefDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Route Configuration Context Ref", - description = "References an external XML file containing route configuration definitions for inclusion in the current context", + description = "To refer to an XML file with route configuration defined using the xml-dsl", deprecated = false, - properties = @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the route configuration in the xml-dsl.", displayName = "Ref") + properties = @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the route templates in the xml dsl", displayName = "Ref") ) public static class RouteConfigurationContextRefDefinitionDeserializer extends YamlDeserializerBase { public RouteConfigurationContextRefDefinitionDeserializer() { @@ -15287,9 +15160,9 @@ protected boolean setProperty(RouteConfigurationContextRefDefinition target, types = org.apache.camel.model.RouteContextRefDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Route Context Ref", - description = "References an external XML file containing route definitions for inclusion in the current context", + description = "To refer to an XML file with routes defined using the xml-dsl", deprecated = false, - properties = @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the routes in the xml-dsl.", displayName = "Ref") + properties = @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the routes in the xml dsl", displayName = "Ref") ) public static class RouteContextRefDefinitionDeserializer extends YamlDeserializerBase { public RouteContextRefDefinitionDeserializer() { @@ -15330,13 +15203,13 @@ protected boolean setProperty(RouteContextRefDefinition target, String propertyK types = org.apache.camel.model.RouteDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Route", - description = "Defines a Camel route that specifies the processing steps a message goes through from a consumer endpoint to one or more producer endpoints", + description = "A Camel route", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -15397,13 +15270,13 @@ protected boolean setProperty(RouteDefinition target, String propertyKey, types = org.apache.camel.model.RouteTemplateParameterDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Template Parameter", - description = "Defines a parameter for a route template, with an optional default value and description", + description = "A route template parameter", deprecated = false, properties = { - @YamlProperty(name = "defaultValue", type = "string", description = "The default value of the template parameter. Used when no explicit value is provided when creating a route from the template.", displayName = "Default Value"), - @YamlProperty(name = "description", type = "string", description = "Description of the template parameter for documentation purposes.", displayName = "Description"), - @YamlProperty(name = "name", type = "string", required = true, description = "The name of the template parameter.", displayName = "Name"), - @YamlProperty(name = "required", type = "boolean", defaultValue = "false", description = "Whether this template parameter is required. A required parameter must have a value provided when creating a route from the template.", displayName = "Required") + @YamlProperty(name = "defaultValue", type = "string", description = "Default value of the parameter. If a default value is provided then the parameter is implied not to be required.", displayName = "Default Value"), + @YamlProperty(name = "description", type = "string", description = "Description of the parameter", displayName = "Description"), + @YamlProperty(name = "name", type = "string", required = true, description = "The name of the parameter", displayName = "Name"), + @YamlProperty(name = "required", type = "boolean", defaultValue = "false", description = "Whether the parameter is required or not. A parameter is required unless this option is set to false or a default value has been configured.", displayName = "Required") } ) public static class RouteTemplateParameterDefinitionDeserializer extends YamlDeserializerBase { @@ -15455,18 +15328,18 @@ protected boolean setProperty(RouteTemplateParameterDefinition target, String pr types = org.apache.camel.model.RoutingSlipDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Routing Slip", - description = "Routes a message through a pre-determined sequence of endpoints defined in a header or expression (the routing slip). The list of endpoints is evaluated once upfront.", + description = "Routes a message through a series of steps that are pre-determined (the slip)", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "cacheSize", type = "number", 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.", displayName = "Cache Size"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", 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.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreInvalidEndpoints", type = "boolean", defaultValue = "false", description = "If enabled then invalid endpoint URIs are ignored and logged instead of throwing an exception.", displayName = "Ignore Invalid Endpoints"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "uriDelimiter", type = "string", defaultValue = ",", description = "The delimiter used to separate endpoint URIs in the routing slip expression. Default is comma.", displayName = "Uri Delimiter") + @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this routing slip, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise producers/endpoints are stored in memory in the caches. However if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both producers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non frequent used producers.", displayName = "Cache Size"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to define the routing slip, which defines which endpoints to route the message in a pipeline style. Notice the expression is evaluated once, if you want a more dynamic style, then the dynamic router eip is a better choice.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "ignoreInvalidEndpoints", type = "boolean", defaultValue = "false", description = "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", displayName = "Ignore Invalid Endpoints"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "uriDelimiter", type = "string", defaultValue = ",", description = "Sets the uri delimiter to use", displayName = "Uri Delimiter") } ) public static class RoutingSlipDefinitionDeserializer extends YamlDeserializerBase { @@ -15551,7 +15424,7 @@ protected boolean setProperty(RoutingSlipDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.RssDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "RSS", - description = "Transform from ROME SyndFeed Java Objects to XML and vice-versa", + description = "Transform from ROME SyndFeed Java Objects to XML and vice-versa.", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -15775,19 +15648,19 @@ protected boolean setProperty(SSLContextParametersDefinition target, String prop types = org.apache.camel.model.SagaDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Saga", - description = "Defines a Saga (long-running action) that coordinates distributed services toward a consistent outcome. Unlike XA transactions, Sagas use compensating actions for rollback and work across heterogeneous services.", + description = "Enables Sagas on the route", deprecated = false, properties = { - @YamlProperty(name = "compensation", type = "string", description = "The compensation endpoint URI that must be called to compensate all changes done in the route. The route corresponding to the compensation URI must perform compensation and complete without error.", displayName = "Compensation"), - @YamlProperty(name = "completion", type = "string", description = "The completion endpoint URI that will be called when the Saga is completed successfully. The route corresponding to the completion URI must perform completion tasks and terminate without error.", displayName = "Completion"), - @YamlProperty(name = "completionMode", type = "enum:AUTO,MANUAL", defaultValue = "AUTO", description = "Determine how the saga should be considered complete. When set to AUTO, the saga is completed when the exchange is processed successfully, or compensated when it completes exceptionally. When set to MANUAL, the user must complete or compensate the saga using the saga:complete or saga:compensate endpoints.", displayName = "Completion Mode"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "option", type = "array:org.apache.camel.model.PropertyExpressionDefinition", description = "Allows to save properties of the current exchange in order to re-use them in a compensation/completion callback route. Option values will be transformed into input headers of the compensation/completion exchange.", displayName = "Option"), - @YamlProperty(name = "propagation", type = "enum:REQUIRED,REQUIRES_NEW,MANDATORY,SUPPORTS,NOT_SUPPORTED,NEVER", defaultValue = "REQUIRED", description = "Set the Saga propagation mode. REQUIRED joins an existing saga or starts a new one. REQUIRES_NEW always starts a new saga, suspending any existing one. MANDATORY requires an existing saga and fails if none is active. SUPPORTS joins an existing saga if present but does not start a new one. NOT_SUPPORTED executes outside any saga, suspending an existing one. NEVER fails if a saga is already active.", displayName = "Propagation"), - @YamlProperty(name = "sagaService", type = "string", description = "Refers to the id to lookup in the registry for the specific CamelSagaService to use", displayName = "Saga Service"), + @YamlProperty(name = "compensation", type = "string", description = "The compensation endpoint URI that must be called to compensate all changes done in the route. The route corresponding to the compensation URI must perform compensation and complete without error. If errors occur during compensation, the saga service may call again the compensation URI to retry.", displayName = "Compensation"), + @YamlProperty(name = "completion", type = "string", description = "The completion endpoint URI that will be called when the Saga is completed successfully. The route corresponding to the completion URI must perform completion tasks and terminate without error. If errors occur during completion, the saga service may call again the completion URI to retry.", displayName = "Completion"), + @YamlProperty(name = "completionMode", type = "enum:AUTO,MANUAL", defaultValue = "AUTO", description = "Determine how the saga should be considered complete. When set to AUTO, the saga is completed when the exchange that initiates the saga is processed successfully, or compensated when it completes exceptionally. When set to MANUAL, the user must complete or compensate the saga using the saga:complete or saga:compensate endpoints.", displayName = "Completion Mode"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "option", type = "array:org.apache.camel.model.PropertyExpressionDefinition", description = "Allows to save properties of the current exchange in order to re-use them in a compensation/completion callback route. Options are usually helpful e.g. to store and retrieve identifiers of objects that should be deleted in compensating actions. Option values will be transformed into input headers of the compensation/completion exchange.", displayName = "Option"), + @YamlProperty(name = "propagation", type = "enum:REQUIRED,REQUIRES_NEW,MANDATORY,SUPPORTS,NOT_SUPPORTED,NEVER", defaultValue = "REQUIRED", description = "Set the Saga propagation mode (REQUIRED, REQUIRES_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER).", displayName = "Propagation"), + @YamlProperty(name = "sagaService", type = "string", description = "Refers to the id to lookup in the registry for the specific CamelSagaService to use.", displayName = "Saga Service"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), @YamlProperty(name = "timeout", type = "string", description = "Set the maximum amount of time for the Saga. After the timeout is expired, the saga will be compensated automatically (unless a different decision has been taken in the meantime).", displayName = "Timeout") } @@ -15880,15 +15753,15 @@ protected boolean setProperty(SagaDefinition target, String propertyKey, types = org.apache.camel.model.SamplingDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Sample", - description = "Samples a subset of messages passing through the route, either by frequency count or time interval, and discards the rest", + description = "Extract a sample of the messages passing through a route", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "messageFrequency", type = "number", description = "The frequency of samples as a message count, using a message-frequency approach. For example, a value of 5 means every 5th message is sampled.", displayName = "Message Frequency"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "samplePeriod", type = "string", defaultValue = "1000", description = "The period between samples, using a time-based approach. Default is 1 second.", displayName = "Sample Period") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "messageFrequency", type = "number", description = "Sets the sample message count which only a single Exchange will pass through after this many received.", displayName = "Message Frequency"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "samplePeriod", type = "string", defaultValue = "1000", description = "Sets the sample period during which only a single Exchange will pass through.", displayName = "Sample Period") } ) public static class SamplingDefinitionDeserializer extends YamlDeserializerBase { @@ -15954,15 +15827,15 @@ protected boolean setProperty(SamplingDefinition target, String propertyKey, types = org.apache.camel.model.ScriptDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Script", - description = "Executes an expression or script in a chosen language for side effects without modifying the message body", + description = "Executes a script from a language which does not change the message body.", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression to evaluate as a script. The script result does not change the message body (use transform instead if that is desired).", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Script to be executed.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class ScriptDefinitionDeserializer extends YamlDeserializerBase { @@ -16027,11 +15900,11 @@ protected boolean setProperty(ScriptDefinition target, String propertyKey, types = org.apache.camel.model.rest.SecurityDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest Security", - description = "Applies a security requirement to a REST operation, referencing a security scheme defined at the service level", + description = "Rest security definition", deprecated = false, properties = { - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key"), - @YamlProperty(name = "scopes", type = "string", description = "The scopes to allow (separate multiple scopes by comma).", displayName = "Scopes") + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key"), + @YamlProperty(name = "scopes", type = "string", description = "The scopes to allow (separate multiple scopes by comma)", displayName = "Scopes") } ) public static class SecurityDefinitionDeserializer extends YamlDeserializerBase { @@ -16072,15 +15945,15 @@ protected boolean setProperty(SecurityDefinition target, String propertyKey, types = org.apache.camel.model.SetBodyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Body", - description = "Sets the message body to a value computed by an expression", + description = "Sets the contents of the message body", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression whose result is used as the new message body.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression that returns the new body to use", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class SetBodyDefinitionDeserializer extends YamlDeserializerBase { @@ -16146,14 +16019,14 @@ protected boolean setProperty(SetBodyDefinition target, String propertyKey, types = org.apache.camel.model.SetExchangePatternDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Exchange Pattern", - description = "Sets the message exchange pattern (MEP) on the exchange, such as InOnly for one-way or InOut for request-reply", + description = "Sets the exchange pattern on the message exchange", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "pattern", type = "enum:InOnly,InOut", description = "The new exchange pattern to use from this point forward.", displayName = "Pattern") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "pattern", type = "enum:InOnly,InOut", description = "Sets the new exchange pattern of the Exchange to be used from this point forward", displayName = "Pattern") } ) public static class SetExchangePatternDefinitionDeserializer extends YamlDeserializerBase { @@ -16214,16 +16087,16 @@ protected boolean setProperty(SetExchangePatternDefinition target, String proper types = org.apache.camel.model.SetHeaderDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Header", - description = "Sets a message header to a value computed by an expression", + description = "Sets the value of a message header", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression whose result is used as the header value.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "name", type = "string", required = true, 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.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to return the value of the header", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of message header to set a new value The simple language can be used to define a dynamic evaluated header name to be used. Otherwise a constant name will be used.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class SetHeaderDefinitionDeserializer extends YamlDeserializerBase { @@ -16293,14 +16166,14 @@ protected boolean setProperty(SetHeaderDefinition target, String propertyKey, types = org.apache.camel.model.SetHeadersDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Headers", - description = "Sets multiple message headers at once, each computed by its own expression", + description = "Allows setting multiple headers on the message at the same time.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), @YamlProperty(name = "headers", type = "array:org.apache.camel.model.SetHeaderDefinition", description = "Contains the headers to be set", displayName = "Headers"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class SetHeadersDefinitionDeserializer extends YamlDeserializerBase { @@ -16356,16 +16229,16 @@ protected boolean setProperty(SetHeadersDefinition target, String propertyKey, types = org.apache.camel.model.SetPropertyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Property", - description = "Sets an exchange property to a value computed by an expression", + description = "Sets a named property on the message exchange", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression whose result is used as the exchange property value.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "name", type = "string", required = true, 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.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to return the value of the message exchange property", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of exchange property to set a new value. The simple language can be used to define a dynamic evaluated exchange property name to be used. Otherwise a constant name will be used.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class SetPropertyDefinitionDeserializer extends YamlDeserializerBase { @@ -16435,16 +16308,16 @@ protected boolean setProperty(SetPropertyDefinition target, String propertyKey, types = org.apache.camel.model.SetVariableDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Variable", - description = "Sets a variable to a value computed by an expression", + description = "Sets the value of a variable", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression whose result is used as the variable value.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "name", type = "string", required = true, 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.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to return the value of the variable", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of variable to set a new value The simple language can be used to define a dynamic evaluated variable name to be used. Otherwise a constant name will be used.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class SetVariableDefinitionDeserializer extends YamlDeserializerBase { @@ -16514,13 +16387,13 @@ protected boolean setProperty(SetVariableDefinition target, String propertyKey, types = org.apache.camel.model.SetVariablesDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Variables", - description = "Sets multiple variables at once, each computed by its own expression", + description = "Allows setting multiple variables at the same time.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "variables", type = "array:org.apache.camel.model.SetVariableDefinition", description = "Contains the variables to be set", displayName = "Variables") } ) @@ -16578,16 +16451,16 @@ protected boolean setProperty(SetVariablesDefinition target, String propertyKey, types = org.apache.camel.model.language.SimpleExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Simple", - description = "Evaluates a Camel simple expression", + description = "Evaluates a Camel simple expression.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "nested", type = "boolean", defaultValue = "false", description = "If the result is a nested simple expression should this expression be evaluated as well.", displayName = "Nested"), - @YamlProperty(name = "pretty", type = "boolean", defaultValue = "false", description = "To pretty format the output (only JSon or XML supported).", displayName = "Pretty"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim"), - @YamlProperty(name = "trimResult", type = "boolean", defaultValue = "false", description = "Whether to trim the returned values when this language is in use.", displayName = "Trim Result") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "nested", type = "boolean", defaultValue = "false", description = "If the result is a nested simple expression should this expression be evaluated as well", displayName = "Nested"), + @YamlProperty(name = "pretty", type = "boolean", defaultValue = "false", description = "To pretty format the output (only JSon or XML supported)", displayName = "Pretty"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim"), + @YamlProperty(name = "trimResult", type = "boolean", defaultValue = "false", description = "Whether to trim the returned values when this language are in use. For example the output result may contain unwanted line breaks at the beginning and end such as when using Java DSL with multi-line blocks. Is default false to be backwards compatible with existing behavior.", displayName = "Trim Result") } ) public static class SimpleExpressionDeserializer extends YamlDeserializerBase { @@ -16667,7 +16540,7 @@ protected boolean setProperty(SimpleExpression target, String propertyKey, types = org.apache.camel.model.dataformat.SmooksDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Smooks", - description = "Transform and bind XML as well as non-XML data, including EDI, CSV, JSON, and YAML using Smooks", + description = "Transform and bind XML as well as non-XML data, including EDI, CSV, JSON, and YAML using Smooks.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @@ -16713,17 +16586,17 @@ protected boolean setProperty(SmooksDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.SoapDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "SOAP", - description = "Marshal Java objects to SOAP messages and back", + description = "Marshal Java objects to SOAP messages and back.", deprecated = false, properties = { @YamlProperty(name = "contextPath", type = "string", required = true, description = "Package name where your JAXB classes are located.", displayName = "Context Path"), - @YamlProperty(name = "elementNameStrategy", type = "string", description = "Refers to an element strategy to lookup from the registry.", displayName = "Element Name Strategy"), - @YamlProperty(name = "encoding", type = "string", description = "To overrule and use a specific encoding.", displayName = "Encoding"), + @YamlProperty(name = "elementNameStrategy", type = "string", description = "Refers to an element strategy to lookup from the registry. An element name strategy is used for two purposes. The first is to find a xml element name for a given object and soap action when marshaling the object into a SOAP message. The second is to find an Exception class for a given soap fault name. The following three element strategy class name is provided out of the box. QNameStrategy - Uses a fixed qName that is configured on instantiation. Exception lookup is not supported TypeNameStrategy - Uses the name and namespace from the XMLType annotation of the given type. If no namespace is set then package-info is used. Exception lookup is not supported ServiceInterfaceStrategy - Uses information from a webservice interface to determine the type name and to find the exception class for a SOAP fault All three classes is located in the package name org.apache.camel.dataformat.soap.name If you have generated the web service stub code with cxf-codegen or a similar tool then you probably will want to use the ServiceInterfaceStrategy. In the case you have no annotated service interface you should use QNameStrategy or TypeNameStrategy.", displayName = "Element Name Strategy"), + @YamlProperty(name = "encoding", type = "string", description = "To overrule and use a specific encoding", displayName = "Encoding"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreUnmarshalledHeaders", type = "boolean", defaultValue = "false", description = "Whether to ignore headers that were not unmarshalled.", displayName = "Ignore Unmarshalled Headers"), - @YamlProperty(name = "namespacePrefix", type = "string", description = "When marshalling using JAXB or SOAP then the JAXB implementation will automatic assign namespace prefixes. To control this mapping, Camel allows you to refer to a map which contains the desired mapping.", displayName = "Namespace Prefix"), - @YamlProperty(name = "schema", type = "string", description = "To validate against an existing schema. You can use the prefix classpath:, file: or http: to specify how the resource should be resolved. You can separate multiple schema files by using the ',' character.", displayName = "Schema"), - @YamlProperty(name = "version", type = "enum:1.1,1.2", defaultValue = "1.1", description = "SOAP version should either be 1.1 or 1.2. Is by default 1.1.", displayName = "Version") + @YamlProperty(name = "ignoreUnmarshalledHeaders", type = "boolean", defaultValue = "false", description = "Whether to ignore headers that was not unmarshalled. By default, headers which could not be unmarshalled is recorded in the org.apache.camel.dataformat.soap.UNMARSHALLED_HEADER_LIST header which allows to inspect any problematic header.", displayName = "Ignore Unmarshalled Headers"), + @YamlProperty(name = "namespacePrefix", type = "string", description = "When marshalling using JAXB or SOAP then the JAXB implementation will automatic assign namespace prefixes, such as ns2, ns3, ns4 etc. To control this mapping, Camel allows you to refer to a map which contains the desired mapping.", displayName = "Namespace Prefix"), + @YamlProperty(name = "schema", type = "string", description = "To validate against an existing schema. Your can use the prefix classpath:, file: or http: to specify how the resource should be resolved. You can separate multiple schema files by using the ',' character.", displayName = "Schema"), + @YamlProperty(name = "version", type = "enum:1.1,1.2", defaultValue = "1.1", description = "SOAP version should either be 1.1 or 1.2. Is by default 1.1", displayName = "Version") } ) public static class SoapDataFormatDeserializer extends YamlDeserializerBase { @@ -16799,16 +16672,16 @@ protected boolean setProperty(SoapDataFormat target, String propertyKey, types = org.apache.camel.model.SortDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Sort", - description = "Sorts the items in a message body that is a List, using a specified comparator or the default ordering", + description = "Sorts the contents of the message", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "comparator", type = "string", description = "Sets a reference to lookup for the comparator to use for sorting.", displayName = "Comparator"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", 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.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "comparator", type = "string", description = "Sets the comparator to use for sorting", displayName = "Comparator"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Optional expression to sort by something else than the message body", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class SortDefinitionDeserializer extends YamlDeserializerBase { @@ -16879,13 +16752,13 @@ protected boolean setProperty(SortDefinition target, String propertyKey, types = org.apache.camel.model.language.SpELExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "SpEL", - description = "Evaluates a Spring expression (SpEL)", + description = "Evaluates a Spring expression (SpEL).", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class SpELExpressionDeserializer extends YamlDeserializerBase { @@ -16950,29 +16823,32 @@ protected boolean setProperty(SpELExpression target, String propertyKey, types = org.apache.camel.model.SplitDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Split", - description = "Splits a message into multiple sub-messages using an expression, and processes each one individually. Supports parallel processing and result aggregation.", + description = "Splits a single message into many sub-messages.", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "aggregationStrategy", type = "string", 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.", displayName = "Aggregation Strategy"), - @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If true then null is used as the oldExchange when there is no data to aggregate, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "The method name to use when using a POJO as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "delimiter", type = "string", 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.", displayName = "Delimiter"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "executorService", type = "string", description = "Reference to a custom thread pool to use for parallel processing. Setting this option implies parallel processing.", displayName = "Executor Service"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", 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.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "onPrepare", type = "string", description = "Reference to a processor for preparing the exchange to be sent. Can be used to deep-clone messages that should be sent.", displayName = "On Prepare"), + @YamlProperty(name = "aggregationStrategy", type = "string", description = "Sets a reference to the AggregationStrategy to be used to assemble the replies from the split messages, into a single outgoing message from the Splitter. By default Camel will use the original incoming message to the splitter (leave it unchanged). You can also use a POJO as the AggregationStrategy", displayName = "Aggregation Strategy"), + @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy", displayName = "Aggregation Strategy Method Allow Null"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "delimiter", type = "string", 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, this can be needed in some special situations. The default value is comma.", displayName = "Delimiter"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "errorThreshold", type = "number"), + @YamlProperty(name = "executorService", type = "string", description = "To use a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatically implied, and you do not have to enable that option as well.", displayName = "Executor Service"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression of how to split the message body, such as as-is, using a tokenizer, or using a xpath.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "group", type = "number"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "maxFailedRecords", type = "number"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the org.apache.camel.Exchange to be sent. This can be used to deep-clone messages that should be sent, or any custom logic needed before the exchange is sent.", displayName = "On Prepare"), @YamlProperty(name = "parallelAggregate", type = "boolean", deprecated = true, defaultValue = "false", description = "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe.", displayName = "Parallel Aggregate"), - @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then processing each split message occurs concurrently. The caller thread still waits until all messages are fully processed before it continues.", displayName = "Parallel Processing"), - @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the unit of work with the parent and each of the split messages. By default each split exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), + @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then processing each split messages occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. It's only processing the sub messages from the splitter which happens concurrently. When parallel processing is enabled, then the Camel routing engin will continue processing using last used thread from the parallel thread pool. However, if you want to use the original thread that called the splitter, then make sure to enable the synchronous option as well. In parallel processing mode, you may want to also synchronous = true to force this EIP to process the sub-tasks using the upper bounds of the thread-pool. If using synchronous = false then Camel will allow its reactive routing engine to use as many threads as possible, which may be available due to sub-tasks using other thread-pools such as CompletableFuture.runAsync or others.", displayName = "Parallel Processing"), + @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Splitter will by default not share unit of work between the parent exchange and each split exchange. This means each split exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), - @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "If enabled then stops further split processing if an exception or failure occurred during processing of a split message, and the caused exception will be thrown. The default behavior is to not stop but continue processing till the end.", displayName = "Stop On Exception"), - @YamlProperty(name = "streaming", type = "boolean", defaultValue = "false", description = "When enabled then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter does not split all messages first.", displayName = "Streaming"), - @YamlProperty(name = "synchronous", type = "boolean", defaultValue = "false", description = "When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled.", displayName = "Synchronous"), - @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Total timeout in millis when using parallel processing. If the splitter has not been able to process all replies within the given timeframe, then the timeout triggers and the splitter breaks out and continues.", displayName = "Timeout") + @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the splitter will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The default behavior is to not stop but continue processing till the end", displayName = "Stop On Exception"), + @YamlProperty(name = "streaming", type = "boolean", defaultValue = "false", description = "When in streaming mode, then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter do not split all the messages first, but then we do not know the total size, and therefore the org.apache.camel.Exchange#SPLIT_SIZE is empty. In non-streaming mode (default) the splitter will split each message first, to know the total size, and then process each message one by one. This requires to keep all the split messages in memory and therefore requires more memory. The total size is provided in the org.apache.camel.Exchange#SPLIT_SIZE header. The streaming mode also affects the aggregation behavior. If enabled then Camel will process replies out-of-order, e.g. in the order they come back. If disabled, Camel will process replies in the same order as the messages was split.", displayName = "Streaming"), + @YamlProperty(name = "synchronous", type = "boolean", defaultValue = "false", description = "Sets whether synchronous processing should be strictly used. When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled.", displayName = "Synchronous"), + @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Sets a total timeout specified in millis, when using parallel processing. If the Splitter hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Splitter breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care.", displayName = "Timeout") } ) public static class SplitDefinitionDeserializer extends YamlDeserializerBase { @@ -17015,6 +16891,11 @@ protected boolean setProperty(SplitDefinition target, String propertyKey, target.setDisabled(val); break; } + case "errorThreshold": { + String val = asText(node); + target.setErrorThreshold(val); + break; + } case "executorService": { String val = asText(node); target.setExecutorService(val); @@ -17025,6 +16906,16 @@ protected boolean setProperty(SplitDefinition target, String propertyKey, target.setExpression(val); break; } + case "group": { + String val = asText(node); + target.setGroup(val); + break; + } + case "maxFailedRecords": { + String val = asText(node); + target.setMaxFailedRecords(val); + break; + } case "onPrepare": { String val = asText(node); target.setOnPrepare(val); @@ -17106,24 +16997,24 @@ protected boolean setProperty(SplitDefinition target, String propertyKey, types = org.apache.camel.model.errorhandler.SpringTransactionErrorHandlerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Spring Transaction Error Handler", - description = "Transactional error handler using Spring Transaction Manager that marks the transaction for rollback on failure", + description = "Spring based transactional error handler (requires camel-spring).", deprecated = false, properties = { - @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used for asynchronous redelivery.", displayName = "Executor Service Ref"), + @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used by the error handler", displayName = "Executor Service Ref"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "The logging level to use when logging caught exceptions.", displayName = "Level"), - @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler.", displayName = "Log Name"), - @YamlProperty(name = "loggerRef", type = "string", description = "Sets a reference to a logger to use for logging error handler activity.", displayName = "Logger Ref"), - @YamlProperty(name = "onExceptionOccurredRef", type = "string", 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.", displayName = "On Exception Occurred Ref"), - @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the exchange before handled by the failure processor or dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), - @YamlProperty(name = "onRedeliveryRef", type = "string", 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.", displayName = "On Redelivery Ref"), - @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "The redelivery settings for configuring retry attempts and delays when message processing fails.", displayName = "Redelivery Policy"), - @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a redelivery policy to lookup in the registry to be used.", displayName = "Redelivery Policy Ref"), - @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a reference to a retry while predicate. Redelivery continues as long as the predicate evaluates to true.", displayName = "Retry While Ref"), - @YamlProperty(name = "rollbackLoggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "WARN", description = "The logging level to use for logging transactional rollback. Default is WARN.", displayName = "Rollback Logging Level"), + @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "Logging level to use by error handler", displayName = "Level"), + @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler", displayName = "Log Name"), + @YamlProperty(name = "loggerRef", type = "string", description = "References to a logger to use as logger for the error handler", displayName = "Logger Ref"), + @YamlProperty(name = "onExceptionOccurredRef", type = "string", description = "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", displayName = "On Exception Occurred Ref"), + @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor / dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), + @YamlProperty(name = "onRedeliveryRef", type = "string", description = "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", displayName = "On Redelivery Ref"), + @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "Sets the redelivery settings", displayName = "Redelivery Policy"), + @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", displayName = "Redelivery Policy Ref"), + @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false.", displayName = "Retry While Ref"), + @YamlProperty(name = "rollbackLoggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "WARN", description = "Sets the logging level to use for logging transactional rollback. This option is default WARN.", displayName = "Rollback Logging Level"), @YamlProperty(name = "transactedPolicyRef", type = "string", description = "The transacted policy to use that is configured for either Spring or JTA based transactions. If no policy has been configured then Camel will attempt to auto-discover.", displayName = "Transacted Policy Ref"), - @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "If enabled, uses the original input message body (but not headers) when the exchange is moved to the dead letter queue after all redelivery attempts have been exhausted. This allows enriching the message with custom headers while keeping the original body. Cannot be used together with useOriginalMessage.", displayName = "Use Original Body"), - @YamlProperty(name = "useOriginalMessage", type = "boolean", 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.", displayName = "Use Original Message") + @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Body"), + @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Message") } ) public static class SpringTransactionErrorHandlerDefinitionDeserializer extends YamlDeserializerBase { @@ -17229,13 +17120,13 @@ protected boolean setProperty(SpringTransactionErrorHandlerDefinition target, types = org.apache.camel.model.StepDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Step", - description = "Groups a sequence of processing steps under a single logical name for improved monitoring, management, and tracing visibility", + description = "Routes the message to a sequence of processors which is grouped together as one logical name", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -17291,10 +17182,10 @@ protected boolean setProperty(StepDefinition target, String propertyKey, types = org.apache.camel.model.loadbalancer.StickyLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Sticky Load Balancer", - description = "Load balancer that routes messages to the same endpoint based on a correlation expression, ensuring session affinity", + description = "Sticky load balancing using an expression to calculate a correlation key to perform the sticky load balancing.", deprecated = false, properties = { - @YamlProperty(name = "correlationExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "The correlation expression to use to calculate the correlation key.", displayName = "Correlation Expression"), + @YamlProperty(name = "correlationExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "The correlation expression to use to calculate the correlation key", displayName = "Correlation Expression"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") } ) @@ -17336,13 +17227,13 @@ protected boolean setProperty(StickyLoadBalancerDefinition target, String proper types = org.apache.camel.model.StopDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Stop", - description = "Stops processing of the current message and marks the exchange as completed without sending it to any further steps", + description = "Stops the processing of the current message", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class StopDefinitionDeserializer extends YamlDeserializerBase { @@ -17393,15 +17284,15 @@ protected boolean setProperty(StopDefinition target, String propertyKey, types = org.apache.camel.model.config.StreamResequencerConfig.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Stream Config", - description = "Configures the stream-processing mode of the Resequence EIP, which continuously reorders messages as they arrive using a timeout", + description = "Configures stream-processing resequence eip.", deprecated = false, properties = { @YamlProperty(name = "capacity", type = "number", defaultValue = "1000", description = "Sets the capacity of the resequencer inbound queue.", displayName = "Capacity"), - @YamlProperty(name = "comparator", type = "string", description = "To use a custom comparator for ordering the sequence of messages.", displayName = "Comparator"), - @YamlProperty(name = "deliveryAttemptInterval", type = "string", defaultValue = "1000", description = "Sets the interval in milliseconds the stream resequencer will at most wait while waiting for the condition of being able to deliver.", displayName = "Delivery Attempt Interval"), - @YamlProperty(name = "ignoreInvalidExchanges", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid exchanges.", displayName = "Ignore Invalid Exchanges"), - @YamlProperty(name = "rejectOld", type = "boolean", defaultValue = "false", description = "If true, throws an exception when messages older than the last delivered message are processed.", displayName = "Reject Old"), - @YamlProperty(name = "timeout", type = "string", defaultValue = "1000", description = "Sets the minimum time (milliseconds) to wait for missing elements (messages).", displayName = "Timeout") + @YamlProperty(name = "comparator", type = "string", description = "To use a custom comparator as a org.apache.camel.processor.resequencer.ExpressionResultComparator type.", displayName = "Comparator"), + @YamlProperty(name = "deliveryAttemptInterval", type = "string", defaultValue = "1000", description = "Sets the interval in milliseconds the stream resequencer will at most wait while waiting for condition of being able to deliver.", displayName = "Delivery Attempt Interval"), + @YamlProperty(name = "ignoreInvalidExchanges", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid exchanges", displayName = "Ignore Invalid Exchanges"), + @YamlProperty(name = "rejectOld", type = "boolean", defaultValue = "false", description = "If true, throws an exception when messages older than the last delivered message are processed", displayName = "Reject Old"), + @YamlProperty(name = "timeout", type = "string", defaultValue = "1000", description = "Sets minimum time (milliseconds) to wait for missing elements (messages).", displayName = "Timeout") } ) public static class StreamResequencerConfigDeserializer extends YamlDeserializerBase { @@ -17463,11 +17354,11 @@ protected boolean setProperty(StreamResequencerConfig target, String propertyKey types = org.apache.camel.model.dataformat.SwiftMtDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "SWIFT MT", - description = "Encode and decode SWIFT MT messages", + description = "Encode and decode SWIFT MT messages.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "writeInJson", type = "boolean", defaultValue = "false", description = "Whether to marshal messages in JSON format.", displayName = "Write In Json") + @YamlProperty(name = "writeInJson", type = "boolean", defaultValue = "false", description = "The flag indicating that messages must be marshalled in a JSON format.", displayName = "Write In Json") } ) public static class SwiftMtDataFormatDeserializer extends YamlDeserializerBase { @@ -17513,14 +17404,14 @@ protected boolean setProperty(SwiftMtDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.SwiftMxDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "SWIFT MX", - description = "Encode and decode SWIFT MX messages", + description = "Encode and decode SWIFT MX messages.", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "readConfig", type = "string", description = "Refers to a specific configuration to use when unmarshalling an input stream to lookup from the registry.", displayName = "Read Config"), @YamlProperty(name = "readMessageId", type = "string", description = "The type of MX message to produce when unmarshalling an input stream. If not set, it will be automatically detected from the namespace used.", displayName = "Read Message Id"), @YamlProperty(name = "writeConfig", type = "string", description = "Refers to a specific configuration to use when marshalling a message to lookup from the registry.", displayName = "Write Config"), - @YamlProperty(name = "writeInJson", type = "boolean", defaultValue = "false", description = "Whether to marshal messages in JSON format.", displayName = "Write In Json") + @YamlProperty(name = "writeInJson", type = "boolean", defaultValue = "false", description = "The flag indicating that messages must be marshalled in a JSON format.", displayName = "Write In Json") } ) public static class SwiftMxDataFormatDeserializer extends YamlDeserializerBase { @@ -17576,7 +17467,7 @@ protected boolean setProperty(SwiftMxDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.SyslogDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Syslog", - description = "Marshall SyslogMessages to RFC3164 and RFC5424 messages and back", + description = "Marshall SyslogMessages to RFC3164 and RFC5424 messages and back.", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -17613,14 +17504,14 @@ protected boolean setProperty(SyslogDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.TarFileDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Tar File", - description = "Archive files into tarballs or extract files from tarballs", + description = "Archive files into tarballs or extract files from tarballs.", deprecated = false, properties = { - @YamlProperty(name = "allowEmptyDirectory", type = "boolean", defaultValue = "false", description = "Whether to allow getting the iterator even if the directory is empty, when the tar file has more than one entry.", displayName = "Allow Empty Directory"), + @YamlProperty(name = "allowEmptyDirectory", type = "boolean", defaultValue = "false", description = "If the tar file has more than one entry, setting this option to true, allows to get the iterator even if the directory is empty", displayName = "Allow Empty Directory"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxDecompressedSize", type = "number", defaultValue = "1073741824", description = "The maximum decompressed size of a tar file (in bytes). An IOException is thrown if the decompressed size exceeds this amount. Set to -1 to disable.", displayName = "Max Decompressed Size"), - @YamlProperty(name = "preservePathElements", type = "boolean", defaultValue = "false", description = "Whether to preserve path elements when the file name contains path elements in the tar file.", displayName = "Preserve Path Elements"), - @YamlProperty(name = "usingIterator", type = "boolean", defaultValue = "false", description = "Whether to use an iterator to split tar entries when the tar file has more than one entry, for use with the splitter EIP in streaming mode.", displayName = "Using Iterator") + @YamlProperty(name = "maxDecompressedSize", type = "number", defaultValue = "1073741824", description = "Set the maximum decompressed size of a tar file (in bytes). The default value if not specified corresponds to 1 gigabyte. An IOException will be thrown if the decompressed size exceeds this amount. Set to -1 to disable setting a maximum decompressed size.", displayName = "Max Decompressed Size"), + @YamlProperty(name = "preservePathElements", type = "boolean", defaultValue = "false", description = "If the file name contains path elements, setting this option to true, allows the path to be maintained in the tar file.", displayName = "Preserve Path Elements"), + @YamlProperty(name = "usingIterator", type = "boolean", defaultValue = "false", description = "If the tar file has more than one entry, the setting this option to true, allows working with the splitter EIP, to split the data using an iterator in a streaming mode.", displayName = "Using Iterator") } ) public static class TarFileDataFormatDeserializer extends YamlDeserializerBase { @@ -17676,10 +17567,10 @@ protected boolean setProperty(TarFileDataFormat target, String propertyKey, types = org.apache.camel.model.TemplatedRouteParameterDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Templated Route Parameter", - description = "Provides a parameter value for a templated route, binding a value to a route template parameter", + description = "An input parameter of a route template.", deprecated = false, properties = { - @YamlProperty(name = "name", type = "string", required = true, description = "The name of the parameter.", displayName = "Name"), + @YamlProperty(name = "name", type = "string", required = true, description = "The name of the parameter", displayName = "Name"), @YamlProperty(name = "value", type = "string", required = true, description = "The value of the parameter.", displayName = "Value") } ) @@ -17721,20 +17612,20 @@ protected boolean setProperty(TemplatedRouteParameterDefinition target, String p types = org.apache.camel.model.ThreadPoolProfileDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Thread Pool Profile", - description = "Defines a named thread pool profile with pool size, queue size, and thread keep-alive settings for use by EIPs and components", + description = "To configure thread pools", deprecated = false, properties = { - @YamlProperty(name = "allowCoreThreadTimeOut", type = "boolean", defaultValue = "false", description = "Whether idle core threads are allowed to timeout and therefore can shrink the pool size below the core pool size", displayName = "Allow Core Thread Time Out"), + @YamlProperty(name = "allowCoreThreadTimeOut", type = "boolean", defaultValue = "false", description = "Whether idle core threads is allowed to timeout and therefore can shrink the pool size below the core pool size Is by default true", displayName = "Allow Core Thread Time Out"), @YamlProperty(name = "defaultProfile", type = "boolean", defaultValue = "false", description = "Whether this profile is the default thread pool profile", displayName = "Default Profile"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "keepAliveTime", type = "number", description = "Sets the keep alive time for idle threads before they are terminated. Only applies to threads above the core pool size.", displayName = "Keep Alive Time"), - @YamlProperty(name = "maxPoolSize", type = "number", description = "Sets the maximum pool size (the upper bound of threads in the pool).", displayName = "Max Pool Size"), - @YamlProperty(name = "maxQueueSize", type = "number", description = "Sets the maximum number of tasks in the work queue. Use -1 or Integer.MAX_VALUE for an unbounded queue.", displayName = "Max Queue Size"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "poolSize", type = "number", description = "Sets the core pool size (number of threads to keep in the pool, even if idle).", displayName = "Pool Size"), - @YamlProperty(name = "rejectedPolicy", type = "enum:Abort,CallerRuns,Block", description = "Sets the handler for tasks which cannot be executed by the thread pool", displayName = "Rejected Policy"), - @YamlProperty(name = "timeUnit", type = "enum:NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS", description = "Sets the time unit to use for keep alive time. By default SECONDS is used.", displayName = "Time Unit") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "keepAliveTime", type = "number", description = "Sets the keep alive time for idle threads in the pool", displayName = "Keep Alive Time"), + @YamlProperty(name = "maxPoolSize", type = "number", description = "Sets the maximum pool size", displayName = "Max Pool Size"), + @YamlProperty(name = "maxQueueSize", type = "number", description = "Sets the maximum number of tasks in the work queue. Use -1 or Integer.MAX_VALUE for an unbounded queue", displayName = "Max Queue Size"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "poolSize", type = "number", description = "Sets the core pool size", displayName = "Pool Size"), + @YamlProperty(name = "rejectedPolicy", type = "enum:Abort,CallerRuns", description = "Sets the handler for tasks which cannot be executed by the thread pool.", displayName = "Rejected Policy"), + @YamlProperty(name = "timeUnit", type = "enum:NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS", description = "Sets the time unit to use for keep alive time By default SECONDS is used.", displayName = "Time Unit") } ) public static class ThreadPoolProfileDefinitionDeserializer extends YamlDeserializerBase { @@ -17820,23 +17711,23 @@ protected boolean setProperty(ThreadPoolProfileDefinition target, String propert types = org.apache.camel.model.ThreadsDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Threads", - description = "Offloads processing of subsequent steps in the route to a thread pool, enabling asynchronous and concurrent message handling", + description = "Specifies that all steps after this node are processed asynchronously", deprecated = false, properties = { - @YamlProperty(name = "allowCoreThreadTimeOut", type = "boolean", defaultValue = "false", description = "Whether idle core threads are allowed to timeout and therefore can shrink the pool size below the core pool size", displayName = "Allow Core Thread Time Out"), - @YamlProperty(name = "callerRunsWhenRejected", type = "boolean", defaultValue = "true", description = "Whether to use the caller thread as fallback when a task is rejected being added to the thread pool (when its full). This is only used as fallback if no rejectedPolicy has been configured, or the thread pool has no configured rejection handler.", displayName = "Caller Runs When Rejected"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "executorService", type = "string", description = "To refer to a custom thread pool or use a thread pool profile (as overlay)", displayName = "Executor Service"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "keepAliveTime", type = "number", description = "Sets the keep alive time for idle threads before they are terminated. Only applies to threads above the core pool size.", displayName = "Keep Alive Time"), - @YamlProperty(name = "maxPoolSize", type = "number", description = "Sets the maximum pool size (the upper bound of threads in the pool).", displayName = "Max Pool Size"), - @YamlProperty(name = "maxQueueSize", type = "number", description = "Sets the maximum number of tasks in the work queue. Use -1 or Integer.MAX_VALUE for an unbounded queue.", displayName = "Max Queue Size"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "poolSize", type = "number", description = "Sets the core pool size (number of threads to keep in the pool, even if idle).", displayName = "Pool Size"), - @YamlProperty(name = "rejectedPolicy", type = "enum:Abort,CallerRuns,Block", description = "Sets the handler for tasks which cannot be executed by the thread pool", displayName = "Rejected Policy"), - @YamlProperty(name = "threadName", type = "string", defaultValue = "Threads", description = "Sets the thread name pattern to use for naming threads created by this thread pool.", displayName = "Thread Name"), - @YamlProperty(name = "timeUnit", type = "enum:NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS", description = "Sets the time unit for the keep alive time. By default SECONDS is used.", displayName = "Time Unit") + @YamlProperty(name = "allowCoreThreadTimeOut", type = "boolean", defaultValue = "false", description = "Whether idle core threads are allowed to timeout and therefore can shrink the pool size below the core pool size Is by default false", displayName = "Allow Core Thread Time Out"), + @YamlProperty(name = "callerRunsWhenRejected", type = "boolean", defaultValue = "true", description = "Whether or not to use as caller runs as fallback when a task is rejected being added to the thread pool (when its full). This is only used as fallback if no rejectedPolicy has been configured, or the thread pool has no configured rejection handler. Is by default true", displayName = "Caller Runs When Rejected"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "executorService", type = "string", description = "To use a custom thread pool", displayName = "Executor Service"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "keepAliveTime", type = "number", description = "Sets the keep alive time for idle threads", displayName = "Keep Alive Time"), + @YamlProperty(name = "maxPoolSize", type = "number", description = "Sets the maximum pool size", displayName = "Max Pool Size"), + @YamlProperty(name = "maxQueueSize", type = "number", description = "Sets the maximum number of tasks in the work queue. Use -1 or Integer.MAX_VALUE for an unbounded queue", displayName = "Max Queue Size"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "poolSize", type = "number", description = "Sets the core pool size", displayName = "Pool Size"), + @YamlProperty(name = "rejectedPolicy", type = "enum:Abort,CallerRuns", description = "Sets the handler for tasks which cannot be executed by the thread pool.", displayName = "Rejected Policy"), + @YamlProperty(name = "threadName", type = "string", defaultValue = "Threads", description = "Sets the thread name to use.", displayName = "Thread Name"), + @YamlProperty(name = "timeUnit", type = "enum:NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS", description = "Sets the keep alive time unit. By default SECONDS is used.", displayName = "Time Unit") } ) public static class ThreadsDefinitionDeserializer extends YamlDeserializerBase { @@ -17938,13 +17829,13 @@ protected boolean setProperty(ThreadsDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.ThriftDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Thrift", - description = "Serialize and deserialize messages using Apache Thrift binary data format", + description = "Serialize and deserialize messages using Apache Thrift binary data format.", deprecated = false, properties = { - @YamlProperty(name = "contentTypeFormat", type = "enum:binary,json,sjson", defaultValue = "binary", description = "The content type format in which thrift message will be serialized/deserialized. The format can be native binary, json, or simple json.", displayName = "Content Type Format"), + @YamlProperty(name = "contentTypeFormat", type = "enum:binary,json,sjson", defaultValue = "binary", description = "Defines a content type format in which thrift message will be serialized/deserialized from(to) the Java been. The format can either be native or json for either native binary thrift, json or simple json fields representation. The default value is binary.", displayName = "Content Type Format"), @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "instanceClass", type = "string", description = "Name of class to use when unmarshalling.", displayName = "Instance Class") + @YamlProperty(name = "instanceClass", type = "string", description = "Name of class to use when unmarshalling", displayName = "Instance Class") } ) public static class ThriftDataFormatDeserializer extends YamlDeserializerBase { @@ -18000,22 +17891,22 @@ protected boolean setProperty(ThriftDataFormat target, String propertyKey, types = org.apache.camel.model.ThrottleDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Throttle", - description = "Limits the message throughput to a maximum number of messages per time period to avoid overloading downstream systems", + description = "Controls the rate at which messages are passed to the next node in the route", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), @YamlProperty(name = "asyncDelayed", type = "boolean", defaultValue = "false", description = "Enables asynchronous delay which means the thread will not block while delaying.", displayName = "Async Delayed"), - @YamlProperty(name = "callerRunsWhenRejected", type = "boolean", defaultValue = "true", description = "Whether or not the caller should run the task when it was rejected by the thread pool.", displayName = "Caller Runs When Rejected"), - @YamlProperty(name = "correlationExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "The correlation expression to use for throttle grouping. Exchanges with the same correlation key are throttled together.", displayName = "Correlation Expression"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "callerRunsWhenRejected", type = "boolean", defaultValue = "true", description = "Whether or not the caller should run the task when it was rejected by the thread pool. Is by default true", displayName = "Caller Runs When Rejected"), + @YamlProperty(name = "correlationExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "The expression used to calculate the correlation key to use for throttle grouping. The Exchange which has the same correlation key is throttled together.", displayName = "Correlation Expression"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), @YamlProperty(name = "executorService", type = "string", description = "To use a custom thread pool (ScheduledExecutorService) by the throttler.", displayName = "Executor Service"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression to set the maximum request count (for TotalRequests mode) or the maximum number of concurrent requests (for ConcurrentRequests mode).", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "mode", type = "enum:TotalRequests,ConcurrentRequests", 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.", displayName = "Mode"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "rejectExecution", type = "boolean", defaultValue = "false", description = "Whether or not throttler throws the ThrottlerRejectedExecutionException when the exchange exceeds the request limit.", displayName = "Reject Execution"), - @YamlProperty(name = "timePeriodMillis", type = "string", defaultValue = "1000", description = "Sets the time period during which the maximum request count is valid for.", displayName = "Time Period Millis") + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to configure the maximum number of messages to throttle per request", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "mode", type = "enum:TotalRequests,ConcurrentRequests", defaultValue = "TotalRequests", description = "Sets the throttling mode to one of the available modes enumerated in ThrottlingMode", displayName = "Mode"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "rejectExecution", type = "boolean", defaultValue = "false", description = "Whether or not throttler throws the ThrottlerRejectedExecutionException when the exchange exceeds the request limit Is by default false", displayName = "Reject Execution"), + @YamlProperty(name = "timePeriodMillis", type = "string", defaultValue = "1000", description = "Sets the time period during which the maximum request count is valid for", displayName = "Time Period Millis") } ) public static class ThrottleDefinitionDeserializer extends YamlDeserializerBase { @@ -18115,16 +18006,16 @@ protected boolean setProperty(ThrottleDefinition target, String propertyKey, types = org.apache.camel.model.ThrowExceptionDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Throw Exception", - description = "Throws an exception during route processing, either creating a new exception instance or re-throwing an existing one", + description = "Throws an exception", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "exceptionType", type = "string", description = "The fully qualified class name of the exception to throw. Used together with message.", displayName = "Exception Type"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "message", type = "string", description = "The message text for the exception to be thrown. Supports simple language expressions.", displayName = "Message"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "ref", type = "string", description = "Reference to an existing exception instance to lookup from the registry and throw.", displayName = "Ref") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "exceptionType", type = "string", description = "The class of the exception to create using the message.", displayName = "Exception Type"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "message", type = "string", description = "To create a new exception instance and use the given message as caused message (supports simple language)", displayName = "Message"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "ref", type = "string", description = "Reference to the exception instance to lookup from the registry to throw", displayName = "Ref") } ) public static class ThrowExceptionDefinitionDeserializer extends YamlDeserializerBase { @@ -18191,18 +18082,18 @@ protected boolean setProperty(ThrowExceptionDefinition target, String propertyKe types = org.apache.camel.model.ToDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "To", - description = "Sends the message to a fixed endpoint URI", + description = "Sends the message to a static endpoint", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "parameters", type = "object"), - @YamlProperty(name = "pattern", type = "enum:InOnly,InOut", description = "Sets the optional ExchangePattern to use. If not specified the default exchange pattern is used.", displayName = "Pattern"), - @YamlProperty(name = "uri", type = "string", required = true, description = "The uri of the endpoint to send to.", displayName = "Uri"), - @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive"), - @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving.", displayName = "Variable Send") + @YamlProperty(name = "pattern", type = "enum:InOnly,InOut", description = "Sets the optional ExchangePattern used to invoke this endpoint", displayName = "Pattern"), + @YamlProperty(name = "uri", type = "string", required = true, description = "Sets the uri of the endpoint to send to.", displayName = "Uri"), + @YamlProperty(name = "variableReceive", type = "string", 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. Important: When using receive variable then the received body is stored only in this variable and not on the current message.", displayName = "Variable Receive"), + @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Send") } ) public static class ToDefinitionDeserializer extends YamlDeserializerEndpointAwareBase { @@ -18285,22 +18176,22 @@ protected boolean setProperty(ToDefinition target, String propertyKey, String pr types = org.apache.camel.model.ToDynamicDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "To D", - description = "Sends the message to an endpoint URI computed dynamically from an expression, allowing the destination to vary per message", + description = "Sends the message to a dynamic endpoint", deprecated = false, properties = { - @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise toD if they are SendDynamicAware.", displayName = "Allow Optimised Components"), + @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise toD if they are org.apache.camel.spi.SendDynamicAware .", displayName = "Allow Optimised Components"), @YamlProperty(name = "autoStartComponents", type = "boolean", defaultValue = "true", description = "Whether to auto startup components when toD is starting up.", displayName = "Auto Start Components"), - @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the ProducerCache which is used to cache and reuse producers when uris are reused. Use 0 for default cache size, or -1 to turn cache off.", displayName = "Cache Size"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise producers/endpoints are stored in memory in the caches. However if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both producers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non frequent used producers.", displayName = "Cache Size"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), @YamlProperty(name = "ignoreInvalidEndpoint", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid endpoint URIs and skip sending the message.", displayName = "Ignore Invalid Endpoint"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "parameters", type = "object"), - @YamlProperty(name = "pattern", type = "enum:InOnly,InOut", description = "Sets the optional ExchangePattern used to invoke this endpoint.", displayName = "Pattern"), - @YamlProperty(name = "uri", type = "string", required = true, description = "The uri of the endpoint to send to. The uri can be dynamic computed using the simple language.", displayName = "Uri"), - @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive"), - @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving.", displayName = "Variable Send") + @YamlProperty(name = "pattern", type = "enum:InOnly,InOut", description = "Sets the optional ExchangePattern used to invoke this endpoint", displayName = "Pattern"), + @YamlProperty(name = "uri", type = "string", required = true, description = "The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression.", displayName = "Uri"), + @YamlProperty(name = "variableReceive", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Receive"), + @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Send") } ) public static class ToDynamicDefinitionDeserializer extends YamlDeserializerEndpointAwareBase { @@ -18402,18 +18293,18 @@ protected boolean setProperty(ToDynamicDefinition target, String propertyKey, types = org.apache.camel.model.TokenizerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Specialized tokenizer for AI applications", - description = "Tokenizes the message body for AI processing, splitting text into chunks suitable for embedding or LLM input", + description = "Represents a Camel tokenizer for AI.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), @YamlProperty(name = "langChain4jCharacterTokenizer", type = "object:org.apache.camel.model.tokenizer.LangChain4jCharacterTokenizerDefinition", oneOf = "tokenizerImplementation"), @YamlProperty(name = "langChain4jLineTokenizer", type = "object:org.apache.camel.model.tokenizer.LangChain4jLineTokenizerDefinition", oneOf = "tokenizerImplementation"), @YamlProperty(name = "langChain4jParagraphTokenizer", type = "object:org.apache.camel.model.tokenizer.LangChain4jParagraphTokenizerDefinition", oneOf = "tokenizerImplementation"), @YamlProperty(name = "langChain4jSentenceTokenizer", type = "object:org.apache.camel.model.tokenizer.LangChain4jSentenceTokenizerDefinition", oneOf = "tokenizerImplementation"), @YamlProperty(name = "langChain4jWordTokenizer", type = "object:org.apache.camel.model.tokenizer.LangChain4jWordTokenizerDefinition", oneOf = "tokenizerImplementation"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class TokenizerDefinitionDeserializer extends YamlDeserializerBase { @@ -18495,21 +18386,21 @@ protected boolean setProperty(TokenizerDefinition target, String propertyKey, types = org.apache.camel.model.language.TokenizerExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Tokenize", - description = "Tokenize text payloads using delimiter patterns", + description = "Tokenize text payloads using delimiter patterns.", deprecated = false, properties = { @YamlProperty(name = "endToken", type = "string", description = "The end token to use as tokenizer if using start/end token pairs. You can use simple language as the token to support dynamic tokens.", displayName = "End Token"), @YamlProperty(name = "group", type = "string", description = "To group N parts together, for example to split big files into chunks of 1000 lines. You can use simple language as the group to support dynamic group sizes.", displayName = "Group"), @YamlProperty(name = "groupDelimiter", type = "string", description = "Sets the delimiter to use when grouping. If this has not been set then token will be used as the delimiter.", displayName = "Group Delimiter"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "includeTokens", type = "boolean", defaultValue = "false", description = "Whether to include the tokens in the parts when using pairs. When including tokens then the endToken property must also be configured (to use pair mode).", displayName = "Include Tokens"), - @YamlProperty(name = "inheritNamespaceTagName", type = "string", description = "To inherit namespaces from a root/parent tag name when using XML. You can use simple language as the tag name to support dynamic names.", displayName = "Inherit Namespace Tag Name"), - @YamlProperty(name = "regex", type = "boolean", defaultValue = "false", description = "If the token is a regular expression pattern.", displayName = "Regex"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), - @YamlProperty(name = "skipFirst", type = "boolean", defaultValue = "false", description = "To skip the very first element.", displayName = "Skip First"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "includeTokens", type = "boolean", defaultValue = "false", description = "Whether to include the tokens in the parts when using pairs. When including tokens then the endToken property must also be configured (to use pair mode). The default value is false", displayName = "Include Tokens"), + @YamlProperty(name = "inheritNamespaceTagName", type = "string", description = "To inherit namespaces from a root/parent tag name when using XML You can use simple language as the tag name to support dynamic names.", displayName = "Inherit Namespace Tag Name"), + @YamlProperty(name = "regex", type = "boolean", defaultValue = "false", description = "If the token is a regular expression pattern. The default value is false", displayName = "Regex"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "skipFirst", type = "boolean", defaultValue = "false", description = "To skip the very first element", displayName = "Skip First"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), @YamlProperty(name = "token", type = "string", required = true, description = "The (start) token to use as tokenizer, for example you can use the new line token. You can use simple language as the token to support dynamic tokens.", displayName = "Token"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim"), @YamlProperty(name = "xml", type = "boolean", defaultValue = "false", description = "Whether the input is XML messages. This option must be set to true if working with XML payloads.", displayName = "Xml") } ) @@ -18653,7 +18544,7 @@ protected boolean setProperty(TokenizerImplementationDefinition target, String p types = org.apache.camel.model.loadbalancer.TopicLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Topic Load Balancer", - description = "Load balancer that sends every message to all destination endpoints, similar to a publish-subscribe pattern", + description = "Topic which sends to all destinations.", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -18690,14 +18581,14 @@ protected boolean setProperty(TopicLoadBalancerDefinition target, String propert types = org.apache.camel.model.TransactedDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Transacted", - description = "Wraps the route in a transaction, ensuring that all steps within the transacted block either complete together or roll back on failure", + description = "Enables transaction on the route", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "ref", type = "string", description = "Reference to lookup a transacted policy in the registry.", displayName = "Ref"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "ref", type = "string", description = "Sets a reference to use for lookup the policy in the registry.", displayName = "Ref"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -18758,15 +18649,15 @@ protected boolean setProperty(TransactedDefinition target, String propertyKey, types = org.apache.camel.model.TransformDataTypeDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Transform Data Type", - description = "Transforms the message body between known data types (such as XML, JSON, Java objects) using registered data type transformers", + description = "Transforms the message body based on known data type transformers.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "fromType", type = "string", description = "The source data type URN in the format 'scheme:name' (e.g. 'java:com.example.MyClass'). If not specified, the current message body type is used.", displayName = "From Type"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "toType", type = "string", required = true, description = "The target data type URN in the format 'scheme:name' (e.g. 'json:JsonOrder') that the message body should be transformed into.", displayName = "To Type") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "fromType", type = "string", description = "From type used in data type transformation.", displayName = "From Type"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "toType", type = "string", required = true, description = "To type used as a target data type in the transformation.", displayName = "To Type") } ) public static class TransformDataTypeDefinitionDeserializer extends YamlDeserializerBase { @@ -18827,15 +18718,15 @@ protected boolean setProperty(TransformDataTypeDefinition target, String propert types = org.apache.camel.model.TransformDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Transform", - description = "Sets the message body using an expression. Unlike setBody, transform also sets the OUT message body in InOut exchanges", + description = "Transforms the message body based on an expression", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression whose result replaces the message body.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to return the transformed message body (the new message body to use)", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") } ) public static class TransformDefinitionDeserializer extends YamlDeserializerBase { @@ -18901,7 +18792,7 @@ protected boolean setProperty(TransformDefinition target, String propertyKey, types = org.apache.camel.model.transformer.TransformersDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Transformations", - description = "Container for defining data type transformer definitions", + description = "To configure transformers.", deprecated = false, properties = { @YamlProperty(name = "customTransformer", type = "object:org.apache.camel.model.transformer.CustomTransformerDefinition"), @@ -18983,15 +18874,15 @@ protected boolean setProperty(TransformersDefinition target, String propertyKey, types = org.apache.camel.model.TryDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Do Try", - description = "Wraps route steps in a try-catch-finally block for fine-grained exception handling within the route", + description = "Marks the beginning of a try, catch, finally block", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), @YamlProperty(name = "doCatch", type = "array:org.apache.camel.model.CatchDefinition", description = "Catches exceptions as part of a try, catch, finally block", displayName = "Do Catch"), @YamlProperty(name = "doFinally", type = "object:org.apache.camel.model.FinallyDefinition", description = "Path traversed when a try, catch, finally block exits", displayName = "Do Finally"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -19057,27 +18948,27 @@ protected boolean setProperty(TryDefinition target, String propertyKey, String p types = org.apache.camel.model.dataformat.UniVocityCsvDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "uniVocity CSV", - description = "Marshal and unmarshal Java objects from and to CSV (Comma Separated Values) using UniVocity Parsers", + description = "Marshal and unmarshal Java objects from and to CSV (Comma Separated Values) using UniVocity Parsers.", deprecated = false, properties = { - @YamlProperty(name = "asMap", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected).", displayName = "As Map"), - @YamlProperty(name = "comment", type = "string", defaultValue = "#", description = "The comment symbol.", displayName = "Comment"), - @YamlProperty(name = "delimiter", type = "string", defaultValue = ",", description = "The delimiter of values.", displayName = "Delimiter"), + @YamlProperty(name = "asMap", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected). The default value is false", displayName = "As Map"), + @YamlProperty(name = "comment", type = "string", defaultValue = "#", description = "The comment symbol. The default value is #", displayName = "Comment"), + @YamlProperty(name = "delimiter", type = "string", defaultValue = ",", description = "The delimiter of values", displayName = "Delimiter"), @YamlProperty(name = "emptyValue", type = "string", description = "The String representation of an empty value.", displayName = "Empty Value"), - @YamlProperty(name = "headerExtractionEnabled", type = "boolean", defaultValue = "false", description = "Whether or not the header must be read in the first line of the test document.", displayName = "Header Extraction Enabled"), - @YamlProperty(name = "headersDisabled", type = "boolean", defaultValue = "false", description = "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header.", displayName = "Headers Disabled"), + @YamlProperty(name = "headerExtractionEnabled", type = "boolean", defaultValue = "false", description = "Whether or not the header must be read in the first line of the test document. The default value is false", displayName = "Header Extraction Enabled"), + @YamlProperty(name = "headersDisabled", type = "boolean", defaultValue = "false", description = "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header. The default value is false", displayName = "Headers Disabled"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreLeadingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the leading white spaces must be ignored.", displayName = "Ignore Leading Whitespaces"), - @YamlProperty(name = "ignoreTrailingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the trailing white spaces must be ignored.", displayName = "Ignore Trailing Whitespaces"), - @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once.", displayName = "Lazy Load"), - @YamlProperty(name = "lineSeparator", type = "string", description = "The line separator of the files. The default value is to use the JVM platform line separator.", displayName = "Line Separator"), + @YamlProperty(name = "ignoreLeadingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the leading white spaces must be ignored. The default value is true", displayName = "Ignore Leading Whitespaces"), + @YamlProperty(name = "ignoreTrailingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the trailing white spaces must be ignored. The default value is true", displayName = "Ignore Trailing Whitespaces"), + @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once. The default value is false", displayName = "Lazy Load"), + @YamlProperty(name = "lineSeparator", type = "string", description = "The line separator of the files. The default value is to use the JVM platform line separator", displayName = "Line Separator"), @YamlProperty(name = "normalizedLineSeparator", type = "string", description = "The normalized line separator of the files. The default value is a new line character.", displayName = "Normalized Line Separator"), - @YamlProperty(name = "nullValue", type = "string", description = "The string representation of a null value.", displayName = "Null Value"), + @YamlProperty(name = "nullValue", type = "string", description = "The string representation of a null value. The default value is null", displayName = "Null Value"), @YamlProperty(name = "numberOfRecordsToRead", type = "number", description = "The maximum number of record to read.", displayName = "Number Of Records To Read"), @YamlProperty(name = "quote", type = "string", defaultValue = "\"", description = "The quote symbol.", displayName = "Quote"), @YamlProperty(name = "quoteAllFields", type = "boolean", defaultValue = "false", description = "Whether or not all values must be quoted when writing them.", displayName = "Quote All Fields"), - @YamlProperty(name = "quoteEscape", type = "string", defaultValue = "\"", description = "The quote escape symbol.", displayName = "Quote Escape"), - @YamlProperty(name = "skipEmptyLines", type = "boolean", defaultValue = "true", description = "Whether or not the empty lines must be ignored.", displayName = "Skip Empty Lines"), + @YamlProperty(name = "quoteEscape", type = "string", defaultValue = "\"", description = "The quote escape symbol", displayName = "Quote Escape"), + @YamlProperty(name = "skipEmptyLines", type = "boolean", defaultValue = "true", description = "Whether or not the empty lines must be ignored. The default value is true", displayName = "Skip Empty Lines"), @YamlProperty(name = "univocityHeader", type = "array:org.apache.camel.model.dataformat.UniVocityHeader") } ) @@ -19204,26 +19095,26 @@ protected boolean setProperty(UniVocityCsvDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.UniVocityFixedDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "uniVocity Fixed Length", - description = "Marshal and unmarshal Java objects from and to fixed length records using UniVocity Parsers", + description = "Marshal and unmarshal Java objects from and to fixed length records using UniVocity Parsers.", deprecated = false, properties = { - @YamlProperty(name = "asMap", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected).", displayName = "As Map"), - @YamlProperty(name = "comment", type = "string", defaultValue = "#", description = "The comment symbol.", displayName = "Comment"), + @YamlProperty(name = "asMap", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected). The default value is false", displayName = "As Map"), + @YamlProperty(name = "comment", type = "string", defaultValue = "#", description = "The comment symbol. The default value is #", displayName = "Comment"), @YamlProperty(name = "emptyValue", type = "string", description = "The String representation of an empty value.", displayName = "Empty Value"), - @YamlProperty(name = "headerExtractionEnabled", type = "boolean", defaultValue = "false", description = "Whether or not the header must be read in the first line of the test document.", displayName = "Header Extraction Enabled"), - @YamlProperty(name = "headersDisabled", type = "boolean", defaultValue = "false", description = "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header.", displayName = "Headers Disabled"), + @YamlProperty(name = "headerExtractionEnabled", type = "boolean", defaultValue = "false", description = "Whether or not the header must be read in the first line of the test document. The default value is false", displayName = "Header Extraction Enabled"), + @YamlProperty(name = "headersDisabled", type = "boolean", defaultValue = "false", description = "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header. The default value is false", displayName = "Headers Disabled"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreLeadingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the leading white spaces must be ignored.", displayName = "Ignore Leading Whitespaces"), - @YamlProperty(name = "ignoreTrailingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the trailing white spaces must be ignored.", displayName = "Ignore Trailing Whitespaces"), - @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once.", displayName = "Lazy Load"), - @YamlProperty(name = "lineSeparator", type = "string", description = "The line separator of the files. The default value is to use the JVM platform line separator.", displayName = "Line Separator"), + @YamlProperty(name = "ignoreLeadingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the leading white spaces must be ignored. The default value is true", displayName = "Ignore Leading Whitespaces"), + @YamlProperty(name = "ignoreTrailingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the trailing white spaces must be ignored. The default value is true", displayName = "Ignore Trailing Whitespaces"), + @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once. The default value is false", displayName = "Lazy Load"), + @YamlProperty(name = "lineSeparator", type = "string", description = "The line separator of the files. The default value is to use the JVM platform line separator", displayName = "Line Separator"), @YamlProperty(name = "normalizedLineSeparator", type = "string", description = "The normalized line separator of the files. The default value is a new line character.", displayName = "Normalized Line Separator"), - @YamlProperty(name = "nullValue", type = "string", description = "The string representation of a null value.", displayName = "Null Value"), + @YamlProperty(name = "nullValue", type = "string", description = "The string representation of a null value. The default value is null", displayName = "Null Value"), @YamlProperty(name = "numberOfRecordsToRead", type = "number", description = "The maximum number of record to read.", displayName = "Number Of Records To Read"), - @YamlProperty(name = "padding", type = "string", description = "The padding character. The default value is a space.", displayName = "Padding"), - @YamlProperty(name = "recordEndsOnNewline", type = "boolean", defaultValue = "false", description = "Whether the record ends on a new line.", displayName = "Record Ends On Newline"), - @YamlProperty(name = "skipEmptyLines", type = "boolean", defaultValue = "true", description = "Whether or not the empty lines must be ignored.", displayName = "Skip Empty Lines"), - @YamlProperty(name = "skipTrailingCharsUntilNewline", type = "boolean", defaultValue = "false", description = "Whether to skip trailing characters until a new line is found.", displayName = "Skip Trailing Chars Until Newline"), + @YamlProperty(name = "padding", type = "string", description = "The padding character. The default value is a space", displayName = "Padding"), + @YamlProperty(name = "recordEndsOnNewline", type = "boolean", defaultValue = "false", description = "Whether or not the record ends on new line. The default value is false", displayName = "Record Ends On Newline"), + @YamlProperty(name = "skipEmptyLines", type = "boolean", defaultValue = "true", description = "Whether or not the empty lines must be ignored. The default value is true", displayName = "Skip Empty Lines"), + @YamlProperty(name = "skipTrailingCharsUntilNewline", type = "boolean", defaultValue = "false", description = "Whether or not the trailing characters until new line must be ignored. The default value is false", displayName = "Skip Trailing Chars Until Newline"), @YamlProperty(name = "univocityHeader", type = "array:org.apache.camel.model.dataformat.UniVocityHeader") } ) @@ -19345,11 +19236,11 @@ protected boolean setProperty(UniVocityFixedDataFormat target, String propertyKe types = org.apache.camel.model.dataformat.UniVocityHeader.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "uniVocity Header", - description = "Defines a column header for UniVocity data format configuration", + description = "To configure headers for UniVocity data formats.", deprecated = false, properties = { - @YamlProperty(name = "length", type = "string", description = "Header length.", displayName = "Length"), - @YamlProperty(name = "name", type = "string", displayName = "Name") + @YamlProperty(name = "length", type = "string", description = "Header length", displayName = "Length"), + @YamlProperty(name = "name", type = "string", description = "Header name", displayName = "Name") } ) public static class UniVocityHeaderDeserializer extends YamlDeserializerBase { @@ -19390,24 +19281,24 @@ protected boolean setProperty(UniVocityHeader target, String propertyKey, types = org.apache.camel.model.dataformat.UniVocityTsvDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "uniVocity TSV", - description = "Marshal and unmarshal Java objects from and to TSV (Tab-Separated Values) records using UniVocity Parsers", + description = "Marshal and unmarshal Java objects from and to TSV (Tab-Separated Values) records using UniVocity Parsers.", deprecated = false, properties = { - @YamlProperty(name = "asMap", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected).", displayName = "As Map"), - @YamlProperty(name = "comment", type = "string", defaultValue = "#", description = "The comment symbol.", displayName = "Comment"), + @YamlProperty(name = "asMap", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected). The default value is false", displayName = "As Map"), + @YamlProperty(name = "comment", type = "string", defaultValue = "#", description = "The comment symbol. The default value is #", displayName = "Comment"), @YamlProperty(name = "emptyValue", type = "string", description = "The String representation of an empty value.", displayName = "Empty Value"), @YamlProperty(name = "escapeChar", type = "string", defaultValue = "\\", description = "The escape character.", displayName = "Escape Char"), - @YamlProperty(name = "headerExtractionEnabled", type = "boolean", defaultValue = "false", description = "Whether or not the header must be read in the first line of the test document.", displayName = "Header Extraction Enabled"), - @YamlProperty(name = "headersDisabled", type = "boolean", defaultValue = "false", description = "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header.", displayName = "Headers Disabled"), + @YamlProperty(name = "headerExtractionEnabled", type = "boolean", defaultValue = "false", description = "Whether or not the header must be read in the first line of the test document. The default value is false", displayName = "Header Extraction Enabled"), + @YamlProperty(name = "headersDisabled", type = "boolean", defaultValue = "false", description = "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header. The default value is false", displayName = "Headers Disabled"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreLeadingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the leading white spaces must be ignored.", displayName = "Ignore Leading Whitespaces"), - @YamlProperty(name = "ignoreTrailingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the trailing white spaces must be ignored.", displayName = "Ignore Trailing Whitespaces"), - @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once.", displayName = "Lazy Load"), - @YamlProperty(name = "lineSeparator", type = "string", description = "The line separator of the files. The default value is to use the JVM platform line separator.", displayName = "Line Separator"), + @YamlProperty(name = "ignoreLeadingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the leading white spaces must be ignored. The default value is true", displayName = "Ignore Leading Whitespaces"), + @YamlProperty(name = "ignoreTrailingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the trailing white spaces must be ignored. The default value is true", displayName = "Ignore Trailing Whitespaces"), + @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once. The default value is false", displayName = "Lazy Load"), + @YamlProperty(name = "lineSeparator", type = "string", description = "The line separator of the files. The default value is to use the JVM platform line separator", displayName = "Line Separator"), @YamlProperty(name = "normalizedLineSeparator", type = "string", description = "The normalized line separator of the files. The default value is a new line character.", displayName = "Normalized Line Separator"), - @YamlProperty(name = "nullValue", type = "string", description = "The string representation of a null value.", displayName = "Null Value"), + @YamlProperty(name = "nullValue", type = "string", description = "The string representation of a null value. The default value is null", displayName = "Null Value"), @YamlProperty(name = "numberOfRecordsToRead", type = "number", description = "The maximum number of record to read.", displayName = "Number Of Records To Read"), - @YamlProperty(name = "skipEmptyLines", type = "boolean", defaultValue = "true", description = "Whether or not the empty lines must be ignored.", displayName = "Skip Empty Lines"), + @YamlProperty(name = "skipEmptyLines", type = "boolean", defaultValue = "true", description = "Whether or not the empty lines must be ignored. The default value is true", displayName = "Skip Empty Lines"), @YamlProperty(name = "univocityHeader", type = "array:org.apache.camel.model.dataformat.UniVocityHeader") } ) @@ -19519,64 +19410,64 @@ protected boolean setProperty(UniVocityTsvDataFormat target, String propertyKey, types = org.apache.camel.model.UnmarshalDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Unmarshal", - description = "Deserializes the message body from a specific data format such as JSON, XML, CSV, or Protobuf into a Java object", + description = "Converts the message data received from the wire into a format that Apache Camel processors can consume", deprecated = false, properties = { @YamlProperty(name = "allowNullBody", type = "boolean", defaultValue = "false", description = "Indicates whether null is allowed as value of a body to unmarshall.", displayName = "Allow Null Body"), - @YamlProperty(name = "asn1", type = "object:org.apache.camel.model.dataformat.ASN1DataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "avro", type = "object:org.apache.camel.model.dataformat.AvroDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "barcode", type = "object:org.apache.camel.model.dataformat.BarcodeDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "base64", type = "object:org.apache.camel.model.dataformat.Base64DataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "beanio", type = "object:org.apache.camel.model.dataformat.BeanioDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "bindy", type = "object:org.apache.camel.model.dataformat.BindyDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "cbor", type = "object:org.apache.camel.model.dataformat.CBORDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "crypto", type = "object:org.apache.camel.model.dataformat.CryptoDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "csv", type = "object:org.apache.camel.model.dataformat.CsvDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "custom", type = "object:org.apache.camel.model.dataformat.CustomDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "dfdl", type = "object:org.apache.camel.model.dataformat.DfdlDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "fhirJson", type = "object:org.apache.camel.model.dataformat.FhirJsonDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "fhirXml", type = "object:org.apache.camel.model.dataformat.FhirXmlDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "flatpack", type = "object:org.apache.camel.model.dataformat.FlatpackDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "fory", type = "object:org.apache.camel.model.dataformat.ForyDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "grok", type = "object:org.apache.camel.model.dataformat.GrokDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "groovyJson", type = "object:org.apache.camel.model.dataformat.GroovyJSonDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "groovyXml", type = "object:org.apache.camel.model.dataformat.GroovyXmlDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "gzipDeflater", type = "object:org.apache.camel.model.dataformat.GzipDeflaterDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "hl7", type = "object:org.apache.camel.model.dataformat.HL7DataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "ical", type = "object:org.apache.camel.model.dataformat.IcalDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "iso8583", type = "object:org.apache.camel.model.dataformat.Iso8583DataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "jacksonXml", type = "object:org.apache.camel.model.dataformat.JacksonXMLDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "jaxb", type = "object:org.apache.camel.model.dataformat.JaxbDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "json", type = "object:org.apache.camel.model.dataformat.JsonDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "jsonApi", type = "object:org.apache.camel.model.dataformat.JsonApiDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "lzf", type = "object:org.apache.camel.model.dataformat.LZFDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "mimeMultipart", type = "object:org.apache.camel.model.dataformat.MimeMultipartDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "ocsf", type = "object:org.apache.camel.model.dataformat.OcsfDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "parquetAvro", type = "object:org.apache.camel.model.dataformat.ParquetAvroDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "pgp", type = "object:org.apache.camel.model.dataformat.PGPDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "pqc", type = "object:org.apache.camel.model.dataformat.PQCDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "protobuf", type = "object:org.apache.camel.model.dataformat.ProtobufDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "rss", type = "object:org.apache.camel.model.dataformat.RssDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "smooks", type = "object:org.apache.camel.model.dataformat.SmooksDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "soap", type = "object:org.apache.camel.model.dataformat.SoapDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "swiftMt", type = "object:org.apache.camel.model.dataformat.SwiftMtDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "swiftMx", type = "object:org.apache.camel.model.dataformat.SwiftMxDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "syslog", type = "object:org.apache.camel.model.dataformat.SyslogDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "tarFile", type = "object:org.apache.camel.model.dataformat.TarFileDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "thrift", type = "object:org.apache.camel.model.dataformat.ThriftDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "univocityCsv", type = "object:org.apache.camel.model.dataformat.UniVocityCsvDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "univocityFixed", type = "object:org.apache.camel.model.dataformat.UniVocityFixedDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "univocityTsv", type = "object:org.apache.camel.model.dataformat.UniVocityTsvDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive"), - @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving.", displayName = "Variable Send"), - @YamlProperty(name = "xmlSecurity", type = "object:org.apache.camel.model.dataformat.XMLSecurityDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "yaml", type = "object:org.apache.camel.model.dataformat.YAMLDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "zipDeflater", type = "object:org.apache.camel.model.dataformat.ZipDeflaterDataFormat", required = true, oneOf = "dataFormatType"), - @YamlProperty(name = "zipFile", type = "object:org.apache.camel.model.dataformat.ZipFileDataFormat", required = true, oneOf = "dataFormatType") + @YamlProperty(name = "asn1", type = "object:org.apache.camel.model.dataformat.ASN1DataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "avro", type = "object:org.apache.camel.model.dataformat.AvroDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "barcode", type = "object:org.apache.camel.model.dataformat.BarcodeDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "base64", type = "object:org.apache.camel.model.dataformat.Base64DataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "beanio", type = "object:org.apache.camel.model.dataformat.BeanioDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "bindy", type = "object:org.apache.camel.model.dataformat.BindyDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "cbor", type = "object:org.apache.camel.model.dataformat.CBORDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "crypto", type = "object:org.apache.camel.model.dataformat.CryptoDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "csv", type = "object:org.apache.camel.model.dataformat.CsvDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "custom", type = "object:org.apache.camel.model.dataformat.CustomDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "dfdl", type = "object:org.apache.camel.model.dataformat.DfdlDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "fhirJson", type = "object:org.apache.camel.model.dataformat.FhirJsonDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "fhirXml", type = "object:org.apache.camel.model.dataformat.FhirXmlDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "flatpack", type = "object:org.apache.camel.model.dataformat.FlatpackDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "fory", type = "object:org.apache.camel.model.dataformat.ForyDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "grok", type = "object:org.apache.camel.model.dataformat.GrokDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "groovyJson", type = "object:org.apache.camel.model.dataformat.GroovyJSonDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "groovyXml", type = "object:org.apache.camel.model.dataformat.GroovyXmlDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "gzipDeflater", type = "object:org.apache.camel.model.dataformat.GzipDeflaterDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "hl7", type = "object:org.apache.camel.model.dataformat.HL7DataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "ical", type = "object:org.apache.camel.model.dataformat.IcalDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "iso8583", type = "object:org.apache.camel.model.dataformat.Iso8583DataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "jacksonXml", type = "object:org.apache.camel.model.dataformat.JacksonXMLDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "jaxb", type = "object:org.apache.camel.model.dataformat.JaxbDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "json", type = "object:org.apache.camel.model.dataformat.JsonDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "jsonApi", type = "object:org.apache.camel.model.dataformat.JsonApiDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "lzf", type = "object:org.apache.camel.model.dataformat.LZFDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "mimeMultipart", type = "object:org.apache.camel.model.dataformat.MimeMultipartDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "ocsf", type = "object:org.apache.camel.model.dataformat.OcsfDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "parquetAvro", type = "object:org.apache.camel.model.dataformat.ParquetAvroDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "pgp", type = "object:org.apache.camel.model.dataformat.PGPDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "pqc", type = "object:org.apache.camel.model.dataformat.PQCDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "protobuf", type = "object:org.apache.camel.model.dataformat.ProtobufDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "rss", type = "object:org.apache.camel.model.dataformat.RssDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "smooks", type = "object:org.apache.camel.model.dataformat.SmooksDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "soap", type = "object:org.apache.camel.model.dataformat.SoapDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "swiftMt", type = "object:org.apache.camel.model.dataformat.SwiftMtDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "swiftMx", type = "object:org.apache.camel.model.dataformat.SwiftMxDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "syslog", type = "object:org.apache.camel.model.dataformat.SyslogDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "tarFile", type = "object:org.apache.camel.model.dataformat.TarFileDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "thrift", type = "object:org.apache.camel.model.dataformat.ThriftDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "univocityCsv", type = "object:org.apache.camel.model.dataformat.UniVocityCsvDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "univocityFixed", type = "object:org.apache.camel.model.dataformat.UniVocityFixedDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "univocityTsv", type = "object:org.apache.camel.model.dataformat.UniVocityTsvDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "variableReceive", type = "string", 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. Important: When using receive variable then the received body is stored only in this variable and not on the current message.", displayName = "Variable Receive"), + @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Send"), + @YamlProperty(name = "xmlSecurity", type = "object:org.apache.camel.model.dataformat.XMLSecurityDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "yaml", type = "object:org.apache.camel.model.dataformat.YAMLDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "zipDeflater", type = "object:org.apache.camel.model.dataformat.ZipDeflaterDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "zipFile", type = "object:org.apache.camel.model.dataformat.ZipFileDataFormat", oneOf = "dataFormatType") } ) public static class UnmarshalDefinitionDeserializer extends YamlDeserializerBase { @@ -19754,16 +19645,6 @@ protected boolean setProperty(UnmarshalDefinition target, String propertyKey, target.setDataFormatType(val); break; } - case "pgp": { - org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); - target.setDataFormatType(val); - break; - } - case "pqc": { - org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); - target.setDataFormatType(val); - break; - } case "protobuf": { org.apache.camel.model.dataformat.ProtobufDataFormat val = asType(node, org.apache.camel.model.dataformat.ProtobufDataFormat.class); target.setDataFormatType(val); @@ -19829,6 +19710,16 @@ protected boolean setProperty(UnmarshalDefinition target, String propertyKey, target.setDataFormatType(val); break; } + case "pgp": { + org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); + target.setDataFormatType(val); + break; + } + case "pqc": { + org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); + target.setDataFormatType(val); + break; + } case "yaml": { org.apache.camel.model.dataformat.YAMLDataFormat val = asType(node, org.apache.camel.model.dataformat.YAMLDataFormat.class); target.setDataFormatType(val); @@ -19887,16 +19778,16 @@ protected boolean setProperty(UnmarshalDefinition target, String propertyKey, types = org.apache.camel.model.ValidateDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Validate", - description = "Validates the message against a predicate expression and throws a PredicateValidationException if the validation fails", + description = "Validates a message based on an expression", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The predicate expression to validate against the current message. If the predicate returns false, a PredicateValidationException is thrown.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "predicateExceptionFactory", type = "string", description = "Reference to a custom PredicateExceptionFactory for creating the exception when validation fails.", displayName = "Predicate Exception Factory") + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to use for validation as a predicate. The expression should return either true or false. If returning false the message is invalid and an exception is thrown.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "predicateExceptionFactory", type = "string", description = "The bean id of custom PredicateExceptionFactory to use for creating the exception when the validation fails. By default, Camel will throw PredicateValidationException. By using a custom factory you can control which exception to throw instead.", displayName = "Predicate Exception Factory") } ) public static class ValidateDefinitionDeserializer extends YamlDeserializerBase { @@ -19967,7 +19858,7 @@ protected boolean setProperty(ValidateDefinition target, String propertyKey, types = org.apache.camel.model.validator.ValidatorsDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Validations", - description = "Container for defining data type validator definitions", + description = "To configure validators.", deprecated = false, properties = { @YamlProperty(name = "customValidator", type = "object:org.apache.camel.model.validator.CustomValidatorDefinition"), @@ -20039,9 +19930,9 @@ protected boolean setProperty(ValidatorsDefinition target, String propertyKey, types = org.apache.camel.model.ValueDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Value", - description = "Holds a single value, typically used as a child element in collection-based configurations", + description = "A single value", deprecated = false, - properties = @YamlProperty(name = "value", type = "string", description = "The value.", displayName = "Value") + properties = @YamlProperty(name = "value", type = "string", description = "Property value", displayName = "Value") ) public static class ValueDefinitionDeserializer extends YamlDeserializerBase { public ValueDefinitionDeserializer() { @@ -20085,9 +19976,9 @@ protected boolean setProperty(ValueDefinition target, String propertyKey, description = "Gets a variable", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class VariableExpressionDeserializer extends YamlDeserializerBase { @@ -20148,14 +20039,14 @@ protected boolean setProperty(VariableExpression target, String propertyKey, types = org.apache.camel.model.language.WasmExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Wasm", - description = "Call a wasm (web assembly) function", + description = "Call a wasm (web assembly) function.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), @YamlProperty(name = "module", type = "string", required = true, description = "Set the module (the distributable, loadable, and executable unit of code in WebAssembly) resource that provides the expression function.", displayName = "Module"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class WasmExpressionDeserializer extends YamlDeserializerBase { @@ -20225,13 +20116,13 @@ protected boolean setProperty(WasmExpression target, String propertyKey, types = org.apache.camel.model.loadbalancer.WeightedLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Weighted Load Balancer", - description = "Load balancer that distributes messages across endpoints according to configured weight ratios", + description = "Uses a weighted load distribution ratio for each server with respect to others.", deprecated = false, properties = { - @YamlProperty(name = "distributionRatio", type = "string", required = true, description = "The distribution ratio is a delimited String consisting of integer weights separated by delimiters for example 2,3,5. The distributionRatio must match the number of endpoints and/or processors specified in the load balancer list.", displayName = "Distribution Ratio"), - @YamlProperty(name = "distributionRatioDelimiter", type = "string", defaultValue = ",", description = "Delimiter used to specify the distribution ratio. The default value is comma.", displayName = "Distribution Ratio Delimiter"), + @YamlProperty(name = "distributionRatio", type = "string", required = true, description = "The distribution ratio is a delimited String consisting on integer weights separated by delimiters for example 2,3,5. The distributionRatio must match the number of endpoints and/or processors specified in the load balancer list.", displayName = "Distribution Ratio"), + @YamlProperty(name = "distributionRatioDelimiter", type = "string", defaultValue = ",", description = "Delimiter used to specify the distribution ratio. The default value is , (comma)", displayName = "Distribution Ratio Delimiter"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "roundRobin", type = "boolean", defaultValue = "false", description = "Whether to enable round robin mode. By default the weighted distribution mode is used.", displayName = "Round Robin") + @YamlProperty(name = "roundRobin", type = "boolean", defaultValue = "false", description = "To enable round robin mode. By default the weighted distribution mode is used. The default value is false.", displayName = "Round Robin") } ) public static class WeightedLoadBalancerDefinitionDeserializer extends YamlDeserializerBase { @@ -20282,15 +20173,15 @@ protected boolean setProperty(WeightedLoadBalancerDefinition target, String prop types = org.apache.camel.model.WhenDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "When", - description = "Defines a conditional branch within a Choice EIP that executes when its predicate evaluates to true", + description = "Triggers a route when the expression evaluates to true", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression used as the predicate to evaluate whether this when should trigger and route the message or not.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -20360,25 +20251,25 @@ protected boolean setProperty(WhenDefinition target, String propertyKey, types = org.apache.camel.model.WireTapDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Wire Tap", - description = "Sends a copy of the message to a secondary endpoint without affecting the original route flow. The tapped message is sent asynchronously in a separate thread", + description = "Routes a copy of a message (or creates a new message) to a secondary destination while continue routing the original message.", deprecated = false, properties = { - @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise toD if they are SendDynamicAware.", displayName = "Allow Optimised Components"), + @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise toD if they are org.apache.camel.spi.SendDynamicAware .", displayName = "Allow Optimised Components"), @YamlProperty(name = "autoStartComponents", type = "boolean", defaultValue = "true", description = "Whether to auto startup components when toD is starting up.", displayName = "Auto Start Components"), - @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the ProducerCache which is used to cache and reuse producers when uris are reused. Use 0 for default cache size, or -1 to turn cache off.", displayName = "Cache Size"), - @YamlProperty(name = "copy", type = "boolean", defaultValue = "true", description = "Whether to use a copy of the original exchange.", displayName = "Copy"), - @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), - @YamlProperty(name = "dynamicUri", type = "boolean", defaultValue = "true", description = "Whether the uri is dynamic or static. If dynamic then the simple language is used to evaluate a dynamic uri to use as the wire-tap destination, for each incoming message.", displayName = "Dynamic Uri"), - @YamlProperty(name = "executorService", type = "string", description = "Uses a custom thread pool for sending tapped exchanges.", displayName = "Executor Service"), - @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise producers/endpoints are stored in memory in the caches. However if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both producers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non frequent used producers.", displayName = "Cache Size"), + @YamlProperty(name = "copy", type = "boolean", defaultValue = "true", description = "Uses a copy of the original exchange", displayName = "Copy"), + @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "dynamicUri", type = "boolean", defaultValue = "true", description = "Whether the uri is dynamic or static. If the uri is dynamic then the simple language is used to evaluate a dynamic uri to use as the wire-tap destination, for each incoming message. This works similar to how the toD EIP pattern works. If static then the uri is used as-is as the wire-tap destination.", displayName = "Dynamic Uri"), + @YamlProperty(name = "executorService", type = "string", description = "Uses a custom thread pool", displayName = "Executor Service"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), @YamlProperty(name = "ignoreInvalidEndpoint", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid endpoint URIs and skip sending the message.", displayName = "Ignore Invalid Endpoint"), - @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), - @YamlProperty(name = "onPrepare", type = "string", description = "Uses a processor when preparing the exchange to be sent. This can be used to deep-clone messages, or any custom logic needed before the exchange is sent.", displayName = "On Prepare"), + @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the org.apache.camel.Exchange to be sent. This can be used to deep-clone messages that should be sent, or any custom logic needed before the exchange is sent.", displayName = "On Prepare"), @YamlProperty(name = "parameters", type = "object"), - @YamlProperty(name = "uri", type = "string", required = true, description = "The uri of the endpoint to send to. The uri can be dynamic computed using the simple language.", displayName = "Uri"), - @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive"), - @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving.", displayName = "Variable Send") + @YamlProperty(name = "uri", type = "string", required = true, description = "The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression.", displayName = "Uri"), + @YamlProperty(name = "variableReceive", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Receive"), + @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Send") } ) public static class WireTapDefinitionDeserializer extends YamlDeserializerEndpointAwareBase { @@ -20490,23 +20381,23 @@ protected boolean setProperty(WireTapDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.XMLSecurityDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "XML Security", - description = "Encrypt and decrypt XML payloads using Apache Santuario", + description = "Encrypt and decrypt XML payloads using Apache Santuario.", deprecated = false, properties = { @YamlProperty(name = "addKeyValueForEncryptedKey", type = "boolean", defaultValue = "true", description = "Whether to add the public key used to encrypt the session key as a KeyValue in the EncryptedKey structure or not.", displayName = "Add Key Value For Encrypted Key"), - @YamlProperty(name = "digestAlgorithm", type = "enum:SHA1,SHA256,SHA512", defaultValue = "SHA1", description = "The digest algorithm to use with the RSA OAEP algorithm.", displayName = "Digest Algorithm"), + @YamlProperty(name = "digestAlgorithm", type = "enum:SHA1,SHA256,SHA512", defaultValue = "SHA1", description = "The digest algorithm to use with the RSA OAEP algorithm. The available choices are: XMLCipher.SHA1 XMLCipher.SHA256 XMLCipher.SHA512 The default value is XMLCipher.SHA1", displayName = "Digest Algorithm"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "keyCipherAlgorithm", type = "enum:RSA_v1dot5,RSA_OAEP,RSA_OAEP_11", defaultValue = "RSA_OAEP", description = "The cipher algorithm to be used for encryption/decryption of the asymmetric key.", displayName = "Key Cipher Algorithm"), + @YamlProperty(name = "keyCipherAlgorithm", type = "enum:RSA_v1dot5,RSA_OAEP,RSA_OAEP_11", defaultValue = "RSA_OAEP", description = "The cipher algorithm to be used for encryption/decryption of the asymmetric key. The available choices are: XMLCipher.RSA_v1dot5 XMLCipher.RSA_OAEP XMLCipher.RSA_OAEP_11 The default value is XMLCipher.RSA_OAEP", displayName = "Key Cipher Algorithm"), @YamlProperty(name = "keyOrTrustStoreParameters", type = "string", description = "Refers to a KeyStore instance to lookup in the registry, which is used for configuration options for creating and loading a KeyStore instance that represents the sender's trustStore or recipient's keyStore.", displayName = "Key Or Trust Store Parameters"), @YamlProperty(name = "keyPassword", type = "string", description = "The password to be used for retrieving the private key from the KeyStore. This key is used for asymmetric decryption.", displayName = "Key Password"), - @YamlProperty(name = "mgfAlgorithm", type = "enum:MGF1_SHA1,MGF1_SHA256,MGF1_SHA512", defaultValue = "MGF1_SHA1", description = "The MGF Algorithm to use with the RSA OAEP algorithm.", displayName = "Mgf Algorithm"), - @YamlProperty(name = "namespace", type = "string", description = "Refers to a Map of XML Namespaces of prefix to uri mappings.", displayName = "Namespace"), - @YamlProperty(name = "passPhrase", type = "string", description = "A String used as passPhrase to encrypt/decrypt content.", displayName = "Pass Phrase"), - @YamlProperty(name = "passPhraseByte", type = "string", format = "binary", description = "A byte used as passPhrase to encrypt/decrypt content.", displayName = "Pass Phrase Byte"), + @YamlProperty(name = "mgfAlgorithm", type = "enum:MGF1_SHA1,MGF1_SHA256,MGF1_SHA512", defaultValue = "MGF1_SHA1", description = "The MGF Algorithm to use with the RSA OAEP algorithm. The available choices are: EncryptionConstants.MGF1_SHA1 EncryptionConstants.MGF1_SHA256 EncryptionConstants.MGF1_SHA512 The default value is EncryptionConstants.MGF1_SHA1", displayName = "Mgf Algorithm"), + @YamlProperty(name = "namespace", type = "string", description = "Refers to a Map XML Namespaces of prefix - uri mappings", displayName = "Namespace"), + @YamlProperty(name = "passPhrase", type = "string", description = "A String used as passPhrase to encrypt/decrypt content. The passPhrase has to be provided. The passPhrase needs to be put together in conjunction with the appropriate encryption algorithm. For example using TRIPLEDES the passPhase can be a Only another 24 Byte key", displayName = "Pass Phrase"), + @YamlProperty(name = "passPhraseByte", type = "string", format = "binary", description = "A byte used as passPhrase to encrypt/decrypt content. The passPhrase has to be provided. The passPhrase needs to be put together in conjunction with the appropriate encryption algorithm. For example using TRIPLEDES the passPhase can be a Only another 24 Byte key", displayName = "Pass Phrase Byte"), @YamlProperty(name = "recipientKeyAlias", type = "string", description = "The key alias to be used when retrieving the recipient's public or private key from a KeyStore when performing asymmetric key encryption or decryption.", displayName = "Recipient Key Alias"), @YamlProperty(name = "secureTag", type = "string", description = "The XPath reference to the XML Element selected for encryption/decryption. If no tag is specified, the entire payload is encrypted/decrypted.", displayName = "Secure Tag"), - @YamlProperty(name = "secureTagContents", type = "boolean", defaultValue = "false", description = "A boolean value to specify whether the XML Element is to be encrypted or the contents of the XML Element. false = Element Level, true = Element Content Level.", displayName = "Secure Tag Contents"), - @YamlProperty(name = "xmlCipherAlgorithm", type = "enum:TRIPLEDES,AES_128,AES_128_GCM,AES_192,AES_192_GCM,AES_256,AES_256_GCM,SEED_128,CAMELLIA_128,CAMELLIA_192,CAMELLIA_256", defaultValue = "AES-256-GCM", description = "The cipher algorithm to be used for encryption/decryption of the XML message content.", displayName = "Xml Cipher Algorithm") + @YamlProperty(name = "secureTagContents", type = "boolean", defaultValue = "false", description = "A boolean value to specify whether the XML Element is to be encrypted or the contents of the XML Element. false = Element Level. true = Element Content Level.", displayName = "Secure Tag Contents"), + @YamlProperty(name = "xmlCipherAlgorithm", type = "enum:TRIPLEDES,AES_128,AES_128_GCM,AES_192,AES_192_GCM,AES_256,AES_256_GCM,SEED_128,CAMELLIA_128,CAMELLIA_192,CAMELLIA_256", defaultValue = "AES-256-GCM", description = "The cipher algorithm to be used for encryption/decryption of the XML message content. The available choices are: XMLCipher.TRIPLEDES XMLCipher.AES_128 XMLCipher.AES_128_GCM XMLCipher.AES_192 XMLCipher.AES_192_GCM XMLCipher.AES_256 XMLCipher.AES_256_GCM XMLCipher.SEED_128 XMLCipher.CAMELLIA_128 XMLCipher.CAMELLIA_192 XMLCipher.CAMELLIA_256 The default value is XMLCipher.AES_256_GCM", displayName = "Xml Cipher Algorithm") } ) public static class XMLSecurityDataFormatDeserializer extends YamlDeserializerBase { @@ -20608,17 +20499,17 @@ protected boolean setProperty(XMLSecurityDataFormat target, String propertyKey, types = org.apache.camel.model.language.XMLTokenizerExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "XML Tokenize", - description = "Tokenize XML payloads", + description = "Tokenize XML payloads.", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "group", type = "number", description = "To group N parts together.", displayName = "Group"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "mode", type = "enum:i,w,u,t", defaultValue = "i", description = "The extraction mode. The available extraction modes are: i - injecting the contextual namespace bindings into the extracted token (default), w - wrapping the extracted token in its ancestor context, u - unwrapping the extracted token to its child content, t - extracting the text content of the specified element.", displayName = "Mode"), - @YamlProperty(name = "namespace", type = "array:org.apache.camel.model.PropertyDefinition", description = "Injects the XML Namespaces of prefix to uri mappings.", displayName = "Namespace"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "group", type = "number", description = "To group N parts together", displayName = "Group"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "mode", type = "enum:i,w,u,t", defaultValue = "i", description = "The extraction mode. The available extraction modes are: i - injecting the contextual namespace bindings into the extracted token (default) w - wrapping the extracted token in its ancestor context u - unwrapping the extracted token to its child content t - extracting the text content of the specified element", displayName = "Mode"), + @YamlProperty(name = "namespace", type = "array:org.apache.camel.model.PropertyDefinition", description = "Injects the XML Namespaces of prefix - uri mappings", displayName = "Namespace"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class XMLTokenizerExpressionDeserializer extends YamlDeserializerBase { @@ -20704,23 +20595,23 @@ protected boolean setProperty(XMLTokenizerExpression target, String propertyKey, types = org.apache.camel.model.language.XPathExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "XPath", - description = "Evaluates an XPath expression against an XML payload", + description = "Evaluates an XPath expression against an XML payload.", deprecated = false, properties = { - @YamlProperty(name = "documentType", type = "string", description = "Name of class for document type. The default value is org.w3c.dom.Document.", displayName = "Document Type"), - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "factoryRef", type = "string", description = "References to a custom XPathFactory to lookup in the registry.", displayName = "Factory Ref"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "logNamespaces", type = "boolean", defaultValue = "false", description = "Whether to log namespaces which can assist during troubleshooting.", displayName = "Log Namespaces"), - @YamlProperty(name = "namespace", type = "array:org.apache.camel.model.PropertyDefinition", description = "Injects the XML Namespaces of prefix to uri mappings.", displayName = "Namespace"), - @YamlProperty(name = "objectModel", type = "string", description = "The XPath object model to use.", displayName = "Object Model"), - @YamlProperty(name = "preCompile", type = "boolean", defaultValue = "true", description = "Whether to enable pre-compiling the xpath expression during initialization phase. pre-compile is enabled by default.", displayName = "Pre Compile"), + @YamlProperty(name = "documentType", type = "string", description = "Name of class for document type The default value is org.w3c.dom.Document", displayName = "Document Type"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "factoryRef", type = "string", description = "References to a custom XPathFactory to lookup in the registry", displayName = "Factory Ref"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "logNamespaces", type = "boolean", defaultValue = "false", description = "Whether to log namespaces which can assist during troubleshooting", displayName = "Log Namespaces"), + @YamlProperty(name = "namespace", type = "array:org.apache.camel.model.PropertyDefinition", description = "Injects the XML Namespaces of prefix - uri mappings", displayName = "Namespace"), + @YamlProperty(name = "objectModel", type = "string", description = "The XPath object model to use", displayName = "Object Model"), + @YamlProperty(name = "preCompile", type = "boolean", defaultValue = "true", description = "Whether to enable pre-compiling the xpath expression during initialization phase. pre-compile is enabled by default. This can be used to turn off, for example in cases the compilation phase is desired at the starting phase, such as if the application is ahead of time compiled (for example with camel-quarkus) which would then load the xpath factory of the built operating system, and not a JVM runtime.", displayName = "Pre Compile"), @YamlProperty(name = "resultQName", type = "enum:NUMBER,STRING,BOOLEAN,NODESET,NODE", defaultValue = "NODESET", description = "Sets the output type supported by XPath.", displayName = "Result QName"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), @YamlProperty(name = "saxon", type = "boolean", defaultValue = "false", description = "Whether to use Saxon.", displayName = "Saxon"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), - @YamlProperty(name = "threadSafety", type = "boolean", defaultValue = "false", description = "Whether to enable thread-safety for the returned result of the xpath expression. This applies to when using NODESET as the result type, and the returned set has multiple elements.", displayName = "Thread Safety"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "threadSafety", type = "boolean", defaultValue = "false", description = "Whether to enable thread-safety for the returned result of the xpath expression. This applies to when using NODESET as the result type, and the returned set has multiple elements. In this situation there can be thread-safety issues if you process the NODESET concurrently such as from a Camel Splitter EIP in parallel processing mode. This option prevents concurrency issues by doing defensive copies of the nodes. It is recommended to turn this option on if you are using camel-saxon or Saxon in your application. Saxon has thread-safety issues which can be prevented by turning this option on.", displayName = "Thread Safety"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class XPathExpressionDeserializer extends YamlDeserializerBase { @@ -20836,16 +20727,16 @@ protected boolean setProperty(XPathExpression target, String propertyKey, types = org.apache.camel.model.language.XQueryExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "XQuery", - description = "Evaluates an XQuery expressions against an XML payload", + description = "Evaluates an XQuery expressions against an XML payload.", deprecated = false, properties = { - @YamlProperty(name = "configurationRef", type = "string", description = "Reference to a saxon configuration instance in the registry to use for xquery (requires camel-saxon).", displayName = "Configuration Ref"), - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), - @YamlProperty(name = "namespace", type = "array:org.apache.camel.model.PropertyDefinition", description = "Injects the XML Namespaces of prefix to uri mappings.", displayName = "Namespace"), - @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "configurationRef", type = "string", description = "Reference to a saxon configuration instance in the registry to use for xquery (requires camel-saxon). This may be needed to add custom functions to a saxon configuration, so these custom functions can be used in xquery expressions.", displayName = "Configuration Ref"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "namespace", type = "array:org.apache.camel.model.PropertyDefinition", description = "Injects the XML Namespaces of prefix - uri mappings", displayName = "Namespace"), + @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") } ) public static class XQueryExpressionDeserializer extends YamlDeserializerBase { @@ -20925,22 +20816,22 @@ protected boolean setProperty(XQueryExpression target, String propertyKey, types = org.apache.camel.model.dataformat.YAMLDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "YAML", - description = "Marshal and unmarshal Java objects to and from YAML", + description = "Marshal and unmarshal Java objects to and from YAML.", deprecated = false, properties = { - @YamlProperty(name = "allowAnyType", type = "boolean", defaultValue = "false", description = "Allow any class to be un-marshaled.", displayName = "Allow Any Type"), + @YamlProperty(name = "allowAnyType", type = "boolean", defaultValue = "false", description = "Allow any class to be un-marshaled", displayName = "Allow Any Type"), @YamlProperty(name = "allowRecursiveKeys", type = "boolean", defaultValue = "false", description = "Set whether recursive keys are allowed.", displayName = "Allow Recursive Keys"), @YamlProperty(name = "constructor", type = "string", description = "BaseConstructor to construct incoming documents.", displayName = "Constructor"), @YamlProperty(name = "dumperOptions", type = "string", description = "DumperOptions to configure outgoing objects.", displayName = "Dumper Options"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "library", type = "enum:SnakeYAML", defaultValue = "SnakeYAML", description = "Which yaml library to use. By default it is SnakeYAML.", displayName = "Library"), + @YamlProperty(name = "library", type = "enum:SnakeYAML", defaultValue = "SnakeYAML", description = "Which yaml library to use. By default it is SnakeYAML", displayName = "Library"), @YamlProperty(name = "maxAliasesForCollections", type = "number", defaultValue = "50", description = "Set the maximum amount of aliases allowed for collections.", displayName = "Max Aliases For Collections"), @YamlProperty(name = "prettyFlow", type = "boolean", defaultValue = "false", description = "Force the emitter to produce a pretty YAML document when using the flow style.", displayName = "Pretty Flow"), @YamlProperty(name = "representer", type = "string", description = "Representer to emit outgoing objects.", displayName = "Representer"), - @YamlProperty(name = "resolver", type = "string", description = "Resolver to detect implicit type.", displayName = "Resolver"), + @YamlProperty(name = "resolver", type = "string", description = "Resolver to detect implicit type", displayName = "Resolver"), @YamlProperty(name = "typeFilter", type = "string", description = "Set the types SnakeYAML is allowed to un-marshall. Multiple types can be separated by comma.", displayName = "Type Filter"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling.", displayName = "Unmarshal Type"), - @YamlProperty(name = "useApplicationContextClassLoader", type = "boolean", defaultValue = "true", description = "Use ApplicationContextClassLoader as custom ClassLoader.", displayName = "Use Application Context Class Loader") + @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling", displayName = "Unmarshal Type"), + @YamlProperty(name = "useApplicationContextClassLoader", type = "boolean", defaultValue = "true", description = "Use ApplicationContextClassLoader as custom ClassLoader", displayName = "Use Application Context Class Loader") } ) public static class YAMLDataFormatDeserializer extends YamlDeserializerBase { @@ -21035,10 +20926,10 @@ protected boolean setProperty(YAMLDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.ZipDeflaterDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Zip Deflater", - description = "Compress and decompress streams using java.util.zip.Deflater and java.util.zip.Inflater", + description = "Compress and decompress streams using java.util.zip.Deflater and java.util.zip.Inflater.", deprecated = false, properties = { - @YamlProperty(name = "compressionLevel", type = "enum:-1,0,1,2,3,4,5,6,7,8,9", defaultValue = "-1", description = "Compression level to use (0-9). -1 is default compression, 0 is no compression, and 9 is the best compression.", displayName = "Compression Level"), + @YamlProperty(name = "compressionLevel", type = "enum:-1,0,1,2,3,4,5,6,7,8,9", defaultValue = "-1", description = "To specify a specific compression between 0-9. -1 is default compression, 0 is no compression, and 9 is the best compression.", displayName = "Compression Level"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") } ) @@ -21080,12 +20971,12 @@ protected boolean setProperty(ZipDeflaterDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.ZipFileDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Zip File", - description = "Compression and decompress streams using java.util.zip.Zip*Stream", + description = "Compression and decompress streams using java.util.zip.ZipStream.", deprecated = false, properties = { - @YamlProperty(name = "allowEmptyDirectory", type = "boolean", defaultValue = "false", description = "If the zip file has more than one entry, setting this option to true, allows to get the iterator even if the directory is empty.", displayName = "Allow Empty Directory"), + @YamlProperty(name = "allowEmptyDirectory", type = "boolean", defaultValue = "false", description = "If the zip file has more than one entry, setting this option to true, allows to get the iterator even if the directory is empty", displayName = "Allow Empty Directory"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxDecompressedSize", type = "number", defaultValue = "1073741824", description = "Set the maximum decompressed size of a zip file (in bytes). The default value if not specified corresponds to 1 gigabyte. Set to -1 to disable setting a maximum decompressed size.", displayName = "Max Decompressed Size"), + @YamlProperty(name = "maxDecompressedSize", type = "number", defaultValue = "1073741824", description = "Set the maximum decompressed size of a zip file (in bytes). The default value if not specified corresponds to 1 gigabyte. An IOException will be thrown if the decompressed size exceeds this amount. Set to -1 to disable setting a maximum decompressed size.", displayName = "Max Decompressed Size"), @YamlProperty(name = "preservePathElements", type = "boolean", defaultValue = "false", description = "If the file name contains path elements, setting this option to true, allows the path to be maintained in the zip file.", displayName = "Preserve Path Elements"), @YamlProperty(name = "usingIterator", type = "boolean", defaultValue = "false", description = "If the zip file has more than one entry, the setting this option to true, allows working with the splitter EIP, to split the data using an iterator in a streaming mode.", displayName = "Using Iterator") } From 2299400f17bc059620a4508c99405f7844b80d91 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 27 Mar 2026 20:31:34 +0100 Subject: [PATCH 02/14] CAMEL-23264: Add watermark tracking to Splitter EIP - Index-based watermarking: skip already-processed items on subsequent runs - Value-based watermarking: expose stored watermark as exchange property, evaluate Simple expression after completion to determine new value - Watermark is only updated on successful completion (not on abort) - Add SPLIT_WATERMARK exchange property constant Co-Authored-By: Claude Opus 4.6 --- .../camel/ExchangeConstantProvider.java | 3 +- .../main/java/org/apache/camel/Exchange.java | 4 + .../org/apache/camel/model/split.json | 9 +- .../apache/camel/model/SplitDefinition.java | 111 +++++++++++++ .../org/apache/camel/processor/Splitter.java | 103 +++++++++++- .../apache/camel/reifier/SplitReifier.java | 17 ++ .../processor/SplitterWatermarkTest.java | 152 ++++++++++++++++++ .../deserializers/ModelDeserializers.java | 20 ++- 8 files changed, 412 insertions(+), 7 deletions(-) create mode 100644 core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java diff --git a/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java b/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java index 2e181224ce8c9..36b6d5353c1ba 100644 --- a/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java +++ b/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java @@ -13,7 +13,7 @@ public class ExchangeConstantProvider { private static final Map MAP; static { - Map map = new HashMap<>(150); + Map map = new HashMap<>(151); map.put("AGGREGATED_COLLECTION_GUARD", "CamelAggregatedCollectionGuard"); map.put("AGGREGATED_COMPLETED_BY", "CamelAggregatedCompletedBy"); map.put("AGGREGATED_CORRELATION_KEY", "CamelAggregatedCorrelationKey"); @@ -144,6 +144,7 @@ public class ExchangeConstantProvider { map.put("SPLIT_INDEX", "CamelSplitIndex"); map.put("SPLIT_RESULT", "CamelSplitResult"); map.put("SPLIT_SIZE", "CamelSplitSize"); + map.put("SPLIT_WATERMARK", "CamelSplitWatermark"); map.put("STEP_ID", "CamelStepId"); map.put("STREAM_CACHE_UNIT_OF_WORK", "CamelStreamCacheUnitOfWork"); map.put("TIMER_COUNTER", "CamelTimerCounter"); diff --git a/core/camel-api/src/main/java/org/apache/camel/Exchange.java b/core/camel-api/src/main/java/org/apache/camel/Exchange.java index 84d9cd958231f..4a44fd1513dc0 100644 --- a/core/camel-api/src/main/java/org/apache/camel/Exchange.java +++ b/core/camel-api/src/main/java/org/apache/camel/Exchange.java @@ -280,6 +280,10 @@ public interface Exchange extends VariableAware { description = "The result of a Splitter EIP operation with error thresholds, providing structured failure details.", javaType = "org.apache.camel.SplitResult") String SPLIT_RESULT = "CamelSplitResult"; + @Metadata(label = "split", + description = "The current watermark value from the watermark store, set before split processing begins.", + javaType = "String") + String SPLIT_WATERMARK = "CamelSplitWatermark"; @Metadata(label = "step", description = "The id of the Step EIP", javaType = "String") String STEP_ID = "CamelStepId"; diff --git a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json index c8ffe70dfc724..0f7987150865b 100644 --- a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json +++ b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json @@ -33,11 +33,16 @@ "group": { "index": 18, "kind": "attribute", "displayName": "Group", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Groups N split messages into a single message with a java.util.List body. This allows processing items in chunks instead of one at a time." }, "errorThreshold": { "index": 19, "kind": "attribute", "displayName": "Error Threshold", "group": "advanced", "label": "advanced", "required": false, "type": "number", "javaType": "java.lang.Double", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation." }, "maxFailedRecords": { "index": 20, "kind": "attribute", "displayName": "Max Failed Records", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the maximum number of failed records before aborting the split operation." }, - "outputs": { "index": 21, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List>", "oneOf": [ "aggregate", "bean", "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", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false } + "watermarkStore": { "index": 21, "kind": "attribute", "displayName": "Watermark Store", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a watermark store (a Map ) in the registry." }, + "watermarkKey": { "index": 22, "kind": "attribute", "displayName": "Watermark Key", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the key to use in the watermark store." }, + "watermarkExpression": { "index": 23, "kind": "attribute", "displayName": "Watermark Expression", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value." }, + "outputs": { "index": 24, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List>", "oneOf": [ "aggregate", "bean", "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", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false } }, "exchangeProperties": { "CamelSplitIndex": { "index": 0, "kind": "exchangeProperty", "displayName": "Split Index", "label": "producer", "required": false, "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "important": true, "description": "A split counter that increases for each Exchange being split. The counter starts from 0." }, "CamelSplitComplete": { "index": 1, "kind": "exchangeProperty", "displayName": "Split Complete", "label": "producer", "required": false, "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "description": "Whether this Exchange is the last." }, - "CamelSplitSize": { "index": 2, "kind": "exchangeProperty", "displayName": "Split Size", "label": "producer", "required": false, "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "important": true, "description": "The total number of Exchanges that was split. This property is not applied for stream based splitting, except for the very last message because then Camel knows the total size." } + "CamelSplitSize": { "index": 2, "kind": "exchangeProperty", "displayName": "Split Size", "label": "producer", "required": false, "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "important": true, "description": "The total number of Exchanges that was split. This property is not applied for stream based splitting, except for the very last message because then Camel knows the total size." }, + "CamelSplitResult": { "index": 3, "kind": "exchangeProperty", "displayName": "Split Result", "label": "producer", "required": false, "javaType": "org.apache.camel.SplitResult", "deprecated": false, "autowired": false, "secret": false, "description": "The result of a Splitter EIP operation with error thresholds, providing structured failure details." }, + "CamelSplitWatermark": { "index": 4, "kind": "exchangeProperty", "displayName": "Split Watermark", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The current watermark value from the watermark store, set before split processing begins." } } } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java index d7750db5d5b14..881a56037cf4c 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java @@ -16,6 +16,7 @@ */ package org.apache.camel.model; +import java.util.Map; import java.util.concurrent.ExecutorService; import jakarta.xml.bind.annotation.XmlAccessType; @@ -47,6 +48,9 @@ public class SplitDefinition extends OutputExpressionNode implements ExecutorSer private AggregationStrategy aggregationStrategyBean; @XmlTransient private Processor onPrepareProcessor; + @XmlTransient + @SuppressWarnings("rawtypes") + private Map watermarkStoreBean; @XmlAttribute @Metadata(defaultValue = ",", @@ -124,6 +128,15 @@ public class SplitDefinition extends OutputExpressionNode implements ExecutorSer @XmlAttribute @Metadata(label = "advanced", javaType = "java.lang.Integer") private String maxFailedRecords; + @XmlAttribute + @Metadata(label = "advanced", javaType = "java.util.Map") + private String watermarkStore; + @XmlAttribute + @Metadata(label = "advanced") + private String watermarkKey; + @XmlAttribute + @Metadata(label = "advanced") + private String watermarkExpression; public SplitDefinition() { } @@ -149,6 +162,10 @@ public SplitDefinition(SplitDefinition source) { this.group = source.group; this.errorThreshold = source.errorThreshold; this.maxFailedRecords = source.maxFailedRecords; + this.watermarkStoreBean = source.watermarkStoreBean; + this.watermarkStore = source.watermarkStore; + this.watermarkKey = source.watermarkKey; + this.watermarkExpression = source.watermarkExpression; } public SplitDefinition(Expression expression) { @@ -691,6 +708,62 @@ public SplitDefinition maxFailedRecords(String maxFailedRecords) { return this; } + /** + * Sets a watermark store and key for resume-from-last-position support. When configured, the Splitter tracks + * progress and can skip already-processed items on subsequent runs. + *

+ * With index-based watermarking (no {@code watermarkExpression}), items up to the stored index are automatically + * skipped. With value-based watermarking (with {@code watermarkExpression}), the stored value is exposed as an + * exchange property ({@link org.apache.camel.Exchange#SPLIT_WATERMARK}) for upstream filtering. + *

+ * The watermark is only updated on successful completion — aborted runs preserve the previous watermark to allow + * retry. + * + * @param store the Map to store watermark state in + * @param key the key to use in the store + * @return the builder + */ + @SuppressWarnings("rawtypes") + public SplitDefinition watermarkStore(Map store, String key) { + this.watermarkStoreBean = store; + setWatermarkKey(key); + return this; + } + + /** + * Sets a reference to a watermark store (a {@code Map}) in the registry. + * + * @param watermarkStore reference to the store bean + * @return the builder + */ + public SplitDefinition watermarkStore(String watermarkStore) { + setWatermarkStore(watermarkStore); + return this; + } + + /** + * Sets the key to use in the watermark store. + * + * @param watermarkKey the key + * @return the builder + */ + public SplitDefinition watermarkKey(String watermarkKey) { + setWatermarkKey(watermarkKey); + return this; + } + + /** + * Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value. + * When set, enables value-based watermarking instead of index-based. + * + * @param watermarkExpression the Simple expression + * @return the builder + */ + public SplitDefinition watermarkExpression(String watermarkExpression) { + setWatermarkExpression(watermarkExpression); + return this; + } + // Properties // ------------------------------------------------------------------------- @@ -862,4 +935,42 @@ public String getMaxFailedRecords() { public void setMaxFailedRecords(String maxFailedRecords) { this.maxFailedRecords = maxFailedRecords; } + + @SuppressWarnings("rawtypes") + public Map getWatermarkStoreBean() { + return watermarkStoreBean; + } + + public String getWatermarkStore() { + return watermarkStore; + } + + /** + * Sets a reference to a watermark store (a {@code Map}) in the registry. + */ + public void setWatermarkStore(String watermarkStore) { + this.watermarkStore = watermarkStore; + } + + public String getWatermarkKey() { + return watermarkKey; + } + + /** + * Sets the key to use in the watermark store. + */ + public void setWatermarkKey(String watermarkKey) { + this.watermarkKey = watermarkKey; + } + + public String getWatermarkExpression() { + return watermarkExpression; + } + + /** + * Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value. + */ + public void setWatermarkExpression(String watermarkExpression) { + this.watermarkExpression = watermarkExpression; + } } diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java index e402bc1478867..5287e5ba0c1f1 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java @@ -59,11 +59,16 @@ public class Splitter extends MulticastProcessor { private static final String IGNORE_DELIMITER_MARKER = "false"; private static final String SINGLE_DELIMITER_MARKER = "single"; private static final String SPLIT_FAILURE_TRACKER = "CamelSplitFailureTracker"; + private static final String SPLIT_WATERMARK_OFFSET = "CamelSplitWatermarkOffset"; + private static final String SPLIT_WATERMARK_COUNT = "CamelSplitWatermarkCount"; private final Expression expression; private final String delimiter; private int group; private double errorThreshold; private int maxFailedRecords; + private Map watermarkStore; + private String watermarkKey; + private Expression watermarkExpression; public Splitter(CamelContext camelContext, Route route, Expression expression, Processor destination, AggregationStrategy aggregationStrategy, boolean parallelProcessing, @@ -104,6 +109,9 @@ protected void doBuild() throws Exception { protected void doInit() throws Exception { super.doInit(); expression.init(getCamelContext()); + if (watermarkExpression != null) { + watermarkExpression.init(getCamelContext()); + } } @Override @@ -137,10 +145,25 @@ public boolean process(Exchange exchange, final AsyncCallback callback) { exchange.setProperty(SPLIT_FAILURE_TRACKER, new SplitFailureTracker()); } - // wrap callback to build SplitResult after all items are processed - AsyncCallback wrappedCallback = hasErrorThreshold + // set current watermark value as exchange property before processing + boolean hasWatermark = watermarkStore != null && watermarkKey != null; + if (hasWatermark) { + String currentWatermark = watermarkStore.get(watermarkKey); + if (currentWatermark != null) { + exchange.setProperty(Exchange.SPLIT_WATERMARK, currentWatermark); + } + } + + // wrap callback to build SplitResult and/or update watermark after all items are processed + boolean needsWrapping = hasErrorThreshold || hasWatermark; + AsyncCallback wrappedCallback = needsWrapping ? doneSync -> { - buildSplitResult(exchange); + if (hasErrorThreshold) { + buildSplitResult(exchange); + } + if (hasWatermark) { + updateWatermark(exchange); + } callback.done(doneSync); } : callback; @@ -191,6 +214,7 @@ private final class SplitterIterable implements Iterable, private Exchange copy; private final Route route; private final Exchange original; + private final int watermarkOffset; private SplitterIterable(Exchange exchange, Object value) { this.original = exchange; @@ -205,6 +229,24 @@ private SplitterIterable(Exchange exchange, Object value) { } else { rawIterator = ObjectHelper.createIterator(value, delimiter); } + + // index-based watermarking: skip items up to the stored watermark index + int skipCount = 0; + if (watermarkStore != null && watermarkKey != null && watermarkExpression == null) { + String storedIndex = watermarkStore.get(watermarkKey); + if (storedIndex != null) { + int skipTo = Integer.parseInt(storedIndex); + while (rawIterator.hasNext() && skipCount <= skipTo) { + rawIterator.next(); + skipCount++; + } + } + } + this.watermarkOffset = skipCount; + if (skipCount > 0) { + exchange.setProperty(SPLIT_WATERMARK_OFFSET, skipCount); + } + // wrap with GroupIterator if group > 0 to chunk items into List batches this.iterator = group > 0 ? new GroupIterator(rawIterator, group) : rawIterator; @@ -230,6 +272,10 @@ public boolean hasNext() { if (!answer) { // we are now closed closed = true; + // store item count for watermark tracking + if (watermarkStore != null && watermarkKey != null && watermarkExpression == null) { + original.setProperty(SPLIT_WATERMARK_COUNT, index); + } // nothing more so we need to close the expression value in case it needs to be try { close(); @@ -367,6 +413,30 @@ public void setMaxFailedRecords(int maxFailedRecords) { this.maxFailedRecords = maxFailedRecords; } + public Map getWatermarkStore() { + return watermarkStore; + } + + public void setWatermarkStore(Map watermarkStore) { + this.watermarkStore = watermarkStore; + } + + public String getWatermarkKey() { + return watermarkKey; + } + + public void setWatermarkKey(String watermarkKey) { + this.watermarkKey = watermarkKey; + } + + public Expression getWatermarkExpression() { + return watermarkExpression; + } + + public void setWatermarkExpression(Expression watermarkExpression) { + this.watermarkExpression = watermarkExpression; + } + @Override protected boolean shouldContinueOnFailure(Exchange subExchange, Exchange original, int index) { SplitFailureTracker tracker = original.getProperty(SPLIT_FAILURE_TRACKER, SplitFailureTracker.class); @@ -424,6 +494,33 @@ List getFailures() { } } + private void updateWatermark(Exchange exchange) { + // don't update watermark if processing was aborted (allows retry) + if (exchange.getException() != null) { + return; + } + + if (watermarkExpression != null) { + // value-based: evaluate expression on the exchange after split completion + String newValue = watermarkExpression.evaluate(exchange, String.class); + if (newValue != null) { + watermarkStore.put(watermarkKey, newValue); + } + } else { + // index-based: compute absolute last index and store it + int offset = exchange.getProperty(SPLIT_WATERMARK_OFFSET, 0, Integer.class); + Integer count = exchange.getProperty(SPLIT_WATERMARK_COUNT, Integer.class); + if (count != null && count > 0) { + int lastAbsoluteIndex = offset + count - 1; + watermarkStore.put(watermarkKey, String.valueOf(lastAbsoluteIndex)); + } + } + + // clean up internal properties + exchange.removeProperty(SPLIT_WATERMARK_OFFSET); + exchange.removeProperty(SPLIT_WATERMARK_COUNT); + } + private void buildSplitResult(Exchange exchange) { SplitFailureTracker tracker = exchange.getProperty(SPLIT_FAILURE_TRACKER, SplitFailureTracker.class); if (tracker == null) { diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java index 49afb1a83427b..35c9273bef63f 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java @@ -16,6 +16,7 @@ */ package org.apache.camel.reifier; +import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.function.BiFunction; @@ -99,6 +100,22 @@ public Processor createProcessor() throws Exception { answer.setMaxFailedRecords(maxFailedRecords); } + @SuppressWarnings("unchecked") + Map watermarkStore = definition.getWatermarkStoreBean(); + if (watermarkStore == null && definition.getWatermarkStore() != null) { + watermarkStore = mandatoryLookup(definition.getWatermarkStore(), Map.class); + } + String watermarkKey = parseString(definition.getWatermarkKey()); + if (watermarkStore != null && watermarkKey != null) { + answer.setWatermarkStore(watermarkStore); + answer.setWatermarkKey(watermarkKey); + String watermarkExprStr = parseString(definition.getWatermarkExpression()); + if (watermarkExprStr != null) { + Expression watermarkExpr = camelContext.resolveLanguage("simple").createExpression(watermarkExprStr); + answer.setWatermarkExpression(watermarkExpr); + } + } + return answer; } diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java new file mode 100644 index 0000000000000..53e678f401933 --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java @@ -0,0 +1,152 @@ +/* + * 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.processor; + +import java.util.Arrays; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.Exchange; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +class SplitterWatermarkTest extends ContextTestSupport { + + private final Map store = new ConcurrentHashMap<>(); + + @Test + void testIndexBasedWatermarkFirstRun() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMessageCount(5); + + template.sendBody("direct:index", Arrays.asList("a", "b", "c", "d", "e")); + + mock.assertIsSatisfied(); + + // watermark should be stored as last index (4) + assertEquals("4", store.get("testJob")); + } + + @Test + void testIndexBasedWatermarkSecondRun() throws Exception { + // simulate a previous run that processed items 0-2 + store.put("testJob", "2"); + + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMessageCount(2); // only items 3 and 4 + + template.sendBody("direct:index", Arrays.asList("a", "b", "c", "d", "e")); + + mock.assertIsSatisfied(); + + // bodies should be d, e (items at index 3 and 4) + assertEquals("d", mock.getReceivedExchanges().get(0).getIn().getBody(String.class)); + assertEquals("e", mock.getReceivedExchanges().get(1).getIn().getBody(String.class)); + + // watermark updated to 4 + assertEquals("4", store.get("testJob")); + } + + @Test + void testIndexBasedWatermarkNoUpdateOnAbort() throws Exception { + // watermark at 0, maxFailedRecords=1 + store.put("testJob2", "0"); + + MockEndpoint mock = getMockEndpoint("mock:split2"); + mock.expectedMinimumMessageCount(0); + + // items after skipping index 0: FAIL, c, d — FAIL triggers abort + template.send("direct:index-abort", + e -> e.getIn().setBody(Arrays.asList("a", "FAIL", "c", "d"))); + + mock.assertIsSatisfied(); + + // watermark should NOT be updated (still 0) + assertEquals("0", store.get("testJob2")); + } + + @Test + void testValueBasedWatermark() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:split3"); + mock.expectedMessageCount(3); + + Exchange result = template.send("direct:value", + e -> e.getIn().setBody(Arrays.asList("2024-01-01", "2024-01-02", "2024-01-03"))); + + mock.assertIsSatisfied(); + + // no previous watermark, so SPLIT_WATERMARK should not be set + assertNull(result.getProperty(Exchange.SPLIT_WATERMARK)); + + // watermark expression evaluates ${body} on the aggregated exchange (last item) + assertEquals("2024-01-03", store.get("dateJob")); + } + + @Test + void testValueBasedWatermarkWithPreviousValue() throws Exception { + store.put("dateJob", "2024-01-01"); + + MockEndpoint mock = getMockEndpoint("mock:split3"); + mock.expectedMessageCount(3); + + Exchange result = template.send("direct:value", + e -> e.getIn().setBody(Arrays.asList("2024-01-02", "2024-01-03", "2024-01-04"))); + + mock.assertIsSatisfied(); + + // previous watermark should be exposed as exchange property + assertEquals("2024-01-01", result.getProperty(Exchange.SPLIT_WATERMARK)); + + // watermark updated to the last processed date + assertEquals("2024-01-04", store.get("dateJob")); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("direct:index") + .split(body()).watermarkStore(store, "testJob") + .to("mock:split"); + + from("direct:index-abort") + .split(body()).watermarkStore(store, "testJob2").maxFailedRecords(1) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure"); + } + }) + .to("mock:split2"); + + from("direct:value") + .split(body()) + // use aggregation strategy that keeps the last exchange, so ${body} reflects the last item + .aggregationStrategy((oldExchange, newExchange) -> newExchange) + .watermarkStore(store, "dateJob") + .watermarkExpression("${body}") + .to("mock:split3"); + } + }; + } +} diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java index 4f35d28c62dda..56a976cfde849 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java @@ -16848,7 +16848,10 @@ protected boolean setProperty(SpELExpression target, String propertyKey, @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the splitter will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The default behavior is to not stop but continue processing till the end", displayName = "Stop On Exception"), @YamlProperty(name = "streaming", type = "boolean", defaultValue = "false", description = "When in streaming mode, then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter do not split all the messages first, but then we do not know the total size, and therefore the org.apache.camel.Exchange#SPLIT_SIZE is empty. In non-streaming mode (default) the splitter will split each message first, to know the total size, and then process each message one by one. This requires to keep all the split messages in memory and therefore requires more memory. The total size is provided in the org.apache.camel.Exchange#SPLIT_SIZE header. The streaming mode also affects the aggregation behavior. If enabled then Camel will process replies out-of-order, e.g. in the order they come back. If disabled, Camel will process replies in the same order as the messages was split.", displayName = "Streaming"), @YamlProperty(name = "synchronous", type = "boolean", defaultValue = "false", description = "Sets whether synchronous processing should be strictly used. When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled.", displayName = "Synchronous"), - @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Sets a total timeout specified in millis, when using parallel processing. If the Splitter hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Splitter breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care.", displayName = "Timeout") + @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Sets a total timeout specified in millis, when using parallel processing. If the Splitter hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Splitter breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care.", displayName = "Timeout"), + @YamlProperty(name = "watermarkExpression", type = "string"), + @YamlProperty(name = "watermarkKey", type = "string"), + @YamlProperty(name = "watermarkStore", type = "string") } ) public static class SplitDefinitionDeserializer extends YamlDeserializerBase { @@ -16956,6 +16959,21 @@ protected boolean setProperty(SplitDefinition target, String propertyKey, target.setTimeout(val); break; } + case "watermarkExpression": { + String val = asText(node); + target.setWatermarkExpression(val); + break; + } + case "watermarkKey": { + String val = asText(node); + target.setWatermarkKey(val); + break; + } + case "watermarkStore": { + String val = asText(node); + target.setWatermarkStore(val); + break; + } case "id": { String val = asText(node); target.setId(val); From dc16f2cc49e8b93f77f64b54ede07537f24e4d16 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 27 Mar 2026 20:54:53 +0100 Subject: [PATCH 03/14] CAMEL-23264: Improve value-based watermark and add transacted tests - Evaluate watermark expression per-item via ProcessorExchangePair.done() hook instead of requiring a custom aggregation strategy - Add WatermarkProcessorExchangePair wrapper for thread-safe per-item watermark tracking using AtomicReference - Add SplitterTransactedTest with 6 tests covering group, error threshold, split result, and watermark features using the MulticastTransactedTask code path Co-Authored-By: Claude Opus 4.6 --- .../org/apache/camel/processor/Splitter.java | 86 ++++++- .../processor/SplitterTransactedTest.java | 211 ++++++++++++++++++ .../processor/SplitterWatermarkTest.java | 4 +- 3 files changed, 294 insertions(+), 7 deletions(-) create mode 100644 core/camel-core/src/test/java/org/apache/camel/processor/SplitterTransactedTest.java diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java index 5287e5ba0c1f1..8bdd3e929e156 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java @@ -28,6 +28,7 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; import org.apache.camel.AggregationStrategy; import org.apache.camel.AsyncCallback; @@ -61,6 +62,7 @@ public class Splitter extends MulticastProcessor { private static final String SPLIT_FAILURE_TRACKER = "CamelSplitFailureTracker"; private static final String SPLIT_WATERMARK_OFFSET = "CamelSplitWatermarkOffset"; private static final String SPLIT_WATERMARK_COUNT = "CamelSplitWatermarkCount"; + private static final String SPLIT_WATERMARK_LATEST = "CamelSplitWatermarkLatest"; private final Expression expression; private final String delimiter; private int group; @@ -152,6 +154,10 @@ public boolean process(Exchange exchange, final AsyncCallback callback) { if (currentWatermark != null) { exchange.setProperty(Exchange.SPLIT_WATERMARK, currentWatermark); } + // pre-initialize AtomicReference for value-based watermark tracking (thread-safe) + if (watermarkExpression != null) { + exchange.setProperty(SPLIT_WATERMARK_LATEST, new AtomicReference()); + } } // wrap callback to build SplitResult and/or update watermark after all items are processed @@ -171,6 +177,17 @@ public boolean process(Exchange exchange, final AsyncCallback callback) { return super.process(exchange, wrappedCallback); } + @Override + protected ProcessorExchangePair createProcessorExchangePair( + int index, Processor processor, Exchange exchange, Route route) { + ProcessorExchangePair pair = super.createProcessorExchangePair(index, processor, exchange, route); + // wrap to evaluate watermark expression on each completed sub-exchange + if (watermarkExpression != null) { + return new WatermarkProcessorExchangePair(pair, exchange); + } + return pair; + } + @Override protected Iterable createProcessorExchangePairs(Exchange exchange) throws Exception { @@ -494,6 +511,63 @@ List getFailures() { } } + @SuppressWarnings("unchecked") + /** + * Wraps a {@link ProcessorExchangePair} to evaluate the watermark expression on each completed sub-exchange. + */ + private final class WatermarkProcessorExchangePair implements ProcessorExchangePair { + private final ProcessorExchangePair delegate; + private final Exchange original; + + WatermarkProcessorExchangePair(ProcessorExchangePair delegate, Exchange original) { + this.delegate = delegate; + this.original = original; + } + + @Override + public int getIndex() { + return delegate.getIndex(); + } + + @Override + public Exchange getExchange() { + return delegate.getExchange(); + } + + @Override + public org.apache.camel.Producer getProducer() { + return delegate.getProducer(); + } + + @Override + public Processor getProcessor() { + return delegate.getProcessor(); + } + + @Override + public void begin() { + delegate.begin(); + } + + @Override + @SuppressWarnings("unchecked") + public void done() { + delegate.done(); + // evaluate watermark expression on completed sub-exchange (only if no exception) + Exchange subExchange = delegate.getExchange(); + if (subExchange.getException() == null) { + String value = watermarkExpression.evaluate(subExchange, String.class); + if (value != null) { + // AtomicReference is pre-initialized in process() — safe for parallel use + AtomicReference latestRef + = (AtomicReference) original.getProperty(SPLIT_WATERMARK_LATEST); + latestRef.set(value); + } + } + } + } + + @SuppressWarnings("unchecked") private void updateWatermark(Exchange exchange) { // don't update watermark if processing was aborted (allows retry) if (exchange.getException() != null) { @@ -501,10 +575,13 @@ private void updateWatermark(Exchange exchange) { } if (watermarkExpression != null) { - // value-based: evaluate expression on the exchange after split completion - String newValue = watermarkExpression.evaluate(exchange, String.class); - if (newValue != null) { - watermarkStore.put(watermarkKey, newValue); + // value-based: use the latest value tracked per-item during processing + AtomicReference latestRef = exchange.getProperty(SPLIT_WATERMARK_LATEST, AtomicReference.class); + if (latestRef != null) { + String newValue = latestRef.get(); + if (newValue != null) { + watermarkStore.put(watermarkKey, newValue); + } } } else { // index-based: compute absolute last index and store it @@ -519,6 +596,7 @@ private void updateWatermark(Exchange exchange) { // clean up internal properties exchange.removeProperty(SPLIT_WATERMARK_OFFSET); exchange.removeProperty(SPLIT_WATERMARK_COUNT); + exchange.removeProperty(SPLIT_WATERMARK_LATEST); } private void buildSplitResult(Exchange exchange) { diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterTransactedTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterTransactedTest.java new file mode 100644 index 0000000000000..1bb78546bd9c8 --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterTransactedTest.java @@ -0,0 +1,211 @@ +/* + * 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.processor; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.Exchange; +import org.apache.camel.SplitResult; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * Tests for Splitter EIP enhancements (group, error threshold, watermark) using the transacted code path + * ({@link MulticastProcessor.MulticastTransactedTask}). + */ +class SplitterTransactedTest extends ContextTestSupport { + + private final Map store = new ConcurrentHashMap<>(); + + @Test + void testGroupTransacted() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:group"); + mock.expectedMessageCount(3); + + Exchange exchange = createExchangeWithBody(Arrays.asList("a", "b", "c", "d", "e", "f", "g")); + exchange.getExchangeExtension().setTransacted(true); + + template.send("direct:group", exchange); + + mock.assertIsSatisfied(); + + // verify chunks + assertEquals(List.of("a", "b", "c"), mock.getReceivedExchanges().get(0).getIn().getBody()); + assertEquals(List.of("d", "e", "f"), mock.getReceivedExchanges().get(1).getIn().getBody()); + assertEquals(List.of("g"), mock.getReceivedExchanges().get(2).getIn().getBody()); + } + + @Test + void testMaxFailedRecordsTransacted() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:maxfail"); + mock.expectedMinimumMessageCount(0); + + Exchange exchange = createExchangeWithBody(Arrays.asList("ok", "FAIL", "ok2", "FAIL2", "ok3")); + exchange.getExchangeExtension().setTransacted(true); + + Exchange result = template.send("direct:maxfail", exchange); + + mock.assertIsSatisfied(); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult); + assertEquals(2, splitResult.getFailureCount()); + assertTrue(splitResult.isAborted()); + } + + @Test + void testErrorThresholdTransacted() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:threshold"); + mock.expectedMinimumMessageCount(0); + + // 2 out of 4 fail = 50% error rate, threshold is 0.4 (40%) + Exchange exchange = createExchangeWithBody(Arrays.asList("ok", "FAIL", "FAIL2", "ok2")); + exchange.getExchangeExtension().setTransacted(true); + + Exchange result = template.send("direct:threshold", exchange); + + mock.assertIsSatisfied(); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult); + assertTrue(splitResult.isAborted()); + } + + @Test + void testSplitResultTransacted() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedMessageCount(3); + + Exchange exchange = createExchangeWithBody(Arrays.asList("ok", "FAIL", "ok2", "ok3")); + exchange.getExchangeExtension().setTransacted(true); + + Exchange result = template.send("direct:result", exchange); + + mock.assertIsSatisfied(); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult); + assertEquals(4, splitResult.getTotalItems()); + assertEquals(1, splitResult.getFailureCount()); + assertEquals(3, splitResult.getSuccessCount()); + assertFalse(splitResult.isAborted()); + } + + @Test + void testIndexWatermarkTransacted() throws Exception { + store.put("txJob", "1"); + + MockEndpoint mock = getMockEndpoint("mock:watermark"); + mock.expectedMessageCount(3); + + Exchange exchange = createExchangeWithBody(Arrays.asList("a", "b", "c", "d", "e")); + exchange.getExchangeExtension().setTransacted(true); + + Exchange result = template.send("direct:watermark", exchange); + + mock.assertIsSatisfied(); + + // should skip items 0 and 1, process c, d, e + assertEquals("c", mock.getReceivedExchanges().get(0).getIn().getBody(String.class)); + assertEquals("d", mock.getReceivedExchanges().get(1).getIn().getBody(String.class)); + assertEquals("e", mock.getReceivedExchanges().get(2).getIn().getBody(String.class)); + + // watermark updated to 4 + assertEquals("4", store.get("txJob")); + + // previous watermark exposed + assertEquals("1", result.getProperty(Exchange.SPLIT_WATERMARK)); + } + + @Test + void testValueWatermarkTransacted() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:valuewm"); + mock.expectedMessageCount(3); + + Exchange exchange = createExchangeWithBody(Arrays.asList("2024-01-01", "2024-01-02", "2024-01-03")); + exchange.getExchangeExtension().setTransacted(true); + + template.send("direct:valuewm", exchange); + + mock.assertIsSatisfied(); + + // watermark should be the last processed item + assertEquals("2024-01-03", store.get("txDateJob")); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("direct:group") + .split(body()).group(3) + .to("mock:group"); + + from("direct:maxfail") + .split(body()).maxFailedRecords(2) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if (body.startsWith("FAIL")) { + throw new IllegalArgumentException("Simulated failure: " + body); + } + }) + .to("mock:maxfail"); + + from("direct:threshold") + .split(body()).errorThreshold(0.4) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if (body.startsWith("FAIL")) { + throw new IllegalArgumentException("Simulated failure: " + body); + } + }) + .to("mock:threshold"); + + from("direct:result") + .split(body()).maxFailedRecords(10) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if (body.startsWith("FAIL")) { + throw new IllegalArgumentException("Simulated failure: " + body); + } + }) + .to("mock:result"); + + from("direct:watermark") + .split(body()).watermarkStore(store, "txJob") + .to("mock:watermark"); + + from("direct:valuewm") + .split(body()) + .watermarkStore(store, "txDateJob") + .watermarkExpression("${body}") + .to("mock:valuewm"); + } + }; + } +} diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java index 53e678f401933..81fee77d43a1f 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java @@ -97,7 +97,7 @@ void testValueBasedWatermark() throws Exception { // no previous watermark, so SPLIT_WATERMARK should not be set assertNull(result.getProperty(Exchange.SPLIT_WATERMARK)); - // watermark expression evaluates ${body} on the aggregated exchange (last item) + // watermark expression evaluated per-item: last successful item's body is stored assertEquals("2024-01-03", store.get("dateJob")); } @@ -141,8 +141,6 @@ public void configure() { from("direct:value") .split(body()) - // use aggregation strategy that keeps the last exchange, so ${body} reflects the last item - .aggregationStrategy((oldExchange, newExchange) -> newExchange) .watermarkStore(store, "dateJob") .watermarkExpression("${body}") .to("mock:split3"); From 527eb30f2e02cad2f759c0e8035fd7e235e9af18 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 27 Mar 2026 21:24:03 +0100 Subject: [PATCH 04/14] CAMEL-23264: Regenerate downstream artifacts for Splitter EIP changes Regenerated: catalog split.json, Spring/XML-IO XSD schemas, XML/YAML ModelParser/ModelWriter, YAML DSL ModelDeserializers. Co-Authored-By: Claude Opus 4.6 --- .../camel/catalog/schemas/camel-spring.xsd | 55 +++++++++++++++++++ .../camel/catalog/schemas/camel-xml-io.xsd | 55 +++++++++++++++++++ .../org/apache/camel/xml/in/ModelParser.java | 6 ++ .../org/apache/camel/xml/out/ModelWriter.java | 6 ++ .../deserializers/ModelDeserializers.java | 12 ++-- 5 files changed, 128 insertions(+), 6 deletions(-) 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 d3685f4cf0292..515c0bd907eda 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 @@ -13262,6 +13262,61 @@ Reference to a processor for preparing the exchange to be sent. Can be used to d + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 540634bc00728..4000296274333 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 @@ -12405,6 +12405,61 @@ Reference to a processor for preparing the exchange to be sent. Can be used to d + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java index abcef047096cb..dfea852d6560b 100644 --- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java +++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java @@ -1140,7 +1140,10 @@ protected SplitDefinition doParseSplitDefinition() throws IOException, XmlPullPa case "aggregationStrategyMethodAllowNull": def.setAggregationStrategyMethodAllowNull(val); yield true; case "aggregationStrategyMethodName": def.setAggregationStrategyMethodName(val); yield true; case "delimiter": def.setDelimiter(val); yield true; + case "errorThreshold": def.setErrorThreshold(val); yield true; case "executorService": def.setExecutorService(val); yield true; + case "group": def.setGroup(val); yield true; + case "maxFailedRecords": def.setMaxFailedRecords(val); yield true; case "onPrepare": def.setOnPrepare(val); yield true; case "parallelAggregate": def.setParallelAggregate(val); yield true; case "parallelProcessing": def.setParallelProcessing(val); yield true; @@ -1149,6 +1152,9 @@ protected SplitDefinition doParseSplitDefinition() throws IOException, XmlPullPa case "streaming": def.setStreaming(val); yield true; case "synchronous": def.setSynchronous(val); yield true; case "timeout": def.setTimeout(val); yield true; + case "watermarkExpression": def.setWatermarkExpression(val); yield true; + case "watermarkKey": def.setWatermarkKey(val); yield true; + case "watermarkStore": def.setWatermarkStore(val); yield true; default: yield processorDefinitionAttributeHandler().accept(def, key, val); }, outputExpressionNodeElementHandler(), noValueHandler()); } diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java index 0e15504b96da5..5167520f02a97 100644 --- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java +++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java @@ -1769,6 +1769,12 @@ protected void doWriteSplitDefinition(String name, SplitDefinition def) throws I doWriteAttribute("executorService", def.getExecutorService(), null); doWriteAttribute("onPrepare", def.getOnPrepare(), null); doWriteAttribute("shareUnitOfWork", def.getShareUnitOfWork(), null); + doWriteAttribute("group", def.getGroup(), null); + doWriteAttribute("errorThreshold", def.getErrorThreshold(), null); + doWriteAttribute("maxFailedRecords", def.getMaxFailedRecords(), null); + doWriteAttribute("watermarkStore", def.getWatermarkStore(), null); + doWriteAttribute("watermarkKey", def.getWatermarkKey(), null); + doWriteAttribute("watermarkExpression", def.getWatermarkExpression(), null); doWriteOutputExpressionNodeElements(def); endElement(name); } diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java index 56a976cfde849..8109b3440f0b2 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java @@ -16833,12 +16833,12 @@ protected boolean setProperty(SpELExpression target, String propertyKey, @YamlProperty(name = "delimiter", type = "string", 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, this can be needed in some special situations. The default value is comma.", displayName = "Delimiter"), @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "errorThreshold", type = "number"), + @YamlProperty(name = "errorThreshold", type = "number", description = "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation.", displayName = "Error Threshold"), @YamlProperty(name = "executorService", type = "string", description = "To use a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatically implied, and you do not have to enable that option as well.", displayName = "Executor Service"), @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression of how to split the message body, such as as-is, using a tokenizer, or using a xpath.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "group", type = "number"), + @YamlProperty(name = "group", type = "number", description = "Groups N split messages into a single message with a java.util.List body. This allows processing items in chunks instead of one at a time.", displayName = "Group"), @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "maxFailedRecords", type = "number"), + @YamlProperty(name = "maxFailedRecords", type = "number", description = "Sets the maximum number of failed records before aborting the split operation.", displayName = "Max Failed Records"), @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the org.apache.camel.Exchange to be sent. This can be used to deep-clone messages that should be sent, or any custom logic needed before the exchange is sent.", displayName = "On Prepare"), @YamlProperty(name = "parallelAggregate", type = "boolean", deprecated = true, defaultValue = "false", description = "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe.", displayName = "Parallel Aggregate"), @@ -16849,9 +16849,9 @@ protected boolean setProperty(SpELExpression target, String propertyKey, @YamlProperty(name = "streaming", type = "boolean", defaultValue = "false", description = "When in streaming mode, then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter do not split all the messages first, but then we do not know the total size, and therefore the org.apache.camel.Exchange#SPLIT_SIZE is empty. In non-streaming mode (default) the splitter will split each message first, to know the total size, and then process each message one by one. This requires to keep all the split messages in memory and therefore requires more memory. The total size is provided in the org.apache.camel.Exchange#SPLIT_SIZE header. The streaming mode also affects the aggregation behavior. If enabled then Camel will process replies out-of-order, e.g. in the order they come back. If disabled, Camel will process replies in the same order as the messages was split.", displayName = "Streaming"), @YamlProperty(name = "synchronous", type = "boolean", defaultValue = "false", description = "Sets whether synchronous processing should be strictly used. When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled.", displayName = "Synchronous"), @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Sets a total timeout specified in millis, when using parallel processing. If the Splitter hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Splitter breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care.", displayName = "Timeout"), - @YamlProperty(name = "watermarkExpression", type = "string"), - @YamlProperty(name = "watermarkKey", type = "string"), - @YamlProperty(name = "watermarkStore", type = "string") + @YamlProperty(name = "watermarkExpression", type = "string", description = "Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value.", displayName = "Watermark Expression"), + @YamlProperty(name = "watermarkKey", type = "string", description = "Sets the key to use in the watermark store.", displayName = "Watermark Key"), + @YamlProperty(name = "watermarkStore", type = "string", description = "Sets a reference to a watermark store (a Map ) in the registry.", displayName = "Watermark Store") } ) public static class SplitDefinitionDeserializer extends YamlDeserializerBase { From ec0921d76701a402c93413408e7d2224be901abd Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 27 Mar 2026 21:47:14 +0100 Subject: [PATCH 05/14] CAMEL-23264: Regenerate camelYamlDsl.json schema with field descriptions Co-Authored-By: Claude Opus 4.6 --- .../resources/schema/camelYamlDsl.json | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json index 08e2826ac762f..39c44290ab801 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json @@ -7319,16 +7319,31 @@ "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.", "default" : false }, + "errorThreshold" : { + "type" : "number", + "title" : "Error Threshold", + "description" : "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation." + }, "executorService" : { "type" : "string", "title" : "Executor Service", "description" : "Reference to a custom thread pool to use for parallel processing. Setting this option implies parallel processing." }, + "group" : { + "type" : "number", + "title" : "Group", + "description" : "Groups N split messages into a single message with a java.util.List body. This allows processing items in chunks instead of one at a time." + }, "id" : { "type" : "string", "title" : "Id", "description" : "The id of this node" }, + "maxFailedRecords" : { + "type" : "number", + "title" : "Max Failed Records", + "description" : "Sets the maximum number of failed records before aborting the split operation." + }, "note" : { "type" : "string", "title" : "Note", @@ -7388,6 +7403,21 @@ "description" : "Total timeout in millis when using parallel processing. If the splitter has not been able to process all replies within the given timeframe, then the timeout triggers and the splitter breaks out and continues.", "default" : "0" }, + "watermarkExpression" : { + "type" : "string", + "title" : "Watermark Expression", + "description" : "Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value." + }, + "watermarkKey" : { + "type" : "string", + "title" : "Watermark Key", + "description" : "Sets the key to use in the watermark store." + }, + "watermarkStore" : { + "type" : "string", + "title" : "Watermark Store", + "description" : "Sets a reference to a watermark store (a Map ) in the registry." + }, "constant" : { }, "csimple" : { }, "datasonnet" : { }, From 4be84e60d2b39f8dae1216dd66a4cb7289f2f950 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Sat, 28 Mar 2026 07:43:09 +0100 Subject: [PATCH 06/14] CAMEL-23264: Regenerate camelYamlDsl.json schema with field descriptions Co-Authored-By: Claude Opus 4.6 --- .../src/generated/resources/schema/camelYamlDsl.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json index 39c44290ab801..f73bc2caef923 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json @@ -7367,6 +7367,11 @@ "description" : "If enabled then processing each split message occurs concurrently. The caller thread still waits until all messages are fully processed before it continues.", "default" : false }, + "resumeStrategy" : { + "type" : "string", + "title" : "Resume Strategy", + "description" : "Sets a reference to a ResumeStrategy in the registry for resume-from-last-position support." + }, "shareUnitOfWork" : { "type" : "boolean", "title" : "Share Unit Of Work", @@ -7413,11 +7418,6 @@ "title" : "Watermark Key", "description" : "Sets the key to use in the watermark store." }, - "watermarkStore" : { - "type" : "string", - "title" : "Watermark Store", - "description" : "Sets a reference to a watermark store (a Map ) in the registry." - }, "constant" : { }, "csimple" : { }, "datasonnet" : { }, From 7f7c6bdf5f37d61c88f46d91746cd7951bd60cc1 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Sat, 28 Mar 2026 09:08:35 +0100 Subject: [PATCH 07/14] CAMEL-23264: Fix group+watermark bug, add docs, tests, and validation - Fix index-based watermark producing wrong offset when combined with group(): track raw item count independently of chunk index - Optimize double readCurrentWatermark() call by reusing exchange property - Refactor watermark from Map to ResumeStrategy SPI - Add validation for errorThreshold range and watermarkKey/resumeStrategy completeness - Add documentation for all new features (group, errorThreshold, maxFailedRecords, SplitResult, watermark tracking) to split-eip.adoc - Document parallel processing limitations for errorThreshold - Document concurrent exchange limitations for watermark tracking - Add upgrade guide section for Split EIP enhancements - Add tests: group+watermark, parallel+errorThreshold, group+errorThreshold, streaming+parallel+maxFailedRecords, streaming mode, validation, and ResumeStrategy test helper Co-Authored-By: Claude Opus 4.6 --- .../apache/camel/catalog/models/split.json | 51 +-- .../docs/modules/eips/pages/split-eip.adoc | 349 ++++++++++++++++++ .../org/apache/camel/model/split.json | 2 +- .../apache/camel/model/SplitDefinition.java | 70 ++-- .../org/apache/camel/processor/Splitter.java | 204 +++++++--- .../apache/camel/reifier/SplitReifier.java | 35 +- .../processor/SplitterErrorThresholdTest.java | 48 +++ .../camel/processor/SplitterGroupTest.java | 35 ++ .../SplitterMaxFailedRecordsTest.java | 24 ++ .../SplitterParallelErrorThresholdTest.java | 137 +++++++ .../processor/SplitterSplitResultTest.java | 46 +++ .../processor/SplitterStreamingTest.java | 182 +++++++++ .../processor/SplitterTestResumeStrategy.java | 173 +++++++++ .../processor/SplitterTransactedTest.java | 6 +- .../processor/SplitterValidationTest.java | 119 ++++++ .../processor/SplitterWatermarkTest.java | 88 ++++- .../pages/camel-4x-upgrade-guide-4_19.adoc | 21 ++ .../deserializers/ModelDeserializers.java | 14 +- 18 files changed, 1477 insertions(+), 127 deletions(-) create mode 100644 core/camel-core/src/test/java/org/apache/camel/processor/SplitterParallelErrorThresholdTest.java create mode 100644 core/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamingTest.java create mode 100644 core/camel-core/src/test/java/org/apache/camel/processor/SplitterTestResumeStrategy.java create mode 100644 core/camel-core/src/test/java/org/apache/camel/processor/SplitterValidationTest.java 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 889d6bc7dfec9..5ab3ad27f8378 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 @@ -3,39 +3,46 @@ "kind": "model", "name": "split", "title": "Split", - "description": "Splits a message into multiple sub-messages using an expression, and processes each one individually. Supports parallel processing and result aggregation.", + "description": "Splits a single message into many sub-messages.", "deprecated": false, - "label": "aggregate,eip,routing", + "label": "eip,routing", "javaType": "org.apache.camel.model.SplitDefinition", - "aliases": [ "split", "chunk" ], "abstract": false, "input": true, "output": true }, "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" }, - "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", "csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "java", "joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "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." }, - "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." }, - "aggregationStrategyMethodAllowNull": { "index": 8, "kind": "attribute", "displayName": "Aggregation Strategy Method Allow Null", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If true then null is used as the oldExchange when there is no data to aggregate, when using POJOs as the AggregationStrategy." }, + "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets 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": "Sets the note of 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": "Sets the description of 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", "csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "java", "joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Expression of how to split the message body, such as as-is, using a tokenizer, or using a xpath." }, + "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, this can be needed in some special situations. 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": "Sets a reference to the AggregationStrategy to be used to assemble the replies from the split messages, into a single outgoing message from the Splitter. By default Camel will use the original incoming message to the splitter (leave it unchanged). You can also use a POJO as the AggregationStrategy" }, + "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 explicit declare the method name to use, when using POJOs as the AggregationStrategy." }, + "aggregationStrategyMethodAllowNull": { "index": 8, "kind": "attribute", "displayName": "Aggregation Strategy Method Allow Null", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy" }, "parallelAggregate": { "index": 9, "kind": "attribute", "displayName": "Parallel Aggregate", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": true, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe." }, - "parallelProcessing": { "index": 10, "kind": "attribute", "displayName": "Parallel Processing", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then processing each split message occurs concurrently. The caller thread still waits until all messages are fully processed before it continues." }, - "synchronous": { "index": 11, "kind": "attribute", "displayName": "Synchronous", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled." }, - "streaming": { "index": 12, "kind": "attribute", "displayName": "Streaming", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "When enabled then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter does not split all messages first." }, - "stopOnException": { "index": 13, "kind": "attribute", "displayName": "Stop On Exception", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then stops further split processing if an exception or failure occurred during processing of a split message, and the caused exception will be thrown. The default behavior is to not stop but continue processing till the end." }, - "timeout": { "index": 14, "kind": "attribute", "displayName": "Timeout", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "0", "description": "Total timeout in millis when using parallel processing. If the splitter has not been able to process all replies within the given timeframe, then the timeout triggers and the splitter breaks out and continues." }, - "executorService": { "index": 15, "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": "Reference to a custom thread pool to use for parallel processing. Setting this option implies parallel processing." }, - "onPrepare": { "index": 16, "kind": "attribute", "displayName": "On Prepare", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Reference to a processor for preparing the exchange to be sent. Can be used to deep-clone messages that should be sent." }, - "shareUnitOfWork": { "index": 17, "kind": "attribute", "displayName": "Share Unit Of Work", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Shares the unit of work with the parent and each of the split messages. By default each split exchange has its own individual unit of work." }, - "outputs": { "index": 18, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List>", "oneOf": [ "a2aSubTask", "aggregate", "bean", "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", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false } + "parallelProcessing": { "index": 10, "kind": "attribute", "displayName": "Parallel Processing", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then processing each split messages occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. It's only processing the sub messages from the splitter which happens concurrently. When parallel processing is enabled, then the Camel routing engin will continue processing using last used thread from the parallel thread pool. However, if you want to use the original thread that called the splitter, then make sure to enable the synchronous option as well. In parallel processing mode, you may want to also synchronous = true to force this EIP to process the sub-tasks using the upper bounds of the thread-pool. If using synchronous = false then Camel will allow its reactive routing engine to use as many threads as possible, which may be available due to sub-tasks using other thread-pools such as CompletableFuture.runAsync or others." }, + "synchronous": { "index": 11, "kind": "attribute", "displayName": "Synchronous", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether synchronous processing should be strictly used. When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled." }, + "streaming": { "index": 12, "kind": "attribute", "displayName": "Streaming", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "When in streaming mode, then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter do not split all the messages first, but then we do not know the total size, and therefore the org.apache.camel.Exchange#SPLIT_SIZE is empty. In non-streaming mode (default) the splitter will split each message first, to know the total size, and then process each message one by one. This requires to keep all the split messages in memory and therefore requires more memory. The total size is provided in the org.apache.camel.Exchange#SPLIT_SIZE header. The streaming mode also affects the aggregation behavior. If enabled then Camel will process replies out-of-order, e.g. in the order they come back. If disabled, Camel will process replies in the same order as the messages was split." }, + "stopOnException": { "index": 13, "kind": "attribute", "displayName": "Stop On Exception", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the splitter will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The default behavior is to not stop but continue processing till the end" }, + "timeout": { "index": 14, "kind": "attribute", "displayName": "Timeout", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "0", "description": "Sets a total timeout specified in millis, when using parallel processing. If the Splitter hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Splitter breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care." }, + "executorService": { "index": 15, "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 to be used for parallel processing. Notice if you set this option, then parallel processing is automatically implied, and you do not have to enable that option as well." }, + "onPrepare": { "index": 16, "kind": "attribute", "displayName": "On Prepare", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Uses the Processor when preparing the org.apache.camel.Exchange to be sent. This can be used to deep-clone messages that should be sent, or any custom logic needed before the exchange is sent." }, + "shareUnitOfWork": { "index": 17, "kind": "attribute", "displayName": "Share Unit Of Work", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Splitter will by default not share unit of work between the parent exchange and each split exchange. This means each split exchange has its own individual unit of work." }, + "group": { "index": 18, "kind": "attribute", "displayName": "Group", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Groups N split messages into a single message with a java.util.List body. This allows processing items in chunks instead of one at a time." }, + "errorThreshold": { "index": 19, "kind": "attribute", "displayName": "Error Threshold", "group": "advanced", "label": "advanced", "required": false, "type": "number", "javaType": "java.lang.Double", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation." }, + "maxFailedRecords": { "index": 20, "kind": "attribute", "displayName": "Max Failed Records", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the maximum number of failed records before aborting the split operation." }, + "resumeStrategy": { "index": 21, "kind": "attribute", "displayName": "Resume Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.resume.ResumeStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a ResumeStrategy in the registry for resume-from-last-position support." }, + "watermarkKey": { "index": 22, "kind": "attribute", "displayName": "Watermark Key", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the key to use in the watermark store." }, + "watermarkExpression": { "index": 23, "kind": "attribute", "displayName": "Watermark Expression", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value." }, + "outputs": { "index": 24, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List>", "oneOf": [ "aggregate", "bean", "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", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false } }, "exchangeProperties": { "CamelSplitIndex": { "index": 0, "kind": "exchangeProperty", "displayName": "Split Index", "label": "producer", "required": false, "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "important": true, "description": "A split counter that increases for each Exchange being split. The counter starts from 0." }, "CamelSplitComplete": { "index": 1, "kind": "exchangeProperty", "displayName": "Split Complete", "label": "producer", "required": false, "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "description": "Whether this Exchange is the last." }, - "CamelSplitSize": { "index": 2, "kind": "exchangeProperty", "displayName": "Split Size", "label": "producer", "required": false, "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "important": true, "description": "The total number of Exchanges that was split. This property is not applied for stream based splitting, except for the very last message because then Camel knows the total size." } + "CamelSplitSize": { "index": 2, "kind": "exchangeProperty", "displayName": "Split Size", "label": "producer", "required": false, "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "important": true, "description": "The total number of Exchanges that was split. This property is not applied for stream based splitting, except for the very last message because then Camel knows the total size." }, + "CamelSplitResult": { "index": 3, "kind": "exchangeProperty", "displayName": "Split Result", "label": "producer", "required": false, "javaType": "org.apache.camel.SplitResult", "deprecated": false, "autowired": false, "secret": false, "description": "The result of a Splitter EIP operation with error thresholds, providing structured failure details." }, + "CamelSplitWatermark": { "index": 4, "kind": "exchangeProperty", "displayName": "Split Watermark", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The current watermark value from the watermark store, set before split processing begins." } } } diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc index 54019e0b2b520..d055e80990cb8 100644 --- a/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc +++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc @@ -1078,6 +1078,355 @@ BuildCombinedResponse: (id=1,item=A);(id=2,item=B);(id=3,item=C) Response to caller: Response[(id=1,item=A);(id=2,item=B);(id=3,item=C)] ---- +=== Chunking with group + +The `group` option on the Split EIP allows grouping N split items together into a single message +with a `java.util.List` body. This is useful when you want to process items in batches rather than +one at a time. + +[tabs] +==== +Java:: ++ +[source,java] +---- +from("direct:start") + .split(body()).group(3) + .to("mock:batch"); +---- + +XML:: ++ +[source,xml] +---- + + + + ${body} + + + +---- + +YAML:: ++ +[source,yaml] +---- +- route: + from: + uri: direct:start + steps: + - split: + group: "3" + expression: + simple: + expression: "${body}" + steps: + - to: + uri: mock:batch +---- +==== + +If the input has 7 items, the route above produces 3 exchanges: one with items 1-3, one with items 4-6, +and one with item 7. + +NOTE: This `group` option is on the Split EIP definition itself and works with any expression. +It is different from the `group` option on the xref:components:languages:tokenize-language.adoc[Tokenize] language, +which groups tokenized text lines together. + +=== Error handling with maxFailedRecords and errorThreshold + +The `stopOnException` option is all-or-nothing: a single failure stops the entire split. +For more fine-grained control, the Splitter provides two error threshold options that let processing +continue through some failures while stopping when the error rate becomes unacceptable. + +==== maxFailedRecords + +The `maxFailedRecords` option sets the maximum number of failed split items before aborting. +Processing continues as long as the failure count stays below this threshold. When the threshold +is reached, the splitter stops and sets an exception on the exchange. + +[tabs] +==== +Java:: ++ +[source,java] +---- +from("direct:start") + .split(body()).maxFailedRecords(5) + .process(exchange -> { + // processing logic that may throw exceptions + }) + .to("mock:result"); +---- + +XML:: ++ +[source,xml] +---- + + + + ${body} + + + + +---- + +YAML:: ++ +[source,yaml] +---- +- route: + from: + uri: direct:start + steps: + - split: + maxFailedRecords: "5" + expression: + simple: + expression: "${body}" + steps: + - process: + ref: myProcessor + - to: + uri: mock:result +---- +==== + +In this example, the first 4 failures are tolerated and processing continues. +When the 5th failure occurs, the splitter stops and the exchange will have an exception set. + +==== errorThreshold + +The `errorThreshold` option sets the maximum allowed failure ratio as a fraction between 0.0 and 1.0. +After each failure, the ratio of failed items to total processed items is calculated. If this ratio +meets or exceeds the threshold, the splitter stops. + +[tabs] +==== +Java:: ++ +[source,java] +---- +from("direct:start") + .split(body()).errorThreshold(0.5) + .process(exchange -> { + // processing logic that may throw exceptions + }) + .to("mock:result"); +---- + +XML:: ++ +[source,xml] +---- + + + + ${body} + + + + +---- + +YAML:: ++ +[source,yaml] +---- +- route: + from: + uri: direct:start + steps: + - split: + errorThreshold: "0.5" + expression: + simple: + expression: "${body}" + steps: + - process: + ref: myProcessor + - to: + uri: mock:result +---- +==== + +In this example, if 50% or more of the processed items have failed, the splitter stops. + +Both `maxFailedRecords` and `errorThreshold` can be combined. The splitter stops when either +threshold is exceeded. + +IMPORTANT: The `stopOnException` option is mutually exclusive with `maxFailedRecords` and +`errorThreshold`. You cannot use `stopOnException` together with either of these options. + +NOTE: When using `errorThreshold` with `parallelProcessing`, the failure ratio may vary slightly +between runs because the ratio is calculated as failures are reported, and the order in which +parallel items complete is non-deterministic. For deterministic abort behavior with parallel +processing, prefer `maxFailedRecords` (absolute count) over `errorThreshold` (ratio). + +==== SplitResult + +When `maxFailedRecords` or `errorThreshold` is configured, the splitter makes a +`SplitResult` object available as an exchange property (`CamelSplitResult`) after the split completes. +This provides structured information about the outcome: + +[source,java] +---- +Exchange result = template.send("direct:start", + e -> e.getIn().setBody(myItems)); + +SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); +if (splitResult != null) { + int total = splitResult.getTotalItems(); // total items processed + int success = splitResult.getSuccessCount(); // successful items + int failures = splitResult.getFailureCount(); // failed items + boolean aborted = splitResult.isAborted(); // true if a threshold was exceeded + + // inspect individual failures + for (SplitResult.Failure failure : splitResult.getFailures()) { + int index = failure.index(); // 0-based index of failed item + Exception ex = failure.exception(); // the exception that occurred + } +} +---- + +=== Watermark tracking + +The Splitter supports watermark tracking for incremental processing scenarios using Camel's +`ResumeStrategy` SPI. A watermark records how far processing has progressed, so subsequent +runs can skip already-processed items. + +This is useful when processing a data source repeatedly (e.g., polling a database or file) +where you want to resume from where the last run left off. You can use any `ResumeStrategy` +implementation for persistence — from a simple in-memory strategy for testing to a Kafka-backed +strategy for production use. + +==== Index-based watermark + +The simplest form uses the split index as the watermark. On each run, items up to and including +the stored watermark index are skipped. After successful processing, the watermark is updated +to the last processed index. + +[tabs] +==== +Java:: ++ +[source,java] +---- +ResumeStrategy strategy = ... // any ResumeStrategy implementation + +from("direct:start") + .split(body()).resumeStrategy(strategy, "myJob") + .to("mock:result"); +---- + +XML:: ++ +[source,xml] +---- + + + + ${body} + + + +---- + +YAML:: ++ +[source,yaml] +---- +- route: + from: + uri: direct:start + steps: + - split: + resumeStrategy: "#myStrategy" + watermarkKey: myJob + expression: + simple: + expression: "${body}" + steps: + - to: + uri: mock:result +---- +==== + +On the first run with 5 items, all are processed and the watermark is stored as `"4"` (the last 0-based index). +On the next run with the same 5 items, items 0 through 4 are skipped and nothing is processed. +If the data source grows to 8 items, only items 5, 6, and 7 are processed. + +==== Value-based watermark + +For more control, you can use a `watermarkExpression` to extract a watermark value from each processed item. +The value from the last successfully processed item (by index order) is stored. + +[tabs] +==== +Java:: ++ +[source,java] +---- +ResumeStrategy strategy = ... // any ResumeStrategy implementation + +from("direct:start") + .split(body()) + .resumeStrategy(strategy, "dateJob") + .watermarkExpression("${body}") + .to("mock:result"); +---- + +XML:: ++ +[source,xml] +---- + + + + ${body} + + + +---- + +YAML:: ++ +[source,yaml] +---- +- route: + from: + uri: direct:start + steps: + - split: + resumeStrategy: "#myStrategy" + watermarkKey: dateJob + watermarkExpression: "${body}" + expression: + simple: + expression: "${body}" + steps: + - to: + uri: mock:result +---- +==== + +With value-based watermarking, the previous watermark value is exposed as the exchange property +`CamelSplitWatermark` before split processing begins. You can use this to filter items in your +processing logic. + +NOTE: The `watermarkExpression` option uses the Simple language for expression evaluation. + +NOTE: The watermark is only updated when the split completes successfully. If the split is aborted +(e.g., due to exceeding `maxFailedRecords`), the watermark is not updated, which allows the +failed batch to be retried. + +IMPORTANT: Watermark tracking assumes sequential route invocations (e.g., batch jobs triggered by +a `timer` or `scheduler`). If multiple exchanges hit the same route concurrently, they will read +the same watermark and may process duplicate items. Use a single-consumer pattern for watermark-based routes. + === Stop processing in case of exception The Splitter will by default continue to process diff --git a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json index 0f7987150865b..5ab3ad27f8378 100644 --- a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json +++ b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json @@ -33,7 +33,7 @@ "group": { "index": 18, "kind": "attribute", "displayName": "Group", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Groups N split messages into a single message with a java.util.List body. This allows processing items in chunks instead of one at a time." }, "errorThreshold": { "index": 19, "kind": "attribute", "displayName": "Error Threshold", "group": "advanced", "label": "advanced", "required": false, "type": "number", "javaType": "java.lang.Double", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation." }, "maxFailedRecords": { "index": 20, "kind": "attribute", "displayName": "Max Failed Records", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the maximum number of failed records before aborting the split operation." }, - "watermarkStore": { "index": 21, "kind": "attribute", "displayName": "Watermark Store", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a watermark store (a Map ) in the registry." }, + "resumeStrategy": { "index": 21, "kind": "attribute", "displayName": "Resume Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.resume.ResumeStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a ResumeStrategy in the registry for resume-from-last-position support." }, "watermarkKey": { "index": 22, "kind": "attribute", "displayName": "Watermark Key", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the key to use in the watermark store." }, "watermarkExpression": { "index": 23, "kind": "attribute", "displayName": "Watermark Expression", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value." }, "outputs": { "index": 24, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List>", "oneOf": [ "aggregate", "bean", "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", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java index 881a56037cf4c..7c450e46c3d46 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java @@ -16,7 +16,6 @@ */ package org.apache.camel.model; -import java.util.Map; import java.util.concurrent.ExecutorService; import jakarta.xml.bind.annotation.XmlAccessType; @@ -29,6 +28,7 @@ import org.apache.camel.Expression; import org.apache.camel.Processor; import org.apache.camel.model.language.ExpressionDefinition; +import org.apache.camel.resume.ResumeStrategy; import org.apache.camel.spi.Metadata; /** @@ -49,8 +49,7 @@ public class SplitDefinition extends OutputExpressionNode implements ExecutorSer @XmlTransient private Processor onPrepareProcessor; @XmlTransient - @SuppressWarnings("rawtypes") - private Map watermarkStoreBean; + private ResumeStrategy resumeStrategyBean; @XmlAttribute @Metadata(defaultValue = ",", @@ -129,8 +128,8 @@ public class SplitDefinition extends OutputExpressionNode implements ExecutorSer @Metadata(label = "advanced", javaType = "java.lang.Integer") private String maxFailedRecords; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.util.Map") - private String watermarkStore; + @Metadata(label = "advanced", javaType = "org.apache.camel.resume.ResumeStrategy") + private String resumeStrategy; @XmlAttribute @Metadata(label = "advanced") private String watermarkKey; @@ -162,8 +161,8 @@ public SplitDefinition(SplitDefinition source) { this.group = source.group; this.errorThreshold = source.errorThreshold; this.maxFailedRecords = source.maxFailedRecords; - this.watermarkStoreBean = source.watermarkStoreBean; - this.watermarkStore = source.watermarkStore; + this.resumeStrategyBean = source.resumeStrategyBean; + this.resumeStrategy = source.resumeStrategy; this.watermarkKey = source.watermarkKey; this.watermarkExpression = source.watermarkExpression; } @@ -655,6 +654,10 @@ public SplitDefinition group(String group) { *

* This option is mutually exclusive with {@code stopOnException}. When set, individual item failures are tracked * but processing continues until the threshold is exceeded. + *

+ * Note: When combined with {@code parallelProcessing}, the failure ratio may vary between runs because + * parallel items complete in non-deterministic order. For deterministic abort behavior with parallel processing, + * prefer {@code maxFailedRecords} (absolute count) over {@code errorThreshold} (ratio). * * @param errorThreshold the failure ratio threshold (0.0-1.0) * @return the builder @@ -709,7 +712,7 @@ public SplitDefinition maxFailedRecords(String maxFailedRecords) { } /** - * Sets a watermark store and key for resume-from-last-position support. When configured, the Splitter tracks + * Sets a {@link ResumeStrategy} and key for resume-from-last-position support. When configured, the Splitter tracks * progress and can skip already-processed items on subsequent runs. *

* With index-based watermarking (no {@code watermarkExpression}), items up to the stored index are automatically @@ -719,25 +722,36 @@ public SplitDefinition maxFailedRecords(String maxFailedRecords) { * The watermark is only updated on successful completion — aborted runs preserve the previous watermark to allow * retry. * - * @param store the Map to store watermark state in - * @param key the key to use in the store - * @return the builder + * @param strategy the ResumeStrategy to persist watermark state + * @param key the key to use in the strategy + * @return the builder */ - @SuppressWarnings("rawtypes") - public SplitDefinition watermarkStore(Map store, String key) { - this.watermarkStoreBean = store; + public SplitDefinition resumeStrategy(ResumeStrategy strategy, String key) { + this.resumeStrategyBean = strategy; setWatermarkKey(key); return this; } /** - * Sets a reference to a watermark store (a {@code Map}) in the registry. + * Sets a {@link ResumeStrategy} for resume-from-last-position support. The watermark key must also be configured + * via {@link #watermarkKey(String)}. * - * @param watermarkStore reference to the store bean + * @param strategy the ResumeStrategy to persist watermark state + * @return the builder + */ + public SplitDefinition resumeStrategy(ResumeStrategy strategy) { + this.resumeStrategyBean = strategy; + return this; + } + + /** + * Sets a reference to a {@link ResumeStrategy} in the registry. + * + * @param resumeStrategy reference to the strategy bean * @return the builder */ - public SplitDefinition watermarkStore(String watermarkStore) { - setWatermarkStore(watermarkStore); + public SplitDefinition resumeStrategy(String resumeStrategy) { + setResumeStrategy(resumeStrategy); return this; } @@ -753,8 +767,9 @@ public SplitDefinition watermarkKey(String watermarkKey) { } /** - * Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value. - * When set, enables value-based watermarking instead of index-based. + * Sets a Simple expression to evaluate on each completed sub-exchange to determine the new watermark value. When + * set, enables value-based watermarking instead of index-based. The expression is evaluated using the Simple + * language. * * @param watermarkExpression the Simple expression * @return the builder @@ -936,20 +951,19 @@ public void setMaxFailedRecords(String maxFailedRecords) { this.maxFailedRecords = maxFailedRecords; } - @SuppressWarnings("rawtypes") - public Map getWatermarkStoreBean() { - return watermarkStoreBean; + public ResumeStrategy getResumeStrategyBean() { + return resumeStrategyBean; } - public String getWatermarkStore() { - return watermarkStore; + public String getResumeStrategy() { + return resumeStrategy; } /** - * Sets a reference to a watermark store (a {@code Map}) in the registry. + * Sets a reference to a {@link ResumeStrategy} in the registry for resume-from-last-position support. */ - public void setWatermarkStore(String watermarkStore) { - this.watermarkStore = watermarkStore; + public void setResumeStrategy(String resumeStrategy) { + this.resumeStrategy = resumeStrategy; } public String getWatermarkKey() { diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java index 8bdd3e929e156..8cda2374b9849 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java @@ -43,9 +43,17 @@ import org.apache.camel.SplitResult; import org.apache.camel.processor.aggregate.ShareUnitOfWorkAggregationStrategy; import org.apache.camel.processor.aggregate.UseOriginalAggregationStrategy; +import org.apache.camel.resume.Offset; +import org.apache.camel.resume.OffsetKey; +import org.apache.camel.resume.ResumeStrategy; +import org.apache.camel.resume.ResumeStrategyConfiguration; +import org.apache.camel.resume.cache.ResumeCache; import org.apache.camel.support.ExchangeHelper; import org.apache.camel.support.GroupIterator; import org.apache.camel.support.ObjectHelper; +import org.apache.camel.support.resume.OffsetKeys; +import org.apache.camel.support.resume.Offsets; +import org.apache.camel.support.service.ServiceHelper; import org.apache.camel.util.IOHelper; import org.apache.camel.util.StringHelper; @@ -63,12 +71,17 @@ public class Splitter extends MulticastProcessor { private static final String SPLIT_WATERMARK_OFFSET = "CamelSplitWatermarkOffset"; private static final String SPLIT_WATERMARK_COUNT = "CamelSplitWatermarkCount"; private static final String SPLIT_WATERMARK_LATEST = "CamelSplitWatermarkLatest"; + + private record IndexedWatermark(int index, String value) { + } + private final Expression expression; private final String delimiter; private int group; private double errorThreshold; private int maxFailedRecords; - private Map watermarkStore; + private ResumeStrategy resumeStrategy; + private final ConcurrentHashMap watermarkCache = new ConcurrentHashMap<>(); private String watermarkKey; private Expression watermarkExpression; @@ -102,11 +115,6 @@ public String getTraceLabel() { return "split[" + expression + "]"; } - @Override - protected void doBuild() throws Exception { - super.doBuild(); - } - @Override protected void doInit() throws Exception { super.doInit(); @@ -114,6 +122,59 @@ protected void doInit() throws Exception { if (watermarkExpression != null) { watermarkExpression.init(getCamelContext()); } + if (resumeStrategy != null && watermarkKey != null) { + ServiceHelper.startService(resumeStrategy); + resumeStrategy.loadCache(); + } + } + + @Override + protected void doStop() throws Exception { + if (resumeStrategy != null) { + ServiceHelper.stopService(resumeStrategy); + } + super.doStop(); + } + + /** + * Reads the current watermark value. Checks the local cache first (populated from previous exchanges), then falls + * back to the strategy's resume cache (populated by {@code loadCache()} on init or backed by external storage). + */ + private String readCurrentWatermark() { + String value = watermarkCache.get(watermarkKey); + if (value != null) { + return value; + } + return readFromStrategyCache(); + } + + private String readFromStrategyCache() { + try { + ResumeStrategyConfiguration config = resumeStrategy.getResumeStrategyConfiguration(); + if (config != null) { + ResumeCache cache = config.getResumeCache(); + if (cache != null) { + String[] result = new String[1]; + cache.forEach((key, value) -> { + String keyStr = key instanceof OffsetKey ok + ? String.valueOf(ok.getValue()) : String.valueOf(key); + if (watermarkKey.equals(keyStr) && value != null) { + result[0] = toWatermarkString(value); + return false; + } + return true; + }); + return result[0]; + } + } + } catch (Exception e) { + // best-effort + } + return null; + } + + private static String toWatermarkString(Object value) { + return value instanceof Offset o ? String.valueOf(o.getValue()) : String.valueOf(value); } @Override @@ -148,15 +209,15 @@ public boolean process(Exchange exchange, final AsyncCallback callback) { } // set current watermark value as exchange property before processing - boolean hasWatermark = watermarkStore != null && watermarkKey != null; + boolean hasWatermark = resumeStrategy != null && watermarkKey != null; if (hasWatermark) { - String currentWatermark = watermarkStore.get(watermarkKey); + String currentWatermark = readCurrentWatermark(); if (currentWatermark != null) { exchange.setProperty(Exchange.SPLIT_WATERMARK, currentWatermark); } // pre-initialize AtomicReference for value-based watermark tracking (thread-safe) if (watermarkExpression != null) { - exchange.setProperty(SPLIT_WATERMARK_LATEST, new AtomicReference()); + exchange.setProperty(SPLIT_WATERMARK_LATEST, new AtomicReference()); } } @@ -207,14 +268,6 @@ protected Iterable createProcessorExchangePairs(Exchange throw exchange.getException(); } - // store total items count in tracker for SplitResult reporting - if (answer instanceof Collection coll) { - SplitFailureTracker tracker = exchange.getProperty(SPLIT_FAILURE_TRACKER, SplitFailureTracker.class); - if (tracker != null) { - tracker.setTotalItems(coll.size()); - } - } - return answer; } @@ -232,6 +285,8 @@ private final class SplitterIterable implements Iterable, private final Route route; private final Exchange original; private final int watermarkOffset; + // tracks individual (raw) item count, independent of grouping + private final AtomicInteger rawItemCount = new AtomicInteger(); private SplitterIterable(Exchange exchange, Object value) { this.original = exchange; @@ -249,8 +304,12 @@ private SplitterIterable(Exchange exchange, Object value) { // index-based watermarking: skip items up to the stored watermark index int skipCount = 0; - if (watermarkStore != null && watermarkKey != null && watermarkExpression == null) { - String storedIndex = watermarkStore.get(watermarkKey); + if (resumeStrategy != null && watermarkKey != null && watermarkExpression == null) { + // reuse watermark already read in process() and set as exchange property + String storedIndex = exchange.getProperty(Exchange.SPLIT_WATERMARK, String.class); + if (storedIndex == null) { + storedIndex = readCurrentWatermark(); + } if (storedIndex != null) { int skipTo = Integer.parseInt(storedIndex); while (rawIterator.hasNext() && skipCount <= skipTo) { @@ -264,8 +323,23 @@ private SplitterIterable(Exchange exchange, Object value) { exchange.setProperty(SPLIT_WATERMARK_OFFSET, skipCount); } + // wrap rawIterator in a counting decorator to track individual items + // consumed, independent of any GroupIterator chunking + Iterator countingIterator = new Iterator<>() { + @Override + public boolean hasNext() { + return rawIterator.hasNext(); + } + + @Override + public Object next() { + rawItemCount.incrementAndGet(); + return rawIterator.next(); + } + }; + // wrap with GroupIterator if group > 0 to chunk items into List batches - this.iterator = group > 0 ? new GroupIterator(rawIterator, group) : rawIterator; + this.iterator = group > 0 ? new GroupIterator(countingIterator, group) : countingIterator; this.copy = copyAndPrepareSubExchange(exchange); this.route = ExchangeHelper.getRoute(exchange); @@ -289,9 +363,13 @@ public boolean hasNext() { if (!answer) { // we are now closed closed = true; - // store item count for watermark tracking - if (watermarkStore != null && watermarkKey != null && watermarkExpression == null) { - original.setProperty(SPLIT_WATERMARK_COUNT, index); + // store raw item count for watermark tracking (guard against + // re-iteration in MulticastProcessor.doDone which re-creates + // the iterator to release exchanges). + // Use rawItemCount (individual items) not index (which counts chunks when group > 0) + if (resumeStrategy != null && watermarkKey != null && watermarkExpression == null + && original.getProperty(SPLIT_WATERMARK_COUNT) == null) { + original.setProperty(SPLIT_WATERMARK_COUNT, rawItemCount.get()); } // nothing more so we need to close the expression value in case it needs to be try { @@ -336,6 +414,12 @@ public ProcessorExchangePair next() { Message in = newExchange.getIn(); in.setBody(part); } + // track total items for SplitResult (works in both streaming and non-streaming mode) + SplitFailureTracker tracker + = original.getProperty(SPLIT_FAILURE_TRACKER, SplitFailureTracker.class); + if (tracker != null) { + tracker.incrementTotalItems(); + } return createProcessorExchangePair(index++, processor, newExchange, route); } else { return null; @@ -430,12 +514,12 @@ public void setMaxFailedRecords(int maxFailedRecords) { this.maxFailedRecords = maxFailedRecords; } - public Map getWatermarkStore() { - return watermarkStore; + public ResumeStrategy getResumeStrategy() { + return resumeStrategy; } - public void setWatermarkStore(Map watermarkStore) { - this.watermarkStore = watermarkStore; + public void setResumeStrategy(ResumeStrategy resumeStrategy) { + this.resumeStrategy = resumeStrategy; } public String getWatermarkKey() { @@ -476,7 +560,9 @@ protected boolean shouldContinueOnFailure(Exchange subExchange, Exchange origina } } - // continue processing - clear the exception so aggregation proceeds normally + // Continue processing — clear the exception from the sub-exchange so that aggregation + // proceeds normally. The failure is already recorded in the tracker above, so the + // SplitResult will still contain the failure details even though the exception is cleared. subExchange.setException(null); return true; } @@ -484,18 +570,15 @@ protected boolean shouldContinueOnFailure(Exchange subExchange, Exchange origina static final class SplitFailureTracker { private final AtomicInteger failureCount = new AtomicInteger(); private final AtomicInteger totalItems = new AtomicInteger(); - private final CopyOnWriteArrayList failures = new CopyOnWriteArrayList<>(); - - record SplitFailure(int index, Exception exception) { - } + private final CopyOnWriteArrayList failures = new CopyOnWriteArrayList<>(); void recordFailure(int index, Exception exception) { failureCount.incrementAndGet(); - failures.add(new SplitFailure(index, exception)); + failures.add(new SplitResult.Failure(index, exception)); } - void setTotalItems(int count) { - totalItems.set(count); + void incrementTotalItems() { + totalItems.incrementAndGet(); } int getTotalItems() { @@ -506,12 +589,11 @@ int getFailureCount() { return failureCount.get(); } - List getFailures() { - return Collections.unmodifiableList(failures); + List getFailures() { + return List.copyOf(failures); } } - @SuppressWarnings("unchecked") /** * Wraps a {@link ProcessorExchangePair} to evaluate the watermark expression on each completed sub-exchange. */ @@ -558,10 +640,16 @@ public void done() { if (subExchange.getException() == null) { String value = watermarkExpression.evaluate(subExchange, String.class); if (value != null) { - // AtomicReference is pre-initialized in process() — safe for parallel use - AtomicReference latestRef - = (AtomicReference) original.getProperty(SPLIT_WATERMARK_LATEST); - latestRef.set(value); + int itemIndex = delegate.getIndex(); + // Use accumulateAndGet to keep the value from the highest-indexed item. + // This ensures deterministic behavior in parallel processing mode. + AtomicReference latestRef + = (AtomicReference) original.getProperty(SPLIT_WATERMARK_LATEST); + latestRef.accumulateAndGet( + new IndexedWatermark(itemIndex, value), + (existing, candidate) -> existing == null || candidate.index() > existing.index() + ? candidate + : existing); } } } @@ -575,12 +663,13 @@ private void updateWatermark(Exchange exchange) { } if (watermarkExpression != null) { - // value-based: use the latest value tracked per-item during processing - AtomicReference latestRef = exchange.getProperty(SPLIT_WATERMARK_LATEST, AtomicReference.class); + // value-based: use the value from the highest-indexed item tracked during processing + AtomicReference latestRef + = exchange.getProperty(SPLIT_WATERMARK_LATEST, AtomicReference.class); if (latestRef != null) { - String newValue = latestRef.get(); - if (newValue != null) { - watermarkStore.put(watermarkKey, newValue); + IndexedWatermark latest = latestRef.get(); + if (latest != null) { + persistWatermark(latest.value()); } } } else { @@ -589,7 +678,7 @@ private void updateWatermark(Exchange exchange) { Integer count = exchange.getProperty(SPLIT_WATERMARK_COUNT, Integer.class); if (count != null && count > 0) { int lastAbsoluteIndex = offset + count - 1; - watermarkStore.put(watermarkKey, String.valueOf(lastAbsoluteIndex)); + persistWatermark(String.valueOf(lastAbsoluteIndex)); } } @@ -599,21 +688,24 @@ private void updateWatermark(Exchange exchange) { exchange.removeProperty(SPLIT_WATERMARK_LATEST); } + private void persistWatermark(String value) { + watermarkCache.put(watermarkKey, value); + try { + resumeStrategy.updateLastOffset(OffsetKeys.of(watermarkKey), Offsets.of(value)); + } catch (Exception e) { + throw RuntimeCamelException.wrapRuntimeCamelException(e); + } + } + private void buildSplitResult(Exchange exchange) { SplitFailureTracker tracker = exchange.getProperty(SPLIT_FAILURE_TRACKER, SplitFailureTracker.class); if (tracker == null) { return; } - int totalItems = tracker.getTotalItems(); boolean aborted = exchange.getException() != null; - - List failures = new ArrayList<>(); - for (SplitFailureTracker.SplitFailure f : tracker.getFailures()) { - failures.add(new SplitResult.Failure(f.index(), f.exception())); - } - - SplitResult result = new SplitResult(totalItems, tracker.getFailureCount(), failures, aborted); + SplitResult result + = new SplitResult(tracker.getTotalItems(), tracker.getFailureCount(), tracker.getFailures(), aborted); exchange.setProperty(ExchangePropertyKey.SPLIT_RESULT, result); // remove internal tracker diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java index 35c9273bef63f..c742409f09ed5 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java @@ -16,7 +16,6 @@ */ package org.apache.camel.reifier; -import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.function.BiFunction; @@ -31,6 +30,7 @@ import org.apache.camel.processor.aggregate.AggregationStrategyBeanAdapter; import org.apache.camel.processor.aggregate.AggregationStrategyBiFunctionAdapter; import org.apache.camel.processor.aggregate.ShareUnitOfWorkAggregationStrategy; +import org.apache.camel.resume.ResumeStrategy; public class SplitReifier extends ExpressionReifier { @@ -93,6 +93,14 @@ public Processor createProcessor() throws Exception { throw new IllegalArgumentException( "Cannot use both stopOnException and errorThreshold/maxFailedRecords on the Splitter EIP"); } + if (errorThreshold != 0 && (errorThreshold < 0 || errorThreshold > 1.0)) { + throw new IllegalArgumentException( + "errorThreshold must be between 0.0 and 1.0, but was: " + errorThreshold); + } + if (maxFailedRecords < 0) { + throw new IllegalArgumentException( + "maxFailedRecords must not be negative, but was: " + maxFailedRecords); + } if (errorThreshold > 0) { answer.setErrorThreshold(errorThreshold); } @@ -100,16 +108,27 @@ public Processor createProcessor() throws Exception { answer.setMaxFailedRecords(maxFailedRecords); } - @SuppressWarnings("unchecked") - Map watermarkStore = definition.getWatermarkStoreBean(); - if (watermarkStore == null && definition.getWatermarkStore() != null) { - watermarkStore = mandatoryLookup(definition.getWatermarkStore(), Map.class); + ResumeStrategy resumeStrategy = definition.getResumeStrategyBean(); + if (resumeStrategy == null && definition.getResumeStrategy() != null) { + resumeStrategy = mandatoryLookup(definition.getResumeStrategy(), ResumeStrategy.class); + } + if (resumeStrategy != null) { + CamelContextAware.trySetCamelContext(resumeStrategy, camelContext); } String watermarkKey = parseString(definition.getWatermarkKey()); - if (watermarkStore != null && watermarkKey != null) { - answer.setWatermarkStore(watermarkStore); + String watermarkExprStr = parseString(definition.getWatermarkExpression()); + // validate watermark configuration completeness + if ((resumeStrategy != null) != (watermarkKey != null)) { + throw new IllegalArgumentException( + "Both resumeStrategy and watermarkKey must be configured together on the Splitter EIP"); + } + if (watermarkExprStr != null && resumeStrategy == null) { + throw new IllegalArgumentException( + "watermarkExpression requires resumeStrategy and watermarkKey on the Splitter EIP"); + } + if (resumeStrategy != null && watermarkKey != null) { + answer.setResumeStrategy(resumeStrategy); answer.setWatermarkKey(watermarkKey); - String watermarkExprStr = parseString(definition.getWatermarkExpression()); if (watermarkExprStr != null) { Expression watermarkExpr = camelContext.resolveLanguage("simple").createExpression(watermarkExprStr); answer.setWatermarkExpression(watermarkExpr); diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterErrorThresholdTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterErrorThresholdTest.java index 09770dbcdd59f..76d07fb74b743 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterErrorThresholdTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterErrorThresholdTest.java @@ -90,6 +90,34 @@ public void configure() { } } + @Test + void testErrorThresholdWithParallelProcessing() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:parallel-split"); + mock.expectedMinimumMessageCount(0); + + Exchange result = template.send("direct:parallel", + e -> e.getIn().setBody(Arrays.asList("FAIL", "FAIL", "a", "b", "c"))); + + mock.assertIsSatisfied(); + + assertNotNull(result.getException(), "Should have an exception when error threshold exceeded in parallel mode"); + } + + @Test + void testCombinedErrorThresholdAndMaxFailedRecords() throws Exception { + // maxFailedRecords=10 (very high), errorThreshold=0.3 (30%) + // First item FAIL: ratio=1/1=100% >= 30% -> stop due to errorThreshold + MockEndpoint mock = getMockEndpoint("mock:combined"); + mock.expectedMinimumMessageCount(0); + + Exchange result = template.send("direct:combined", + e -> e.getIn().setBody(Arrays.asList("FAIL", "a", "b", "c"))); + + mock.assertIsSatisfied(); + + assertNotNull(result.getException(), "Should stop when errorThreshold exceeded even with high maxFailedRecords"); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -104,6 +132,26 @@ public void configure() { } }) .to("mock:split"); + + from("direct:parallel") + .split(body()).errorThreshold(0.5).parallelProcessing() + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure for: " + body); + } + }) + .to("mock:parallel-split"); + + from("direct:combined") + .split(body()).maxFailedRecords(10).errorThreshold(0.3) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure for: " + body); + } + }) + .to("mock:combined"); } }; } diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterGroupTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterGroupTest.java index 1da7beeb775ed..afedb2b5c5bf9 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterGroupTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterGroupTest.java @@ -20,12 +20,16 @@ import java.util.List; import org.apache.camel.ContextTestSupport; +import org.apache.camel.Exchange; +import org.apache.camel.SplitResult; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; class SplitterGroupTest extends ContextTestSupport { @@ -91,6 +95,25 @@ void testSplitterGroupWithParallelProcessing() throws Exception { mock.assertIsSatisfied(); } + @Test + void testGroupWithMaxFailedRecords() throws Exception { + // 9 items grouped by 3. Processor throws if the chunk contains "FAIL". + // Items: a, b, FAIL, d, e, f, g, h, i → chunks [a,b,FAIL], [d,e,f], [g,h,i] + // First chunk triggers failure, maxFailedRecords=2, so processing continues + MockEndpoint mock = getMockEndpoint("mock:group-fail"); + mock.expectedMinimumMessageCount(2); // at least the 2 non-failing chunks + + Exchange result = template.send("direct:group-fail", + e -> e.getIn().setBody(Arrays.asList("a", "b", "FAIL", "d", "e", "f", "g", "h", "i"))); + + mock.assertIsSatisfied(); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult); + assertEquals(1, splitResult.getFailureCount()); + assertFalse(splitResult.isAborted()); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -103,6 +126,18 @@ public void configure() { from("direct:parallel") .split(body()).group(3).parallelProcessing() .to("mock:parallel-split"); + + from("direct:group-fail") + .split(body()).group(3).maxFailedRecords(2) + .process(exchange -> { + List chunk = exchange.getIn().getBody(List.class); + for (Object item : chunk) { + if ("FAIL".equals(item)) { + throw new IllegalArgumentException("Chunk contains FAIL"); + } + } + }) + .to("mock:group-fail"); } }; } diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterMaxFailedRecordsTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterMaxFailedRecordsTest.java index 69b36f39a4139..6c8f63f806374 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterMaxFailedRecordsTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterMaxFailedRecordsTest.java @@ -92,6 +92,20 @@ public void configure() { } } + @Test + void testMaxFailedRecordsWithParallelProcessing() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:parallel"); + mock.expectedMinimumMessageCount(0); + + Exchange result = template.send("direct:parallel", + e -> e.getIn().setBody(Arrays.asList("a", "FAIL", "b", "FAIL", "c", "FAIL", "d"))); + + mock.assertIsSatisfied(); + + assertNotNull(result.getException(), "Should have exception in parallel mode"); + assertTrue(mock.getReceivedCounter() < 7, "Should stop before processing all items in parallel mode"); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -106,6 +120,16 @@ public void configure() { } }) .to("mock:split"); + + from("direct:parallel") + .split(body()).maxFailedRecords(2).parallelProcessing() + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure for: " + body); + } + }) + .to("mock:parallel"); } }; } diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterParallelErrorThresholdTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterParallelErrorThresholdTest.java new file mode 100644 index 0000000000000..3efcf15f5c1dc --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterParallelErrorThresholdTest.java @@ -0,0 +1,137 @@ +/* + * 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.processor; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.Exchange; +import org.apache.camel.SplitResult; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * Tests for error threshold features with parallel processing. + */ +class SplitterParallelErrorThresholdTest extends ContextTestSupport { + + @Test + void testMaxFailedRecordsWithParallel() throws Exception { + // 20 items, every 4th fails (indices 3, 7, 11, 15, 19) + // maxFailedRecords=3 → should abort after 3rd failure + List items = new ArrayList<>(); + for (int i = 0; i < 20; i++) { + items.add(i % 4 == 3 ? "FAIL" : "item-" + i); + } + + MockEndpoint mock = getMockEndpoint("mock:parallel-max"); + mock.expectedMinimumMessageCount(0); + + Exchange result = template.send("direct:parallel-max", + e -> e.getIn().setBody(items)); + + mock.assertIsSatisfied(); + + assertNotNull(result.getException(), "Should have exception when maxFailedRecords exceeded"); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult, "SplitResult should be set"); + assertTrue(splitResult.isAborted()); + assertTrue(splitResult.getFailureCount() >= 3, "Should have at least 3 failures"); + } + + @Test + void testMaxFailedRecordsAllSucceedWithParallel() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:parallel-max"); + mock.expectedMessageCount(10); + + List items = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + items.add("item-" + i); + } + + Exchange result = template.send("direct:parallel-max", + e -> e.getIn().setBody(items)); + + mock.assertIsSatisfied(); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult); + assertEquals(10, splitResult.getTotalItems()); + assertEquals(0, splitResult.getFailureCount()); + assertFalse(splitResult.isAborted()); + } + + @Test + void testErrorThresholdWithParallelHighFailureRate() throws Exception { + // 10 items, first 8 fail → very high failure rate + // errorThreshold=0.5 → should abort early + List items = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + items.add(i < 8 ? "FAIL" : "item-" + i); + } + + MockEndpoint mock = getMockEndpoint("mock:parallel-threshold"); + mock.expectedMinimumMessageCount(0); + + Exchange result = template.send("direct:parallel-threshold", + e -> e.getIn().setBody(items)); + + mock.assertIsSatisfied(); + + assertNotNull(result.getException(), "Should abort with high failure rate"); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult); + assertTrue(splitResult.isAborted()); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("direct:parallel-max") + .split(body()).parallelProcessing().maxFailedRecords(3) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure: " + body); + } + }) + .to("mock:parallel-max"); + + from("direct:parallel-threshold") + .split(body()).parallelProcessing().errorThreshold(0.5) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure: " + body); + } + }) + .to("mock:parallel-threshold"); + } + }; + } +} diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterSplitResultTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterSplitResultTest.java index 012e6d75e0d3a..c15b5440b39c8 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterSplitResultTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterSplitResultTest.java @@ -80,6 +80,32 @@ void testSplitResultAllSuccess() throws Exception { assertTrue(splitResult.getFailures().isEmpty()); } + @Test + void testSplitResultInStreamingMode() throws Exception { + Exchange result = template.send("direct:streaming", + e -> e.getIn().setBody(Arrays.asList("a", "FAIL", "b", "c", "d"))); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult, "SplitResult should be set in streaming mode"); + assertEquals(5, splitResult.getTotalItems()); + assertEquals(1, splitResult.getFailureCount()); + assertEquals(4, splitResult.getSuccessCount()); + assertFalse(splitResult.isAborted()); + } + + @Test + void testSplitResultWithParallelProcessing() throws Exception { + Exchange result = template.send("direct:parallel", + e -> e.getIn().setBody(Arrays.asList("a", "FAIL", "b", "c"))); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult, "SplitResult should be set in parallel mode"); + assertEquals(4, splitResult.getTotalItems()); + assertEquals(1, splitResult.getFailureCount()); + assertEquals(3, splitResult.getSuccessCount()); + assertFalse(splitResult.isAborted()); + } + @Test void testNoSplitResultWithoutErrorThreshold() throws Exception { // plain split without error threshold should not set SplitResult @@ -118,6 +144,26 @@ public void configure() { from("direct:plain") .split(body()) .to("mock:split"); + + from("direct:streaming") + .split(body()).streaming().maxFailedRecords(10) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure for: " + body); + } + }) + .to("mock:split"); + + from("direct:parallel") + .split(body()).parallelProcessing().maxFailedRecords(10) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure for: " + body); + } + }) + .to("mock:split"); } }; } diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamingTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamingTest.java new file mode 100644 index 0000000000000..a2b1ad9feaabe --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamingTest.java @@ -0,0 +1,182 @@ +/* + * 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.processor; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.Exchange; +import org.apache.camel.SplitResult; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.resume.ResumeStrategy; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class SplitterStreamingTest extends ContextTestSupport { + + private final Map store = new ConcurrentHashMap<>(); + private final ResumeStrategy strategy = new SplitterTestResumeStrategy(store); + + @Test + void testStreamingSplitResultTotalItems() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:streaming"); + mock.expectedMessageCount(3); + + Exchange result = template.send("direct:streaming", + e -> e.getIn().setBody(Arrays.asList("a", "FAIL", "b", "c"))); + + mock.assertIsSatisfied(); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult, "SplitResult should be set in streaming mode"); + assertEquals(4, splitResult.getTotalItems(), "totalItems should reflect all iterated items"); + assertEquals(1, splitResult.getFailureCount()); + assertEquals(3, splitResult.getSuccessCount()); + assertFalse(splitResult.isAborted()); + } + + @Test + void testStreamingSplitResultWhenAborted() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:streaming-abort"); + mock.expectedMinimumMessageCount(0); + + Exchange result = template.send("direct:streaming-abort", + e -> e.getIn().setBody(Arrays.asList("FAIL", "FAIL", "a", "b"))); + + mock.assertIsSatisfied(); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult, "SplitResult should be set even when streaming and aborted"); + assertTrue(splitResult.isAborted()); + assertEquals(2, splitResult.getFailureCount()); + // totalItems reflects how many were iterated before abort (at least 2) + assertTrue(splitResult.getTotalItems() >= 2, "totalItems should reflect items iterated before abort"); + } + + @Test + void testStreamingGrouping() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:streaming-group"); + mock.expectedMessageCount(3); + + template.sendBody("direct:streaming-group", Arrays.asList("a", "b", "c", "d", "e", "f", "g")); + + mock.assertIsSatisfied(); + + assertInstanceOf(List.class, mock.getReceivedExchanges().get(0).getIn().getBody()); + assertEquals(3, ((List) mock.getReceivedExchanges().get(0).getIn().getBody()).size()); + assertEquals(1, ((List) mock.getReceivedExchanges().get(2).getIn().getBody()).size()); + } + + @Test + void testStreamingWatermark() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:streaming-wm"); + mock.expectedMessageCount(5); + + template.sendBody("direct:streaming-wm", Arrays.asList("a", "b", "c", "d", "e")); + + mock.assertIsSatisfied(); + + assertEquals("4", store.get("streamJob")); + } + + @Test + void testStreamingWatermarkSecondRun() throws Exception { + store.put("streamJob", "2"); + + MockEndpoint mock = getMockEndpoint("mock:streaming-wm"); + mock.expectedMessageCount(2); + + template.sendBody("direct:streaming-wm", Arrays.asList("a", "b", "c", "d", "e")); + + mock.assertIsSatisfied(); + + assertEquals("d", mock.getReceivedExchanges().get(0).getIn().getBody(String.class)); + assertEquals("e", mock.getReceivedExchanges().get(1).getIn().getBody(String.class)); + assertEquals("4", store.get("streamJob")); + } + + @Test + void testStreamingParallelMaxFailedRecords() throws Exception { + // streaming + parallel + maxFailedRecords combination + MockEndpoint mock = getMockEndpoint("mock:streaming-parallel"); + mock.expectedMinimumMessageCount(0); + + Exchange result = template.send("direct:streaming-parallel", + e -> e.getIn().setBody(Arrays.asList("a", "FAIL", "b", "FAIL", "FAIL", "c"))); + + mock.assertIsSatisfied(); + + assertNotNull(result.getException(), "Should abort after 3 failures"); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult); + assertTrue(splitResult.isAborted()); + assertTrue(splitResult.getFailureCount() >= 3); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("direct:streaming") + .split(body()).streaming().maxFailedRecords(10) + .process(exchange -> { + if ("FAIL".equals(exchange.getIn().getBody(String.class))) { + throw new IllegalArgumentException("Simulated"); + } + }) + .to("mock:streaming"); + + from("direct:streaming-abort") + .split(body()).streaming().maxFailedRecords(2) + .process(exchange -> { + if ("FAIL".equals(exchange.getIn().getBody(String.class))) { + throw new IllegalArgumentException("Simulated"); + } + }) + .to("mock:streaming-abort"); + + from("direct:streaming-group") + .split(body()).streaming().group(3) + .to("mock:streaming-group"); + + from("direct:streaming-wm") + .split(body()).streaming().resumeStrategy(strategy, "streamJob") + .to("mock:streaming-wm"); + + from("direct:streaming-parallel") + .split(body()).streaming().parallelProcessing().maxFailedRecords(3) + .process(exchange -> { + if ("FAIL".equals(exchange.getIn().getBody(String.class))) { + throw new IllegalArgumentException("Simulated"); + } + }) + .to("mock:streaming-parallel"); + } + }; + } +} diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterTestResumeStrategy.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterTestResumeStrategy.java new file mode 100644 index 0000000000000..5771d8ca91859 --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterTestResumeStrategy.java @@ -0,0 +1,173 @@ +/* + * 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.processor; + +import java.util.Map; +import java.util.function.BiFunction; +import java.util.function.Function; + +import org.apache.camel.resume.Offset; +import org.apache.camel.resume.OffsetKey; +import org.apache.camel.resume.Resumable; +import org.apache.camel.resume.ResumeAdapter; +import org.apache.camel.resume.ResumeStrategy; +import org.apache.camel.resume.ResumeStrategyConfiguration; +import org.apache.camel.resume.cache.ResumeCache; + +/** + * A simple in-memory {@link ResumeStrategy} for Splitter watermark tests. Wraps a {@link Map} that tests can + * pre-populate and assert against. The cache is a live view backed by the store, so changes to the store are + * immediately visible. + */ +class SplitterTestResumeStrategy implements ResumeStrategy { + + private final Map store; + private final ResumeStrategyConfiguration config; + + SplitterTestResumeStrategy(Map store) { + this.store = store; + ResumeCache cache = new LiveStoreCache(store); + ResumeStrategyConfiguration cfg = new ResumeStrategyConfiguration() { + @Override + public String resumeStrategyService() { + return "test"; + } + }; + cfg.setResumeCache(cache); + this.config = cfg; + } + + @Override + public void loadCache() { + // no-op: cache is a live view of the store + } + + @Override + public void updateLastOffset(OffsetKey offsetKey, Offset offsetValue) { + store.put(offsetKey.getValue().toString(), offsetValue.getValue().toString()); + } + + @Override + public void updateLastOffset(T offset) { + // no-op + } + + @Override + public void updateLastOffset(T offset, UpdateCallBack updateCallBack) { + // no-op + } + + @Override + public void updateLastOffset(OffsetKey offsetKey, Offset offset, UpdateCallBack updateCallBack) + throws Exception { + updateLastOffset(offsetKey, offset); + } + + @Override + public void setAdapter(ResumeAdapter adapter) { + // no-op + } + + @Override + public ResumeAdapter getAdapter() { + return null; + } + + @Override + public void setResumeStrategyConfiguration(ResumeStrategyConfiguration resumeStrategyConfiguration) { + // no-op + } + + @Override + public ResumeStrategyConfiguration getResumeStrategyConfiguration() { + return config; + } + + @Override + public void start() { + // no-op + } + + @Override + public void stop() { + // no-op + } + + /** + * A {@link ResumeCache} that directly delegates to the backing store map, providing a live view. + */ + private static class LiveStoreCache implements ResumeCache { + private final Map store; + + LiveStoreCache(Map store) { + this.store = store; + } + + @Override + public Object get(Object key) { + return store.get(String.valueOf(key)); + } + + @Override + @SuppressWarnings("unchecked") + public T get(Object key, Class clazz) { + Object value = get(key); + return value != null ? clazz.cast(value) : null; + } + + @Override + public void add(Object key, Object offsetValue) { + store.put(String.valueOf(key), String.valueOf(offsetValue)); + } + + @Override + public boolean contains(Object key, Object entry) { + Object value = get(key); + return value != null && value.equals(entry); + } + + @Override + public Object computeIfAbsent(Object key, Function mapping) { + return store.computeIfAbsent(String.valueOf(key), k -> String.valueOf(mapping.apply(k))); + } + + @Override + public Object computeIfPresent(Object key, BiFunction remapping) { + return store.computeIfPresent(String.valueOf(key), + (k, v) -> String.valueOf(remapping.apply(k, v))); + } + + @Override + public boolean isFull() { + return false; + } + + @Override + public long capacity() { + return Integer.MAX_VALUE; + } + + @Override + public void forEach(BiFunction action) { + for (Map.Entry e : store.entrySet()) { + if (!action.apply(e.getKey(), e.getValue())) { + break; + } + } + } + } +} diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterTransactedTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterTransactedTest.java index 1bb78546bd9c8..8f5dab810e236 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterTransactedTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterTransactedTest.java @@ -26,6 +26,7 @@ import org.apache.camel.SplitResult; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.resume.ResumeStrategy; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -40,6 +41,7 @@ class SplitterTransactedTest extends ContextTestSupport { private final Map store = new ConcurrentHashMap<>(); + private final ResumeStrategy strategy = new SplitterTestResumeStrategy(store); @Test void testGroupTransacted() throws Exception { @@ -197,12 +199,12 @@ public void configure() { .to("mock:result"); from("direct:watermark") - .split(body()).watermarkStore(store, "txJob") + .split(body()).resumeStrategy(strategy, "txJob") .to("mock:watermark"); from("direct:valuewm") .split(body()) - .watermarkStore(store, "txDateJob") + .resumeStrategy(strategy, "txDateJob") .watermarkExpression("${body}") .to("mock:valuewm"); } diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterValidationTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterValidationTest.java new file mode 100644 index 0000000000000..d13ed1c7e2c04 --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterValidationTest.java @@ -0,0 +1,119 @@ +/* + * 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.processor; + +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.builder.RouteBuilder; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class SplitterValidationTest extends ContextTestSupport { + + @Test + void testErrorThresholdNegativeIsRejected() { + Exception e = assertThrows(Exception.class, () -> context.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:start") + .split(body()).errorThreshold(-0.1) + .to("mock:split"); + } + })); + assertTrue(findIllegalArgumentException(e, "errorThreshold")); + } + + @Test + void testErrorThresholdAboveOneIsRejected() { + Exception e = assertThrows(Exception.class, () -> context.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:start") + .split(body()).errorThreshold(1.5) + .to("mock:split"); + } + })); + assertTrue(findIllegalArgumentException(e, "errorThreshold")); + } + + @Test + void testMaxFailedRecordsNegativeIsRejected() { + Exception e = assertThrows(Exception.class, () -> context.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:start") + .split(body()).maxFailedRecords(-1) + .to("mock:split"); + } + })); + assertTrue(findIllegalArgumentException(e, "maxFailedRecords")); + } + + @Test + void testWatermarkKeyWithoutResumeStrategyIsRejected() { + Exception e = assertThrows(Exception.class, () -> context.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:start") + .split(body()).watermarkKey("someKey") + .to("mock:split"); + } + })); + assertTrue(findIllegalArgumentException(e, "resumeStrategy")); + } + + @Test + void testResumeStrategyWithoutKeyIsRejected() { + context.getRegistry().bind("myStrategy", + new SplitterTestResumeStrategy(new ConcurrentHashMap<>())); + Exception e = assertThrows(Exception.class, () -> context.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:start") + .split(body()).resumeStrategy("myStrategy") + .to("mock:split"); + } + })); + assertTrue(findIllegalArgumentException(e, "resumeStrategy")); + } + + @Test + void testWatermarkExpressionWithoutResumeStrategyIsRejected() { + Exception e = assertThrows(Exception.class, () -> context.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:start") + .split(body()).watermarkExpression("${body}") + .to("mock:split"); + } + })); + assertTrue(findIllegalArgumentException(e, "watermarkExpression")); + } + + private boolean findIllegalArgumentException(Throwable e, String keyword) { + while (e != null) { + if (e instanceof IllegalArgumentException && e.getMessage() != null && e.getMessage().contains(keyword)) { + return true; + } + e = e.getCause(); + } + return false; + } +} diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java index 81fee77d43a1f..6bb6bb779b64a 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java @@ -17,6 +17,7 @@ package org.apache.camel.processor; import java.util.Arrays; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -24,6 +25,7 @@ import org.apache.camel.Exchange; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.resume.ResumeStrategy; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -32,6 +34,7 @@ class SplitterWatermarkTest extends ContextTestSupport { private final Map store = new ConcurrentHashMap<>(); + private final ResumeStrategy strategy = new SplitterTestResumeStrategy(store); @Test void testIndexBasedWatermarkFirstRun() throws Exception { @@ -120,17 +123,81 @@ void testValueBasedWatermarkWithPreviousValue() throws Exception { assertEquals("2024-01-04", store.get("dateJob")); } + @Test + void testValueBasedWatermarkWithParallelProcessing() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:parallel-wm"); + mock.expectedMessageCount(5); + + template.sendBody("direct:parallel-value", + Arrays.asList("val-0", "val-1", "val-2", "val-3", "val-4")); + + mock.assertIsSatisfied(); + + // In parallel mode, the watermark should be from the highest-indexed item (val-4) + assertEquals("val-4", store.get("parallelJob")); + } + + @Test + void testIndexBasedWatermarkWithGroup() throws Exception { + // 10 items, group=3 → 4 chunks: [a,b,c], [d,e,f], [g,h,i], [j] + // Watermark should store "9" (last raw item index), not "3" (last chunk index) + MockEndpoint mock = getMockEndpoint("mock:group-wm"); + mock.expectedMessageCount(4); + + template.sendBody("direct:group-index", + Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j")); + + mock.assertIsSatisfied(); + + assertEquals("9", store.get("groupJob"), "Watermark should be last raw item index, not chunk index"); + } + + @Test + void testIndexBasedWatermarkWithGroupSecondRun() throws Exception { + // Pre-populate watermark at 4 → skip items 0-4 (a,b,c,d,e) + // Remaining: f,g,h,i,j → chunks [f,g,h], [i,j] + store.put("groupJob", "4"); + + MockEndpoint mock = getMockEndpoint("mock:group-wm"); + mock.expectedMessageCount(2); + + template.sendBody("direct:group-index", + Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j")); + + mock.assertIsSatisfied(); + + // first chunk should be [f,g,h] + List firstChunk = mock.getReceivedExchanges().get(0).getIn().getBody(List.class); + assertEquals(Arrays.asList("f", "g", "h"), firstChunk); + + // watermark updated to 9 (last raw item index) + assertEquals("9", store.get("groupJob")); + } + + @Test + void testIndexBasedWatermarkWithParallelProcessing() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:parallel-idx"); + mock.expectedMessageCount(5); + + template.sendBody("direct:parallel-index", + Arrays.asList("a", "b", "c", "d", "e")); + + mock.assertIsSatisfied(); + + assertEquals("4", store.get("parallelIdxJob")); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @Override public void configure() { from("direct:index") - .split(body()).watermarkStore(store, "testJob") + .split(body()).resumeStrategy(strategy, "testJob") .to("mock:split"); from("direct:index-abort") - .split(body()).watermarkStore(store, "testJob2").maxFailedRecords(1) + .split(body()).resumeStrategy(strategy, "testJob2").maxFailedRecords(1) .process(exchange -> { String body = exchange.getIn().getBody(String.class); if ("FAIL".equals(body)) { @@ -141,9 +208,24 @@ public void configure() { from("direct:value") .split(body()) - .watermarkStore(store, "dateJob") + .resumeStrategy(strategy, "dateJob") .watermarkExpression("${body}") .to("mock:split3"); + + from("direct:group-index") + .split(body()).group(3).resumeStrategy(strategy, "groupJob") + .to("mock:group-wm"); + + from("direct:parallel-value") + .split(body()).parallelProcessing() + .resumeStrategy(strategy, "parallelJob") + .watermarkExpression("${body}") + .to("mock:parallel-wm"); + + from("direct:parallel-index") + .split(body()).parallelProcessing() + .resumeStrategy(strategy, "parallelIdxJob") + .to("mock:parallel-idx"); } }; } diff --git a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_19.adoc b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_19.adoc index 5e4a331e40662..a7463df7cb3d7 100644 --- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_19.adoc +++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_19.adoc @@ -54,6 +54,27 @@ uses `InOnly` pattern. Removed 2 deprecated methods in Java DSL for `throttler` EIP. +==== Split EIP enhancements + +The Split EIP has been enhanced with the following new features: + +* **Chunking with `group`**: Groups N split items together into a single message with a `java.util.List` body, + allowing batch processing of split items. +* **Error thresholds**: Two new options `maxFailedRecords` (max failure count) and `errorThreshold` + (max failure ratio 0.0-1.0) allow the splitter to continue through individual failures while stopping + when error rates become unacceptable. These are mutually exclusive with `stopOnException`. +* **SplitResult**: When error thresholds are configured, a `SplitResult` object is available as the + `CamelSplitResult` exchange property after the split completes, providing total items, success/failure + counts, and individual failure details (index and exception). +* **Watermark tracking**: New options `resumeStrategy`, `watermarkKey`, and `watermarkExpression` enable + incremental processing using Camel's `ResumeStrategy` SPI to track progress. Index-based watermarking + automatically skips previously processed items; value-based watermarking uses a custom expression + to extract watermark values. The previous watermark value is exposed as the `CamelSplitWatermark` + exchange property. Any `ResumeStrategy` implementation can be used — from in-memory for testing to + Kafka-backed for production. + +See the xref:components:eips:split-eip.adoc[Split EIP] documentation for details and examples. + ==== ErrorRegistry A new `ErrorRegistry` SPI has been added to `CamelContext` for capturing routing errors. diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java index 8109b3440f0b2..295f2c45d98e3 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java @@ -16843,6 +16843,7 @@ protected boolean setProperty(SpELExpression target, String propertyKey, @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the org.apache.camel.Exchange to be sent. This can be used to deep-clone messages that should be sent, or any custom logic needed before the exchange is sent.", displayName = "On Prepare"), @YamlProperty(name = "parallelAggregate", type = "boolean", deprecated = true, defaultValue = "false", description = "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe.", displayName = "Parallel Aggregate"), @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then processing each split messages occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. It's only processing the sub messages from the splitter which happens concurrently. When parallel processing is enabled, then the Camel routing engin will continue processing using last used thread from the parallel thread pool. However, if you want to use the original thread that called the splitter, then make sure to enable the synchronous option as well. In parallel processing mode, you may want to also synchronous = true to force this EIP to process the sub-tasks using the upper bounds of the thread-pool. If using synchronous = false then Camel will allow its reactive routing engine to use as many threads as possible, which may be available due to sub-tasks using other thread-pools such as CompletableFuture.runAsync or others.", displayName = "Parallel Processing"), + @YamlProperty(name = "resumeStrategy", type = "string", description = "Sets a reference to a ResumeStrategy in the registry for resume-from-last-position support.", displayName = "Resume Strategy"), @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Splitter will by default not share unit of work between the parent exchange and each split exchange. This means each split exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the splitter will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The default behavior is to not stop but continue processing till the end", displayName = "Stop On Exception"), @@ -16850,8 +16851,7 @@ protected boolean setProperty(SpELExpression target, String propertyKey, @YamlProperty(name = "synchronous", type = "boolean", defaultValue = "false", description = "Sets whether synchronous processing should be strictly used. When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled.", displayName = "Synchronous"), @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Sets a total timeout specified in millis, when using parallel processing. If the Splitter hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Splitter breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care.", displayName = "Timeout"), @YamlProperty(name = "watermarkExpression", type = "string", description = "Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value.", displayName = "Watermark Expression"), - @YamlProperty(name = "watermarkKey", type = "string", description = "Sets the key to use in the watermark store.", displayName = "Watermark Key"), - @YamlProperty(name = "watermarkStore", type = "string", description = "Sets a reference to a watermark store (a Map ) in the registry.", displayName = "Watermark Store") + @YamlProperty(name = "watermarkKey", type = "string", description = "Sets the key to use in the watermark store.", displayName = "Watermark Key") } ) public static class SplitDefinitionDeserializer extends YamlDeserializerBase { @@ -16934,6 +16934,11 @@ protected boolean setProperty(SplitDefinition target, String propertyKey, target.setParallelProcessing(val); break; } + case "resumeStrategy": { + String val = asText(node); + target.setResumeStrategy(val); + break; + } case "shareUnitOfWork": { String val = asText(node); target.setShareUnitOfWork(val); @@ -16969,11 +16974,6 @@ protected boolean setProperty(SplitDefinition target, String propertyKey, target.setWatermarkKey(val); break; } - case "watermarkStore": { - String val = asText(node); - target.setWatermarkStore(val); - break; - } case "id": { String val = asText(node); target.setId(val); From ef5696d478f81ad137b7794ef5b92e06a6e4eedb Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Sat, 28 Mar 2026 10:29:06 +0100 Subject: [PATCH 08/14] CAMEL-23264: Improve javadoc, logging, and docs for Splitter enhancements - Clarify SplitResult.totalItems counts chunks (not individual items) when group() is used - Add LOG.debug in readFromStrategyCache() catch block for debuggability - Document that custom AggregationStrategy won't see individual item exceptions when error thresholds are configured (exceptions cleared after recording) - Update SplitResult code example to note chunk counting with group() Co-Authored-By: Claude Opus 4.6 --- .../src/main/java/org/apache/camel/SplitResult.java | 3 ++- .../src/main/docs/modules/eips/pages/split-eip.adoc | 6 +++++- .../src/main/java/org/apache/camel/processor/Splitter.java | 7 ++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/SplitResult.java b/core/camel-api/src/main/java/org/apache/camel/SplitResult.java index a859e7d8b8461..b04b06acae827 100644 --- a/core/camel-api/src/main/java/org/apache/camel/SplitResult.java +++ b/core/camel-api/src/main/java/org/apache/camel/SplitResult.java @@ -49,7 +49,8 @@ public SplitResult(int totalItems, int failureCount, List failures, boo } /** - * The total number of items that were prepared for splitting. + * The total number of items that were prepared for splitting. When {@code group()} is used, this counts the number + * of chunks (groups), not the number of individual elements within them. */ public int getTotalItems() { return totalItems; diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc index d055e80990cb8..d69500c1e42ef 100644 --- a/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc +++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc @@ -1261,6 +1261,10 @@ threshold is exceeded. IMPORTANT: The `stopOnException` option is mutually exclusive with `maxFailedRecords` and `errorThreshold`. You cannot use `stopOnException` together with either of these options. +NOTE: When error thresholds are configured, individual item exceptions are cleared from sub-exchanges +after being recorded in the `SplitResult`. This means a custom `AggregationStrategy` will not see +individual item exceptions — use the `SplitResult` exchange property to access failure details instead. + NOTE: When using `errorThreshold` with `parallelProcessing`, the failure ratio may vary slightly between runs because the ratio is calculated as failures are reported, and the order in which parallel items complete is non-deterministic. For deterministic abort behavior with parallel @@ -1279,7 +1283,7 @@ Exchange result = template.send("direct:start", SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); if (splitResult != null) { - int total = splitResult.getTotalItems(); // total items processed + int total = splitResult.getTotalItems(); // total items (or chunks when group() is used) int success = splitResult.getSuccessCount(); // successful items int failures = splitResult.getFailureCount(); // failed items boolean aborted = splitResult.isAborted(); // true if a threshold was exceeded diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java index 8cda2374b9849..6af230fc3b69d 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java @@ -56,6 +56,8 @@ import org.apache.camel.support.service.ServiceHelper; import org.apache.camel.util.IOHelper; import org.apache.camel.util.StringHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import static org.apache.camel.util.ObjectHelper.notNull; @@ -65,6 +67,8 @@ */ public class Splitter extends MulticastProcessor { + private static final Logger LOG = LoggerFactory.getLogger(Splitter.class); + private static final String IGNORE_DELIMITER_MARKER = "false"; private static final String SINGLE_DELIMITER_MARKER = "single"; private static final String SPLIT_FAILURE_TRACKER = "CamelSplitFailureTracker"; @@ -168,7 +172,8 @@ private String readFromStrategyCache() { } } } catch (Exception e) { - // best-effort + LOG.debug("Failed to read watermark from resume strategy cache for key '{}': {}", + watermarkKey, e.getMessage(), e); } return null; } From 0d9b5178351c5bed455310d9e2361db7fadb44d3 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Sat, 28 Mar 2026 10:52:24 +0100 Subject: [PATCH 09/14] =?UTF-8?q?CAMEL-23264:=20Regenerate=20generated=20f?= =?UTF-8?q?iles=20for=20watermarkStore=E2=86=92resumeStrategy=20rename?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix stale watermarkStore references in XSD schemas, ModelParser, and ModelWriter files that were generated before the field was renamed to resumeStrategy. Co-Authored-By: Claude Opus 4.6 --- .../org/apache/camel/catalog/schemas/camel-spring.xsd | 4 ++-- .../org/apache/camel/catalog/schemas/camel-xml-io.xsd | 4 ++-- .../generated/java/org/apache/camel/xml/in/ModelParser.java | 2 +- .../generated/java/org/apache/camel/xml/out/ModelWriter.java | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) 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 515c0bd907eda..c776a04dac6e4 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 @@ -13294,11 +13294,11 @@ Sets the maximum number of failed records before aborting the split operation. - + 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 4000296274333..af9e1c317e4a8 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 @@ -12437,11 +12437,11 @@ Sets the maximum number of failed records before aborting the split operation. - + diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java index dfea852d6560b..c54e2fd73f631 100644 --- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java +++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java @@ -1147,6 +1147,7 @@ protected SplitDefinition doParseSplitDefinition() throws IOException, XmlPullPa case "onPrepare": def.setOnPrepare(val); yield true; case "parallelAggregate": def.setParallelAggregate(val); yield true; case "parallelProcessing": def.setParallelProcessing(val); yield true; + case "resumeStrategy": def.setResumeStrategy(val); yield true; case "shareUnitOfWork": def.setShareUnitOfWork(val); yield true; case "stopOnException": def.setStopOnException(val); yield true; case "streaming": def.setStreaming(val); yield true; @@ -1154,7 +1155,6 @@ protected SplitDefinition doParseSplitDefinition() throws IOException, XmlPullPa case "timeout": def.setTimeout(val); yield true; case "watermarkExpression": def.setWatermarkExpression(val); yield true; case "watermarkKey": def.setWatermarkKey(val); yield true; - case "watermarkStore": def.setWatermarkStore(val); yield true; default: yield processorDefinitionAttributeHandler().accept(def, key, val); }, outputExpressionNodeElementHandler(), noValueHandler()); } diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java index 5167520f02a97..01cb827aa25ab 100644 --- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java +++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java @@ -1772,7 +1772,7 @@ protected void doWriteSplitDefinition(String name, SplitDefinition def) throws I doWriteAttribute("group", def.getGroup(), null); doWriteAttribute("errorThreshold", def.getErrorThreshold(), null); doWriteAttribute("maxFailedRecords", def.getMaxFailedRecords(), null); - doWriteAttribute("watermarkStore", def.getWatermarkStore(), null); + doWriteAttribute("resumeStrategy", def.getResumeStrategy(), null); doWriteAttribute("watermarkKey", def.getWatermarkKey(), null); doWriteAttribute("watermarkExpression", def.getWatermarkExpression(), null); doWriteOutputExpressionNodeElements(def); From acb75d0b2f6312da4496f1dc49c016bf2f5e2d4e Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Mon, 6 Apr 2026 03:22:58 +0200 Subject: [PATCH 10/14] CAMEL-23264: Reduce cognitive complexity and improve test coverage for Splitter enhancements - Extract setupFailureTracking(), setupWatermarkTracking(), wrapCallback() from Splitter.process() - Extract configureErrorThreshold(), configureWatermark() from SplitReifier.createProcessor() - Add tests: SplitResult.toString(), null failures constructor, empty input, Failure record - Add tests: watermark expression returning null, all items failing, combined errorThreshold+watermark - Add tests: empty input with watermark, single item, value watermark no-update-on-abort - Add tests: error threshold boundary values, exact boundary, empty input Co-Authored-By: Claude Opus 4.6 --- .../org/apache/camel/processor/Splitter.java | 47 +++--- .../apache/camel/reifier/SplitReifier.java | 12 +- .../processor/SplitterErrorThresholdTest.java | 80 ++++++++++ .../processor/SplitterSplitResultTest.java | 60 +++++++ .../processor/SplitterWatermarkTest.java | 147 ++++++++++++++++++ 5 files changed, 323 insertions(+), 23 deletions(-) diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java index 6af230fc3b69d..13d8d70170c42 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java @@ -207,40 +207,49 @@ public boolean process(Exchange exchange, final AsyncCallback callback) { setAggregationStrategyOnExchange(exchange, original); } - // create failure tracker if error thresholds are configured + boolean hasErrorThreshold = setupFailureTracking(exchange); + boolean hasWatermark = setupWatermarkTracking(exchange); + AsyncCallback wrappedCallback = wrapCallback(callback, exchange, hasErrorThreshold, hasWatermark); + + return super.process(exchange, wrappedCallback); + } + + private boolean setupFailureTracking(Exchange exchange) { boolean hasErrorThreshold = errorThreshold > 0 || maxFailedRecords > 0; if (hasErrorThreshold) { exchange.setProperty(SPLIT_FAILURE_TRACKER, new SplitFailureTracker()); } + return hasErrorThreshold; + } - // set current watermark value as exchange property before processing + private boolean setupWatermarkTracking(Exchange exchange) { boolean hasWatermark = resumeStrategy != null && watermarkKey != null; if (hasWatermark) { String currentWatermark = readCurrentWatermark(); if (currentWatermark != null) { exchange.setProperty(Exchange.SPLIT_WATERMARK, currentWatermark); } - // pre-initialize AtomicReference for value-based watermark tracking (thread-safe) if (watermarkExpression != null) { exchange.setProperty(SPLIT_WATERMARK_LATEST, new AtomicReference()); } } + return hasWatermark; + } - // wrap callback to build SplitResult and/or update watermark after all items are processed - boolean needsWrapping = hasErrorThreshold || hasWatermark; - AsyncCallback wrappedCallback = needsWrapping - ? doneSync -> { - if (hasErrorThreshold) { - buildSplitResult(exchange); - } - if (hasWatermark) { - updateWatermark(exchange); - } - callback.done(doneSync); - } - : callback; - - return super.process(exchange, wrappedCallback); + private AsyncCallback wrapCallback( + AsyncCallback callback, Exchange exchange, boolean hasErrorThreshold, boolean hasWatermark) { + if (!hasErrorThreshold && !hasWatermark) { + return callback; + } + return doneSync -> { + if (hasErrorThreshold) { + buildSplitResult(exchange); + } + if (hasWatermark) { + updateWatermark(exchange); + } + callback.done(doneSync); + }; } @Override @@ -289,7 +298,6 @@ private final class SplitterIterable implements Iterable, private Exchange copy; private final Route route; private final Exchange original; - private final int watermarkOffset; // tracks individual (raw) item count, independent of grouping private final AtomicInteger rawItemCount = new AtomicInteger(); @@ -323,7 +331,6 @@ private SplitterIterable(Exchange exchange, Object value) { } } } - this.watermarkOffset = skipCount; if (skipCount > 0) { exchange.setProperty(SPLIT_WATERMARK_OFFSET, skipCount); } diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java index c742409f09ed5..8584cbff46ee2 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java @@ -85,6 +85,13 @@ public Processor createProcessor() throws Exception { answer.setGroup(group); } + configureErrorThreshold(answer, isStopOnException); + configureWatermark(answer); + + return answer; + } + + private void configureErrorThreshold(Splitter answer, boolean isStopOnException) { String etStr = parseString(definition.getErrorThreshold()); double errorThreshold = etStr != null ? Double.parseDouble(etStr) : 0; int maxFailedRecords = parseInt(definition.getMaxFailedRecords(), 0); @@ -107,7 +114,9 @@ public Processor createProcessor() throws Exception { if (maxFailedRecords > 0) { answer.setMaxFailedRecords(maxFailedRecords); } + } + private void configureWatermark(Splitter answer) { ResumeStrategy resumeStrategy = definition.getResumeStrategyBean(); if (resumeStrategy == null && definition.getResumeStrategy() != null) { resumeStrategy = mandatoryLookup(definition.getResumeStrategy(), ResumeStrategy.class); @@ -117,7 +126,6 @@ public Processor createProcessor() throws Exception { } String watermarkKey = parseString(definition.getWatermarkKey()); String watermarkExprStr = parseString(definition.getWatermarkExpression()); - // validate watermark configuration completeness if ((resumeStrategy != null) != (watermarkKey != null)) { throw new IllegalArgumentException( "Both resumeStrategy and watermarkKey must be configured together on the Splitter EIP"); @@ -134,8 +142,6 @@ public Processor createProcessor() throws Exception { answer.setWatermarkExpression(watermarkExpr); } } - - return answer; } private AggregationStrategy createAggregationStrategy() { diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterErrorThresholdTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterErrorThresholdTest.java index 76d07fb74b743..48da1eec0dede 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterErrorThresholdTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterErrorThresholdTest.java @@ -17,14 +17,19 @@ package org.apache.camel.processor; import java.util.Arrays; +import java.util.Collections; import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; +import org.apache.camel.SplitResult; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; class SplitterErrorThresholdTest extends ContextTestSupport { @@ -118,6 +123,71 @@ void testCombinedErrorThresholdAndMaxFailedRecords() throws Exception { assertNotNull(result.getException(), "Should stop when errorThreshold exceeded even with high maxFailedRecords"); } + @Test + void testErrorThresholdEmptyInput() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMessageCount(0); + + Exchange result = template.send("direct:start", + e -> e.getIn().setBody(Collections.emptyList())); + + mock.assertIsSatisfied(); + + // SplitResult should be set even with empty input + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult); + assertEquals(0, splitResult.getTotalItems()); + assertEquals(0, splitResult.getFailureCount()); + assertFalse(splitResult.isAborted()); + } + + @Test + void testErrorThresholdExactBoundary() throws Exception { + // items: a, FAIL, b, c — errorThreshold=0.5 + // item 0: a ok + // item 1: FAIL → failCount=1, ratio=1/2=50% ≥ 50% → stop + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMinimumMessageCount(0); + + Exchange result = template.send("direct:start", + e -> e.getIn().setBody(Arrays.asList("a", "FAIL", "b", "c"))); + + mock.assertIsSatisfied(); + + assertNotNull(result.getException(), "Should stop at exact boundary (ratio == threshold)"); + } + + @Test + void testErrorThresholdJustBelowBoundary() throws Exception { + // items: a, b, FAIL, d — errorThreshold=0.5 + // item 0: a ok, item 1: b ok + // item 2: FAIL → failCount=1, ratio=1/3=33% < 50% → continue + // item 3: d ok + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMessageCount(3); // a, b, d succeed + + Exchange result = template.send("direct:start", + e -> e.getIn().setBody(Arrays.asList("a", "b", "FAIL", "d"))); + + mock.assertIsSatisfied(); + assertNull(result.getException(), "Should not stop when ratio is below threshold"); + } + + @Test + void testMaxFailedRecordsExactBoundary() throws Exception { + // maxFailedRecords=2, items: a, FAIL, b, FAIL, c + // fail #1 at index 1 (count=1 < 2 → continue) + // fail #2 at index 3 (count=2 >= 2 → stop) + MockEndpoint mock = getMockEndpoint("mock:maxfail"); + mock.expectedMinimumMessageCount(2); // at least a, b + + Exchange result = template.send("direct:maxfail", + e -> e.getIn().setBody(Arrays.asList("a", "FAIL", "b", "FAIL", "c"))); + + mock.assertIsSatisfied(); + assertNotNull(result.getException(), "Should stop at exact maxFailedRecords boundary"); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -152,6 +222,16 @@ public void configure() { } }) .to("mock:combined"); + + from("direct:maxfail") + .split(body()).maxFailedRecords(2) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure for: " + body); + } + }) + .to("mock:maxfail"); } }; } diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterSplitResultTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterSplitResultTest.java index c15b5440b39c8..d6603f6f30219 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterSplitResultTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterSplitResultTest.java @@ -17,6 +17,7 @@ package org.apache.camel.processor; import java.util.Arrays; +import java.util.Collections; import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; @@ -106,6 +107,65 @@ void testSplitResultWithParallelProcessing() throws Exception { assertFalse(splitResult.isAborted()); } + @Test + void testSplitResultToString() throws Exception { + Exchange result = template.send("direct:tolerant", + e -> e.getIn().setBody(Arrays.asList("a", "FAIL", "b", "c"))); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult); + + String str = splitResult.toString(); + assertTrue(str.contains("total=4"), "toString should contain total: " + str); + assertTrue(str.contains("success=3"), "toString should contain success: " + str); + assertTrue(str.contains("failures=1"), "toString should contain failures: " + str); + assertTrue(str.contains("aborted=false"), "toString should contain aborted: " + str); + } + + @Test + void testSplitResultToStringWhenAborted() throws Exception { + Exchange result = template.send("direct:strict", + e -> e.getIn().setBody(Arrays.asList("FAIL", "FAIL", "a"))); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult); + + String str = splitResult.toString(); + assertTrue(str.contains("aborted=true"), "toString should contain aborted=true: " + str); + } + + @Test + void testSplitResultConstructorWithNullFailures() { + SplitResult result = new SplitResult(5, 0, null, false); + assertEquals(5, result.getTotalItems()); + assertEquals(0, result.getFailureCount()); + assertEquals(5, result.getSuccessCount()); + assertFalse(result.isAborted()); + assertNotNull(result.getFailures()); + assertTrue(result.getFailures().isEmpty()); + } + + @Test + void testSplitResultEmptyInput() throws Exception { + Exchange result = template.send("direct:tolerant", + e -> e.getIn().setBody(Collections.emptyList())); + + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult, "SplitResult should be set even with empty input"); + assertEquals(0, splitResult.getTotalItems()); + assertEquals(0, splitResult.getFailureCount()); + assertEquals(0, splitResult.getSuccessCount()); + assertFalse(splitResult.isAborted()); + } + + @Test + void testSplitResultFailureRecord() { + Exception cause = new IllegalArgumentException("test error"); + SplitResult.Failure failure = new SplitResult.Failure(3, cause); + assertEquals(3, failure.index()); + assertEquals(cause, failure.exception()); + } + @Test void testNoSplitResultWithoutErrorThreshold() throws Exception { // plain split without error threshold should not set SplitResult diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java index 6bb6bb779b64a..c5b7fe370ee6b 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java @@ -17,18 +17,22 @@ package org.apache.camel.processor; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; +import org.apache.camel.SplitResult; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.resume.ResumeStrategy; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; class SplitterWatermarkTest extends ContextTestSupport { @@ -187,6 +191,101 @@ void testIndexBasedWatermarkWithParallelProcessing() throws Exception { assertEquals("4", store.get("parallelIdxJob")); } + @Test + void testValueBasedWatermarkExpressionReturnsNull() throws Exception { + // watermarkExpression=${header.wm} — some items won't have the header, so expression returns null + MockEndpoint mock = getMockEndpoint("mock:null-expr"); + mock.expectedMessageCount(3); + + template.sendBody("direct:null-expr", Arrays.asList("a", "b", "c")); + + mock.assertIsSatisfied(); + + // only items where the header is set contribute to the watermark + // the processor sets the header only for "b", so watermark should be "wm-b" + assertEquals("wm-b", store.get("nullExprJob")); + } + + @Test + void testValueBasedWatermarkAllItemsFail() throws Exception { + // all items fail → no watermark expression evaluated → latestRef stays null → no watermark persisted + MockEndpoint mock = getMockEndpoint("mock:all-fail-wm"); + mock.expectedMessageCount(0); + + Exchange result = template.send("direct:all-fail-wm", + e -> e.getIn().setBody(Arrays.asList("FAIL", "FAIL", "FAIL"))); + + mock.assertIsSatisfied(); + + // watermark should NOT be persisted (all items failed) + assertNull(store.get("allFailJob"), "Watermark should not be persisted when all items fail"); + } + + @Test + void testCombinedErrorThresholdAndWatermark() throws Exception { + // both errorThreshold and watermark together + MockEndpoint mock = getMockEndpoint("mock:combined-wm"); + mock.expectedMessageCount(4); + + Exchange result = template.send("direct:combined-wm", + e -> e.getIn().setBody(Arrays.asList("a", "FAIL", "b", "c", "d"))); + + mock.assertIsSatisfied(); + + // watermark should be updated (processing succeeded overall) + assertEquals("4", store.get("combinedJob")); + + // SplitResult should be set (errorThreshold is configured) + SplitResult splitResult = result.getProperty(Exchange.SPLIT_RESULT, SplitResult.class); + assertNotNull(splitResult); + assertEquals(5, splitResult.getTotalItems()); + assertEquals(1, splitResult.getFailureCount()); + assertFalse(splitResult.isAborted()); + } + + @Test + void testIndexBasedWatermarkEmptyInput() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMessageCount(0); + + template.sendBody("direct:index", Collections.emptyList()); + + mock.assertIsSatisfied(); + + // no items processed, watermark should not be set + assertNull(store.get("testJob"), "Watermark should not be set for empty input"); + } + + @Test + void testIndexBasedWatermarkFirstRunSingleItem() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:split"); + mock.expectedMessageCount(1); + + template.sendBody("direct:index", List.of("only")); + + mock.assertIsSatisfied(); + + assertEquals("0", store.get("testJob"), "Watermark should be 0 for single item"); + } + + @Test + void testValueBasedWatermarkNoUpdateOnAbort() throws Exception { + // value-based watermark should NOT update when processing is aborted + store.put("abortValJob", "previous"); + + MockEndpoint mock = getMockEndpoint("mock:abort-val-wm"); + mock.expectedMinimumMessageCount(0); + + template.send("direct:abort-val-wm", + e -> e.getIn().setBody(Arrays.asList("FAIL", "FAIL", "a"))); + + mock.assertIsSatisfied(); + + // watermark should retain its previous value + assertEquals("previous", store.get("abortValJob"), + "Watermark should not be updated when processing is aborted"); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -226,6 +325,54 @@ public void configure() { .split(body()).parallelProcessing() .resumeStrategy(strategy, "parallelIdxJob") .to("mock:parallel-idx"); + + from("direct:null-expr") + .split(body()) + .resumeStrategy(strategy, "nullExprJob") + .watermarkExpression("${header.wm}") + .process(exchange -> { + // only set the watermark header for specific items + String body = exchange.getIn().getBody(String.class); + if ("b".equals(body)) { + exchange.getIn().setHeader("wm", "wm-b"); + } + }) + .to("mock:null-expr"); + + from("direct:all-fail-wm") + .split(body()) + .resumeStrategy(strategy, "allFailJob") + .watermarkExpression("${body}") + .maxFailedRecords(10) + .process(exchange -> { + throw new IllegalArgumentException("All fail"); + }) + .to("mock:all-fail-wm"); + + from("direct:combined-wm") + .split(body()) + .resumeStrategy(strategy, "combinedJob") + .maxFailedRecords(5) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated"); + } + }) + .to("mock:combined-wm"); + + from("direct:abort-val-wm") + .split(body()) + .resumeStrategy(strategy, "abortValJob") + .watermarkExpression("${body}") + .maxFailedRecords(2) + .process(exchange -> { + String body = exchange.getIn().getBody(String.class); + if ("FAIL".equals(body)) { + throw new IllegalArgumentException("Simulated failure"); + } + }) + .to("mock:abort-val-wm"); } }; } From 45a2636917679eae37cfc4168c4e764f91ac831d Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Mon, 6 Apr 2026 09:25:53 +0200 Subject: [PATCH 11/14] CAMEL-23264: Remove unused local variable flagged by SonarCloud Co-Authored-By: Claude Opus 4.6 --- .../java/org/apache/camel/processor/SplitterWatermarkTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java index c5b7fe370ee6b..490571ff3a22c 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWatermarkTest.java @@ -212,7 +212,7 @@ void testValueBasedWatermarkAllItemsFail() throws Exception { MockEndpoint mock = getMockEndpoint("mock:all-fail-wm"); mock.expectedMessageCount(0); - Exchange result = template.send("direct:all-fail-wm", + template.send("direct:all-fail-wm", e -> e.getIn().setBody(Arrays.asList("FAIL", "FAIL", "FAIL"))); mock.assertIsSatisfied(); From b236a59d79174648f57a61e16682719829b1db5d Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 2 Jul 2026 11:35:25 +0000 Subject: [PATCH 12/14] CAMEL-23264: Address review feedback - remove upgrade guide, add @since tags, regenerate - Remove Split EIP section from upgrade guide (davsclaus: new features don't belong in the upgrade guide, only migration info) - Add @since 4.21 to SplitResult class and Failure record (oscerd) - Regenerate all downstream artifacts after rebase onto latest main Co-Authored-By: Claude Opus 4.6 --- .../apache/camel/catalog/models/split.json | 49 +- .../camel/catalog/schemas/camel-spring.xsd | 17 +- .../camel/catalog/schemas/camel-xml-io.xsd | 17 +- .../camel/ExchangeConstantProvider.java | 16 +- .../java/org/apache/camel/SplitResult.java | 3 + .../org/apache/camel/model/split.json | 49 +- .../camel/yaml/out/YamlModelWriter.java | 6 + .../pages/camel-4x-upgrade-guide-4_19.adoc | 21 - .../deserializers/ModelDeserializers.java | 3275 +++++++++-------- 9 files changed, 1799 insertions(+), 1654 deletions(-) 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 5ab3ad27f8378..bcb4808a3b8cb 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 @@ -3,40 +3,41 @@ "kind": "model", "name": "split", "title": "Split", - "description": "Splits a single message into many sub-messages.", + "description": "Splits a message into multiple sub-messages using an expression, and processes each one individually. Supports parallel processing and result aggregation.", "deprecated": false, - "label": "eip,routing", + "label": "aggregate,eip,routing", "javaType": "org.apache.camel.model.SplitDefinition", + "aliases": [ "split", "chunk" ], "abstract": false, "input": true, "output": true }, "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": "Sets 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": "Sets the note of 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": "Sets the description of 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", "csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "java", "joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Expression of how to split the message body, such as as-is, using a tokenizer, or using a xpath." }, - "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, this can be needed in some special situations. 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": "Sets a reference to the AggregationStrategy to be used to assemble the replies from the split messages, into a single outgoing message from the Splitter. By default Camel will use the original incoming message to the splitter (leave it unchanged). You can also use a POJO as the AggregationStrategy" }, - "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 explicit declare the method name to use, when using POJOs as the AggregationStrategy." }, - "aggregationStrategyMethodAllowNull": { "index": 8, "kind": "attribute", "displayName": "Aggregation Strategy Method Allow Null", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy" }, + "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" }, + "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", "csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "java", "joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "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." }, + "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." }, + "aggregationStrategyMethodAllowNull": { "index": 8, "kind": "attribute", "displayName": "Aggregation Strategy Method Allow Null", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If true then null is used as the oldExchange when there is no data to aggregate, when using POJOs as the AggregationStrategy." }, "parallelAggregate": { "index": 9, "kind": "attribute", "displayName": "Parallel Aggregate", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": true, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe." }, - "parallelProcessing": { "index": 10, "kind": "attribute", "displayName": "Parallel Processing", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then processing each split messages occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. It's only processing the sub messages from the splitter which happens concurrently. When parallel processing is enabled, then the Camel routing engin will continue processing using last used thread from the parallel thread pool. However, if you want to use the original thread that called the splitter, then make sure to enable the synchronous option as well. In parallel processing mode, you may want to also synchronous = true to force this EIP to process the sub-tasks using the upper bounds of the thread-pool. If using synchronous = false then Camel will allow its reactive routing engine to use as many threads as possible, which may be available due to sub-tasks using other thread-pools such as CompletableFuture.runAsync or others." }, - "synchronous": { "index": 11, "kind": "attribute", "displayName": "Synchronous", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether synchronous processing should be strictly used. When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled." }, - "streaming": { "index": 12, "kind": "attribute", "displayName": "Streaming", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "When in streaming mode, then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter do not split all the messages first, but then we do not know the total size, and therefore the org.apache.camel.Exchange#SPLIT_SIZE is empty. In non-streaming mode (default) the splitter will split each message first, to know the total size, and then process each message one by one. This requires to keep all the split messages in memory and therefore requires more memory. The total size is provided in the org.apache.camel.Exchange#SPLIT_SIZE header. The streaming mode also affects the aggregation behavior. If enabled then Camel will process replies out-of-order, e.g. in the order they come back. If disabled, Camel will process replies in the same order as the messages was split." }, - "stopOnException": { "index": 13, "kind": "attribute", "displayName": "Stop On Exception", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the splitter will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The default behavior is to not stop but continue processing till the end" }, - "timeout": { "index": 14, "kind": "attribute", "displayName": "Timeout", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "0", "description": "Sets a total timeout specified in millis, when using parallel processing. If the Splitter hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Splitter breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care." }, - "executorService": { "index": 15, "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 to be used for parallel processing. Notice if you set this option, then parallel processing is automatically implied, and you do not have to enable that option as well." }, - "onPrepare": { "index": 16, "kind": "attribute", "displayName": "On Prepare", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Uses the Processor when preparing the org.apache.camel.Exchange to be sent. This can be used to deep-clone messages that should be sent, or any custom logic needed before the exchange is sent." }, - "shareUnitOfWork": { "index": 17, "kind": "attribute", "displayName": "Share Unit Of Work", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Splitter will by default not share unit of work between the parent exchange and each split exchange. This means each split exchange has its own individual unit of work." }, + "parallelProcessing": { "index": 10, "kind": "attribute", "displayName": "Parallel Processing", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then processing each split message occurs concurrently. The caller thread still waits until all messages are fully processed before it continues." }, + "synchronous": { "index": 11, "kind": "attribute", "displayName": "Synchronous", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled." }, + "streaming": { "index": 12, "kind": "attribute", "displayName": "Streaming", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "When enabled then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter does not split all messages first." }, + "stopOnException": { "index": 13, "kind": "attribute", "displayName": "Stop On Exception", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then stops further split processing if an exception or failure occurred during processing of a split message, and the caused exception will be thrown. The default behavior is to not stop but continue processing till the end." }, + "timeout": { "index": 14, "kind": "attribute", "displayName": "Timeout", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "0", "description": "Total timeout in millis when using parallel processing. If the splitter has not been able to process all replies within the given timeframe, then the timeout triggers and the splitter breaks out and continues." }, + "executorService": { "index": 15, "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": "Reference to a custom thread pool to use for parallel processing. Setting this option implies parallel processing." }, + "onPrepare": { "index": 16, "kind": "attribute", "displayName": "On Prepare", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Reference to a processor for preparing the exchange to be sent. Can be used to deep-clone messages that should be sent." }, + "shareUnitOfWork": { "index": 17, "kind": "attribute", "displayName": "Share Unit Of Work", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Shares the unit of work with the parent and each of the split messages. By default each split exchange has its own individual unit of work." }, "group": { "index": 18, "kind": "attribute", "displayName": "Group", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Groups N split messages into a single message with a java.util.List body. This allows processing items in chunks instead of one at a time." }, - "errorThreshold": { "index": 19, "kind": "attribute", "displayName": "Error Threshold", "group": "advanced", "label": "advanced", "required": false, "type": "number", "javaType": "java.lang.Double", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation." }, - "maxFailedRecords": { "index": 20, "kind": "attribute", "displayName": "Max Failed Records", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the maximum number of failed records before aborting the split operation." }, - "resumeStrategy": { "index": 21, "kind": "attribute", "displayName": "Resume Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.resume.ResumeStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a ResumeStrategy in the registry for resume-from-last-position support." }, + "errorThreshold": { "index": 19, "kind": "attribute", "displayName": "Error Threshold", "group": "advanced", "label": "advanced", "required": false, "type": "number", "javaType": "java.lang.Double", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation. For example, 0.1 means abort if more than 10% of items fail. When the threshold is exceeded, a org.apache.camel.CamelExchangeException is thrown. This option is mutually exclusive with stopOnException . When set, individual item failures are tracked but processing continues until the threshold is exceeded. Note: When combined with parallelProcessing , the failure ratio may vary between runs because parallel items complete in non-deterministic order. For deterministic abort behavior with parallel processing, prefer maxFailedRecords (absolute count) over errorThreshold (ratio)." }, + "maxFailedRecords": { "index": 20, "kind": "attribute", "displayName": "Max Failed Records", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the maximum number of failed records before aborting the split operation. When the count is exceeded, a org.apache.camel.CamelExchangeException is thrown. This option is mutually exclusive with stopOnException . Can be combined with errorThreshold processing aborts when either threshold is exceeded." }, + "resumeStrategy": { "index": 21, "kind": "attribute", "displayName": "Resume Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.resume.ResumeStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a ResumeStrategy for resume-from-last-position support. The watermark key must also be configured via watermarkKey(String) ." }, "watermarkKey": { "index": 22, "kind": "attribute", "displayName": "Watermark Key", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the key to use in the watermark store." }, - "watermarkExpression": { "index": 23, "kind": "attribute", "displayName": "Watermark Expression", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value." }, - "outputs": { "index": 24, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List>", "oneOf": [ "aggregate", "bean", "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", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false } + "watermarkExpression": { "index": 23, "kind": "attribute", "displayName": "Watermark Expression", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a Simple expression to evaluate on each completed sub-exchange to determine the new watermark value. When set, enables value-based watermarking instead of index-based. The expression is evaluated using the Simple language." }, + "outputs": { "index": 24, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List>", "oneOf": [ "a2aSubTask", "aggregate", "bean", "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", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false } }, "exchangeProperties": { "CamelSplitIndex": { "index": 0, "kind": "exchangeProperty", "displayName": "Split Index", "label": "producer", "required": false, "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "important": true, "description": "A split counter that increases for each Exchange being split. The counter starts from 0." }, 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 c776a04dac6e4..7e56fd14b7506 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 @@ -13280,7 +13280,12 @@ of one at a time. @@ -13289,7 +13294,9 @@ Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting @@ -13298,7 +13305,8 @@ Sets the maximum number of failed records before aborting the split operation. @@ -13316,7 +13324,8 @@ Sets the key to use in the watermark store. 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 af9e1c317e4a8..12ffe8606d961 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 @@ -12423,7 +12423,12 @@ of one at a time. @@ -12432,7 +12437,9 @@ Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting @@ -12441,7 +12448,8 @@ Sets the maximum number of failed records before aborting the split operation. @@ -12459,7 +12467,8 @@ Sets the key to use in the watermark store. diff --git a/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java b/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java index 36b6d5353c1ba..efc177fdf5ff1 100644 --- a/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java +++ b/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java @@ -1,10 +1,14 @@ /* Generated by camel build tools - do NOT edit this file! */ package org.apache.camel; -import javax.annotation.processing.Generated; +import java.util.Collection; import java.util.HashMap; import java.util.Map; +import javax.annotation.processing.Generated; + +import org.jspecify.annotations.Nullable; + /** * Generated by camel build tools - do NOT edit this file! */ @@ -13,7 +17,7 @@ public class ExchangeConstantProvider { private static final Map MAP; static { - Map map = new HashMap<>(151); + Map map = new HashMap<>(153); map.put("AGGREGATED_COLLECTION_GUARD", "CamelAggregatedCollectionGuard"); map.put("AGGREGATED_COMPLETED_BY", "CamelAggregatedCompletedBy"); map.put("AGGREGATED_CORRELATION_KEY", "CamelAggregatedCorrelationKey"); @@ -111,6 +115,8 @@ public class ExchangeConstantProvider { map.put("MAXIMUM_SIMPLE_CACHE_SIZE", "CamelMaximumSimpleCacheSize"); map.put("MAXIMUM_TRANSFORMER_CACHE_SIZE", "CamelMaximumTransformerCacheSize"); map.put("MAXIMUM_VALIDATOR_CACHE_SIZE", "CamelMaximumValidatorCacheSize"); + map.put("MESSAGE_BODY_SIZE", "CamelMessageBodySize"); + map.put("MESSAGE_HEADERS_SIZE", "CamelMessageHeadersSize"); map.put("MESSAGE_HISTORY", "CamelMessageHistory"); map.put("MESSAGE_HISTORY_HEADER_FORMAT", "CamelMessageHistoryHeaderFormat"); map.put("MESSAGE_HISTORY_OUTPUT_FORMAT", "CamelMessageHistoryOutputFormat"); @@ -168,8 +174,12 @@ public class ExchangeConstantProvider { MAP = map; } - public static String lookup(String key) { + public static @Nullable String lookup(String key) { return MAP.get(key); } + + public static Collection values() { + return MAP.values(); + } } diff --git a/core/camel-api/src/main/java/org/apache/camel/SplitResult.java b/core/camel-api/src/main/java/org/apache/camel/SplitResult.java index b04b06acae827..b78682fc66413 100644 --- a/core/camel-api/src/main/java/org/apache/camel/SplitResult.java +++ b/core/camel-api/src/main/java/org/apache/camel/SplitResult.java @@ -24,6 +24,8 @@ * when error thresholds ({@code errorThreshold} or {@code maxFailedRecords}) are configured. *

* This result is available as an exchange property ({@link Exchange#SPLIT_RESULT}) after the split operation completes. + * + * @since 4.21 */ public final class SplitResult { @@ -32,6 +34,7 @@ public final class SplitResult { * * @param index the 0-based index of the failed item in the split sequence * @param exception the exception that caused the failure + * @since 4.21 */ public record Failure(int index, Exception exception) { } diff --git a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json index 5ab3ad27f8378..bcb4808a3b8cb 100644 --- a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json +++ b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/split.json @@ -3,40 +3,41 @@ "kind": "model", "name": "split", "title": "Split", - "description": "Splits a single message into many sub-messages.", + "description": "Splits a message into multiple sub-messages using an expression, and processes each one individually. Supports parallel processing and result aggregation.", "deprecated": false, - "label": "eip,routing", + "label": "aggregate,eip,routing", "javaType": "org.apache.camel.model.SplitDefinition", + "aliases": [ "split", "chunk" ], "abstract": false, "input": true, "output": true }, "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": "Sets 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": "Sets the note of 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": "Sets the description of 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", "csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "java", "joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "ref", "simple", "spel", "tokenize", "variable", "wasm", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Expression of how to split the message body, such as as-is, using a tokenizer, or using a xpath." }, - "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, this can be needed in some special situations. 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": "Sets a reference to the AggregationStrategy to be used to assemble the replies from the split messages, into a single outgoing message from the Splitter. By default Camel will use the original incoming message to the splitter (leave it unchanged). You can also use a POJO as the AggregationStrategy" }, - "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 explicit declare the method name to use, when using POJOs as the AggregationStrategy." }, - "aggregationStrategyMethodAllowNull": { "index": 8, "kind": "attribute", "displayName": "Aggregation Strategy Method Allow Null", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy" }, + "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" }, + "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", "csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "java", "joor", "jq", "js", "jsonpath", "language", "method", "mvel", "ognl", "python", "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." }, + "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." }, + "aggregationStrategyMethodAllowNull": { "index": 8, "kind": "attribute", "displayName": "Aggregation Strategy Method Allow Null", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If true then null is used as the oldExchange when there is no data to aggregate, when using POJOs as the AggregationStrategy." }, "parallelAggregate": { "index": 9, "kind": "attribute", "displayName": "Parallel Aggregate", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": true, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe." }, - "parallelProcessing": { "index": 10, "kind": "attribute", "displayName": "Parallel Processing", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then processing each split messages occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. It's only processing the sub messages from the splitter which happens concurrently. When parallel processing is enabled, then the Camel routing engin will continue processing using last used thread from the parallel thread pool. However, if you want to use the original thread that called the splitter, then make sure to enable the synchronous option as well. In parallel processing mode, you may want to also synchronous = true to force this EIP to process the sub-tasks using the upper bounds of the thread-pool. If using synchronous = false then Camel will allow its reactive routing engine to use as many threads as possible, which may be available due to sub-tasks using other thread-pools such as CompletableFuture.runAsync or others." }, - "synchronous": { "index": 11, "kind": "attribute", "displayName": "Synchronous", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether synchronous processing should be strictly used. When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled." }, - "streaming": { "index": 12, "kind": "attribute", "displayName": "Streaming", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "When in streaming mode, then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter do not split all the messages first, but then we do not know the total size, and therefore the org.apache.camel.Exchange#SPLIT_SIZE is empty. In non-streaming mode (default) the splitter will split each message first, to know the total size, and then process each message one by one. This requires to keep all the split messages in memory and therefore requires more memory. The total size is provided in the org.apache.camel.Exchange#SPLIT_SIZE header. The streaming mode also affects the aggregation behavior. If enabled then Camel will process replies out-of-order, e.g. in the order they come back. If disabled, Camel will process replies in the same order as the messages was split." }, - "stopOnException": { "index": 13, "kind": "attribute", "displayName": "Stop On Exception", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the splitter will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The default behavior is to not stop but continue processing till the end" }, - "timeout": { "index": 14, "kind": "attribute", "displayName": "Timeout", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "0", "description": "Sets a total timeout specified in millis, when using parallel processing. If the Splitter hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Splitter breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care." }, - "executorService": { "index": 15, "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 to be used for parallel processing. Notice if you set this option, then parallel processing is automatically implied, and you do not have to enable that option as well." }, - "onPrepare": { "index": 16, "kind": "attribute", "displayName": "On Prepare", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Uses the Processor when preparing the org.apache.camel.Exchange to be sent. This can be used to deep-clone messages that should be sent, or any custom logic needed before the exchange is sent." }, - "shareUnitOfWork": { "index": 17, "kind": "attribute", "displayName": "Share Unit Of Work", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Splitter will by default not share unit of work between the parent exchange and each split exchange. This means each split exchange has its own individual unit of work." }, + "parallelProcessing": { "index": 10, "kind": "attribute", "displayName": "Parallel Processing", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then processing each split message occurs concurrently. The caller thread still waits until all messages are fully processed before it continues." }, + "synchronous": { "index": 11, "kind": "attribute", "displayName": "Synchronous", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled." }, + "streaming": { "index": 12, "kind": "attribute", "displayName": "Streaming", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "When enabled then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter does not split all messages first." }, + "stopOnException": { "index": 13, "kind": "attribute", "displayName": "Stop On Exception", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then stops further split processing if an exception or failure occurred during processing of a split message, and the caused exception will be thrown. The default behavior is to not stop but continue processing till the end." }, + "timeout": { "index": 14, "kind": "attribute", "displayName": "Timeout", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "0", "description": "Total timeout in millis when using parallel processing. If the splitter has not been able to process all replies within the given timeframe, then the timeout triggers and the splitter breaks out and continues." }, + "executorService": { "index": 15, "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": "Reference to a custom thread pool to use for parallel processing. Setting this option implies parallel processing." }, + "onPrepare": { "index": 16, "kind": "attribute", "displayName": "On Prepare", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Reference to a processor for preparing the exchange to be sent. Can be used to deep-clone messages that should be sent." }, + "shareUnitOfWork": { "index": 17, "kind": "attribute", "displayName": "Share Unit Of Work", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Shares the unit of work with the parent and each of the split messages. By default each split exchange has its own individual unit of work." }, "group": { "index": 18, "kind": "attribute", "displayName": "Group", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Groups N split messages into a single message with a java.util.List body. This allows processing items in chunks instead of one at a time." }, - "errorThreshold": { "index": 19, "kind": "attribute", "displayName": "Error Threshold", "group": "advanced", "label": "advanced", "required": false, "type": "number", "javaType": "java.lang.Double", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation." }, - "maxFailedRecords": { "index": 20, "kind": "attribute", "displayName": "Max Failed Records", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the maximum number of failed records before aborting the split operation." }, - "resumeStrategy": { "index": 21, "kind": "attribute", "displayName": "Resume Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.resume.ResumeStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a ResumeStrategy in the registry for resume-from-last-position support." }, + "errorThreshold": { "index": 19, "kind": "attribute", "displayName": "Error Threshold", "group": "advanced", "label": "advanced", "required": false, "type": "number", "javaType": "java.lang.Double", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation. For example, 0.1 means abort if more than 10% of items fail. When the threshold is exceeded, a org.apache.camel.CamelExchangeException is thrown. This option is mutually exclusive with stopOnException . When set, individual item failures are tracked but processing continues until the threshold is exceeded. Note: When combined with parallelProcessing , the failure ratio may vary between runs because parallel items complete in non-deterministic order. For deterministic abort behavior with parallel processing, prefer maxFailedRecords (absolute count) over errorThreshold (ratio)." }, + "maxFailedRecords": { "index": 20, "kind": "attribute", "displayName": "Max Failed Records", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the maximum number of failed records before aborting the split operation. When the count is exceeded, a org.apache.camel.CamelExchangeException is thrown. This option is mutually exclusive with stopOnException . Can be combined with errorThreshold processing aborts when either threshold is exceeded." }, + "resumeStrategy": { "index": 21, "kind": "attribute", "displayName": "Resume Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.resume.ResumeStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a ResumeStrategy for resume-from-last-position support. The watermark key must also be configured via watermarkKey(String) ." }, "watermarkKey": { "index": 22, "kind": "attribute", "displayName": "Watermark Key", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the key to use in the watermark store." }, - "watermarkExpression": { "index": 23, "kind": "attribute", "displayName": "Watermark Expression", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value." }, - "outputs": { "index": 24, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List>", "oneOf": [ "aggregate", "bean", "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", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false } + "watermarkExpression": { "index": 23, "kind": "attribute", "displayName": "Watermark Expression", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a Simple expression to evaluate on each completed sub-exchange to determine the new watermark value. When set, enables value-based watermarking instead of index-based. The expression is evaluated using the Simple language." }, + "outputs": { "index": 24, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List>", "oneOf": [ "a2aSubTask", "aggregate", "bean", "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", "threads", "throttle", "throwException", "to", "toD", "tokenizer", "transacted", "transform", "transformDataType", "unmarshal", "validate", "wireTap" ], "deprecated": false, "autowired": false, "secret": false } }, "exchangeProperties": { "CamelSplitIndex": { "index": 0, "kind": "exchangeProperty", "displayName": "Split Index", "label": "producer", "required": false, "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "important": true, "description": "A split counter that increases for each Exchange being split. The counter starts from 0." }, diff --git a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/YamlModelWriter.java b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/YamlModelWriter.java index 8e9db27a681a8..de61b92c6eabf 100644 --- a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/YamlModelWriter.java +++ b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/YamlModelWriter.java @@ -1765,6 +1765,12 @@ protected JsonObject doWriteSplitDefinition(SplitDefinition def) { doWriteAttribute(jo, "executorService", def.getExecutorService(), null); doWriteAttribute(jo, "onPrepare", def.getOnPrepare(), null); doWriteAttribute(jo, "shareUnitOfWork", def.getShareUnitOfWork(), null); + doWriteAttribute(jo, "group", def.getGroup(), null); + doWriteAttribute(jo, "errorThreshold", def.getErrorThreshold(), null); + doWriteAttribute(jo, "maxFailedRecords", def.getMaxFailedRecords(), null); + doWriteAttribute(jo, "resumeStrategy", def.getResumeStrategy(), null); + doWriteAttribute(jo, "watermarkKey", def.getWatermarkKey(), null); + doWriteAttribute(jo, "watermarkExpression", def.getWatermarkExpression(), null); doWriteOutputExpressionNodeElements(jo, def); return jo; } diff --git a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_19.adoc b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_19.adoc index a7463df7cb3d7..5e4a331e40662 100644 --- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_19.adoc +++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_19.adoc @@ -54,27 +54,6 @@ uses `InOnly` pattern. Removed 2 deprecated methods in Java DSL for `throttler` EIP. -==== Split EIP enhancements - -The Split EIP has been enhanced with the following new features: - -* **Chunking with `group`**: Groups N split items together into a single message with a `java.util.List` body, - allowing batch processing of split items. -* **Error thresholds**: Two new options `maxFailedRecords` (max failure count) and `errorThreshold` - (max failure ratio 0.0-1.0) allow the splitter to continue through individual failures while stopping - when error rates become unacceptable. These are mutually exclusive with `stopOnException`. -* **SplitResult**: When error thresholds are configured, a `SplitResult` object is available as the - `CamelSplitResult` exchange property after the split completes, providing total items, success/failure - counts, and individual failure details (index and exception). -* **Watermark tracking**: New options `resumeStrategy`, `watermarkKey`, and `watermarkExpression` enable - incremental processing using Camel's `ResumeStrategy` SPI to track progress. Index-based watermarking - automatically skips previously processed items; value-based watermarking uses a custom expression - to extract watermark values. The previous watermark value is exposed as the `CamelSplitWatermark` - exchange property. Any `ResumeStrategy` implementation can be used — from in-memory for testing to - Kafka-backed for production. - -See the xref:components:eips:split-eip.adoc[Split EIP] documentation for details and examples. - ==== ErrorRegistry A new `ErrorRegistry` SPI has been added to `CamelContext` for capturing routing errors. diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java index 295f2c45d98e3..9100e8858fd7e 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java @@ -11,6 +11,7 @@ import org.apache.camel.dsl.yaml.common.YamlDeserializerBase; import org.apache.camel.dsl.yaml.common.YamlDeserializerEndpointAwareBase; import org.apache.camel.dsl.yaml.common.YamlDeserializerSupport; +import org.apache.camel.model.A2ASubTaskDefinition; import org.apache.camel.model.AggregateDefinition; import org.apache.camel.model.BeanDefinition; import org.apache.camel.model.BeanFactoryDefinition; @@ -267,18 +268,104 @@ public final class ModelDeserializers extends YamlDeserializerSupport { private ModelDeserializers() { } + @YamlType( + nodes = "a2aSubTask", + types = org.apache.camel.model.A2ASubTaskDefinition.class, + order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, + displayName = "A2A Sub Task", + description = "Groups route steps and emits A2A (Agent-to-Agent) protocol progress events before, after, or when the grouped work fails", + deprecated = false, + properties = { + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "emitAfter", type = "string", description = "Simple expression template to emit after the nested steps complete successfully", displayName = "Emit After"), + @YamlProperty(name = "emitBefore", type = "string", description = "Simple expression template to emit before the nested steps run", displayName = "Emit Before"), + @YamlProperty(name = "emitOnError", type = "string", description = "Simple expression template to emit when the nested steps fail", displayName = "Emit On Error"), + @YamlProperty(name = "failIfNoTaskContext", type = "boolean", defaultValue = "false", description = "Whether to fail if the current Exchange does not have an active A2A task context", displayName = "Fail If No Task Context"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") + } + ) + public static class A2ASubTaskDefinitionDeserializer extends YamlDeserializerBase { + public A2ASubTaskDefinitionDeserializer() { + super(A2ASubTaskDefinition.class); + } + + @Override + protected A2ASubTaskDefinition newInstance() { + return new A2ASubTaskDefinition(); + } + + @Override + protected boolean setProperty(A2ASubTaskDefinition target, String propertyKey, + String propertyName, Node node) { + propertyKey = org.apache.camel.util.StringHelper.dashToCamelCase(propertyKey); + switch(propertyKey) { + case "disabled": { + String val = asText(node); + target.setDisabled(val); + break; + } + case "emitAfter": { + String val = asText(node); + target.setEmitAfter(val); + break; + } + case "emitBefore": { + String val = asText(node); + target.setEmitBefore(val); + break; + } + case "emitOnError": { + String val = asText(node); + target.setEmitOnError(val); + break; + } + case "failIfNoTaskContext": { + String val = asText(node); + target.setFailIfNoTaskContext(val); + break; + } + case "id": { + String val = asText(node); + target.setId(val); + break; + } + case "description": { + String val = asText(node); + target.setDescription(val); + break; + } + case "note": { + String val = asText(node); + target.setNote(val); + break; + } + case "steps": { + setSteps(target, node); + break; + } + default: { + return false; + } + } + return true; + } + } + @YamlType( nodes = "asn1", inline = true, types = org.apache.camel.model.dataformat.ASN1DataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "ASN.1 File", - description = "Encode and decode data structures using Abstract Syntax Notation One (ASN.1).", + description = "Encode and decode data structures using Abstract Syntax Notation One (ASN.1)", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "unmarshalType", type = "string", description = "Class to use when unmarshalling.", displayName = "Unmarshal Type"), - @YamlProperty(name = "usingIterator", type = "boolean", defaultValue = "false", description = "If the asn1 file has more than one entry, the setting this option to true, allows working with the splitter EIP, to split the data using an iterator in a streaming mode.", displayName = "Using Iterator") + @YamlProperty(name = "usingIterator", type = "boolean", defaultValue = "false", description = "If the asn1 file has more than one entry, the setting this option to true allows working with the splitter EIP to split each entry individually.", displayName = "Using Iterator") } ) public static class ASN1DataFormatDeserializer extends YamlDeserializerBase { @@ -329,41 +416,42 @@ protected boolean setProperty(ASN1DataFormat target, String propertyKey, types = org.apache.camel.model.AggregateDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Aggregate", - description = "Aggregates many messages into a single message", + description = "Collects and combines related messages into a single message using a correlation expression and an aggregation strategy. Messages are grouped into buckets by correlation key and released when a completion condition is met.", deprecated = false, properties = { - @YamlProperty(name = "aggregateController", type = "string", description = "To use a org.apache.camel.processor.aggregate.AggregateController to allow external sources to control this aggregator.", displayName = "Aggregate Controller"), - @YamlProperty(name = "aggregationRepository", type = "string", description = "The AggregationRepository to use. Sets the custom aggregate repository to use. Will by default use org.apache.camel.processor.aggregate.MemoryAggregationRepository", displayName = "Aggregation Repository"), - @YamlProperty(name = "aggregationStrategy", type = "string", required = true, description = "The AggregationStrategy to use. For example to lookup a bean with the name foo, the value is simply just #bean:foo. Configuring an AggregationStrategy is required, and is used to merge the incoming Exchange with the existing already merged exchanges. At first call the oldExchange parameter is null. On subsequent invocations the oldExchange contains the merged exchanges and newExchange is of course the new incoming Exchange.", displayName = "Aggregation Strategy"), - @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used for the very first aggregation. If this option is true then null values is used as the oldExchange (at the very first aggregation), when using beans as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using beans as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "closeCorrelationKeyOnCompletion", type = "number", description = "Closes a correlation key when its complete. Any late received exchanges which has a correlation key that has been closed, it will be defined and a ClosedCorrelationKeyException is thrown.", displayName = "Close Correlation Key On Completion"), - @YamlProperty(name = "completeAllOnStop", type = "boolean", defaultValue = "false", description = "Indicates to wait to complete all current and partial (pending) aggregated exchanges when the context is stopped. This also means that we will wait for all pending exchanges which are stored in the aggregation repository to complete so the repository is empty before we can stop. You may want to enable this when using the memory based aggregation repository that is memory based only, and do not store data on disk. When this option is enabled, then the aggregator is waiting to complete all those exchanges before its stopped, when stopping CamelContext or the route using it.", displayName = "Complete All On Stop"), - @YamlProperty(name = "completionFromBatchConsumer", type = "boolean", defaultValue = "false", description = "Enables the batch completion mode where we aggregate from a org.apache.camel.BatchConsumer and aggregate the total number of exchanges the org.apache.camel.BatchConsumer has reported as total by checking the exchange property org.apache.camel.Exchange#BATCH_COMPLETE when its complete. This option cannot be used together with discardOnAggregationFailure. Important: When using this option, you should also enable eagerCheckCompletion() to ensure the aggregator checks for batch completion on each incoming exchange. Without eager checking, the batch completion signal may not be properly detected.", displayName = "Completion From Batch Consumer"), - @YamlProperty(name = "completionInterval", type = "string", description = "A repeating period in millis by which the aggregator will complete all current aggregated exchanges. Camel has a background task which is triggered every period. You cannot use this option together with completionTimeout, only one of them can be used.", displayName = "Completion Interval"), - @YamlProperty(name = "completionOnNewCorrelationGroup", type = "boolean", defaultValue = "false", description = "Enables completion on all previous groups when a new incoming correlation group. This can for example be used to complete groups with same correlation keys when they are in consecutive order. Notice when this is enabled then only 1 correlation group can be in progress as when a new correlation group starts, then the previous groups is forced completed.", displayName = "Completion On New Correlation Group"), - @YamlProperty(name = "completionPredicate", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "A Predicate to indicate when an aggregated exchange is complete. If this is not specified and the AggregationStrategy object implements Predicate, the aggregationStrategy object will be used as the completionPredicate.", displayName = "Completion Predicate"), - @YamlProperty(name = "completionSize", type = "number", description = "Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0.", displayName = "Completion Size"), - @YamlProperty(name = "completionSizeExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0.", displayName = "Completion Size Expression"), - @YamlProperty(name = "completionTimeout", type = "string", description = "Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot use this option together with completionInterval, only one of the two can be used. By default the timeout checker runs every second, you can use the completionTimeoutCheckerInterval option to configure how frequently to run the checker. The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout value. It is not recommended to use very low timeout values or checker intervals.", displayName = "Completion Timeout"), - @YamlProperty(name = "completionTimeoutCheckerInterval", type = "string", defaultValue = "1000", description = "Interval in millis that is used by the background task that checks for timeouts ( org.apache.camel.TimeoutMap ). By default the timeout checker runs every second. The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout value. It is not recommended to use very low timeout values or checker intervals.", displayName = "Completion Timeout Checker Interval"), - @YamlProperty(name = "completionTimeoutExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot use this option together with completionInterval, only one of the two can be used. By default the timeout checker runs every second, you can use the completionTimeoutCheckerInterval option to configure how frequently to run the checker. The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout value. It is not recommended to use very low timeout values or checker intervals.", displayName = "Completion Timeout Expression"), - @YamlProperty(name = "correlationExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "The expression used to calculate the correlation key to use for aggregation. The Exchange which has the same correlation key is aggregated together. If the correlation key could not be evaluated an Exception is thrown. You can disable this by using the ignoreBadCorrelationKeys option.", displayName = "Correlation Expression"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "discardOnAggregationFailure", type = "boolean", defaultValue = "false", description = "Discards the aggregated message when aggregation failed (an exception was thrown from AggregationStrategy . This means the partly aggregated message is dropped and not sent out of the aggregator. This option cannot be used together with completionFromBatchConsumer.", displayName = "Discard On Aggregation Failure"), - @YamlProperty(name = "discardOnCompletionTimeout", type = "boolean", defaultValue = "false", description = "Discards the aggregated message on completion timeout. This means on timeout the aggregated message is dropped and not sent out of the aggregator.", displayName = "Discard On Completion Timeout"), - @YamlProperty(name = "eagerCheckCompletion", type = "boolean", defaultValue = "false", description = "Use eager completion checking which means that the completionPredicate will use the incoming Exchange. As opposed to without eager completion checking the completionPredicate will use the aggregated Exchange.", displayName = "Eager Check Completion"), - @YamlProperty(name = "executorService", type = "string", description = "If using parallelProcessing you can specify a custom thread pool to be used. In fact also if you are not using parallelProcessing this custom thread pool is used to send out aggregated exchanges as well.", displayName = "Executor Service"), - @YamlProperty(name = "forceCompletionOnStop", type = "boolean", defaultValue = "false", description = "Indicates to complete all current aggregated exchanges when the context is stopped", displayName = "Force Completion On Stop"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreInvalidCorrelationKeys", type = "boolean", defaultValue = "false", description = "If a correlation key cannot be successfully evaluated it will be ignored by logging a DEBUG and then just ignore the incoming Exchange.", displayName = "Ignore Invalid Correlation Keys"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "optimisticLockRetryPolicy", type = "object:org.apache.camel.model.OptimisticLockRetryPolicyDefinition", description = "Allows to configure retry settings when using optimistic locking.", displayName = "Optimistic Lock Retry Policy"), - @YamlProperty(name = "optimisticLocking", type = "boolean", defaultValue = "false", description = "Turns on using optimistic locking, which requires the aggregationRepository being used, is supporting this by implementing org.apache.camel.spi.OptimisticLockingAggregationRepository .", displayName = "Optimistic Locking"), - @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "When aggregated are completed they are being send out of the aggregator. This option indicates whether or not Camel should use a thread pool with multiple threads for concurrency. If no custom thread pool has been specified then Camel creates a default pool with 10 concurrent threads.", displayName = "Parallel Processing"), + @YamlProperty(name = "aggregateController", type = "string", description = "Reference to an AggregateController to allow external sources to control this aggregator.", displayName = "Aggregate Controller"), + @YamlProperty(name = "aggregationRepository", type = "string", description = "Reference to the AggregationRepository to use. By default uses MemoryAggregationRepository.", displayName = "Aggregation Repository"), + @YamlProperty(name = "aggregationStrategy", type = "string", required = true, description = "The AggregationStrategy to use. Required. Merges each incoming exchange with the existing already merged exchanges. At first call the oldExchange parameter is null.", displayName = "Aggregation Strategy"), + @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If true then null is used as the oldExchange at the very first aggregation, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "The method name to use when using a POJO as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "closeCorrelationKeyOnCompletion", type = "number", description = "Closes a correlation key when its complete. Late arriving exchanges with a closed correlation key will throw a ClosedCorrelationKeyException. The value is the maximum cache size of closed keys. Use 0 for unbounded.", displayName = "Close Correlation Key On Completion"), + @YamlProperty(name = "completeAllOnStop", type = "boolean", defaultValue = "false", description = "If enabled then waits to complete all current and partial (pending) aggregated exchanges when the context is stopped, ensuring the aggregation repository is empty before shutdown.", displayName = "Complete All On Stop"), + @YamlProperty(name = "completionFromBatchConsumer", type = "boolean", defaultValue = "false", description = "Enables batch completion mode where aggregation completes based on the total number of exchanges reported by a batch consumer. Cannot be used together with discardOnAggregationFailure.", displayName = "Completion From Batch Consumer"), + @YamlProperty(name = "completionInterval", type = "string", description = "A repeating period by which the aggregator will complete all current aggregated exchanges. Cannot be used together with completionTimeout.", displayName = "Completion Interval"), + @YamlProperty(name = "completionOnNewCorrelationGroup", type = "boolean", defaultValue = "false", description = "Enables completion on all previous groups when a new incoming correlation group starts. Only one correlation group can be in progress at a time.", displayName = "Completion On New Correlation Group"), + @YamlProperty(name = "completionPredicate", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", 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.", displayName = "Completion Predicate"), + @YamlProperty(name = "completionSize", type = "number", description = "Number of messages aggregated before the aggregation is complete. Can also be set as an expression via completionSizeExpression.", displayName = "Completion Size"), + @YamlProperty(name = "completionSizeExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Number of messages aggregated before the aggregation is complete, evaluated as an expression allowing dynamic size values.", displayName = "Completion Size Expression"), + @YamlProperty(name = "completionTimeout", type = "string", description = "Time that an aggregated exchange should be inactive before its complete (timeout). Cannot be used together with completionInterval.", displayName = "Completion Timeout"), + @YamlProperty(name = "completionTimeoutCheckerInterval", type = "string", defaultValue = "1000", description = "Interval in millis for the background task that checks for completion timeouts. Default is 1000 (1 second).", displayName = "Completion Timeout Checker Interval"), + @YamlProperty(name = "completionTimeoutExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Time in millis that an aggregated exchange should be inactive before its complete (timeout), evaluated as an expression allowing dynamic timeout values.", displayName = "Completion Timeout Expression"), + @YamlProperty(name = "correlationExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", 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.", displayName = "Correlation Expression"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "discardOnAggregationFailure", type = "boolean", defaultValue = "false", description = "If enabled then the partly aggregated message is discarded when aggregation failed (an exception was thrown from AggregationStrategy). Cannot be used together with completionFromBatchConsumer.", displayName = "Discard On Aggregation Failure"), + @YamlProperty(name = "discardOnCompletionTimeout", type = "boolean", defaultValue = "false", description = "If enabled then the aggregated message is discarded (dropped) on completion timeout instead of being sent out of the aggregator.", displayName = "Discard On Completion Timeout"), + @YamlProperty(name = "eagerCheckCompletion", type = "boolean", defaultValue = "false", description = "If enabled then the completion predicate evaluates against the incoming exchange. Otherwise it evaluates against the aggregated exchange.", displayName = "Eager Check Completion"), + @YamlProperty(name = "executorService", type = "string", description = "Reference to a custom thread pool to use for parallel processing and sending out aggregated exchanges.", displayName = "Executor Service"), + @YamlProperty(name = "forceCompletionOnStop", type = "boolean", defaultValue = "false", description = "If enabled then all current aggregated exchanges are completed when the context is stopped.", displayName = "Force Completion On Stop"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "ignoreInvalidCorrelationKeys", type = "boolean", defaultValue = "false", description = "If enabled then a correlation key that cannot be evaluated is logged and ignored, instead of throwing an exception.", displayName = "Ignore Invalid Correlation Keys"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "optimisticLockRetryPolicy", type = "object:org.apache.camel.model.OptimisticLockRetryPolicyDefinition", description = "Configures retry settings when using optimistic locking.", displayName = "Optimistic Lock Retry Policy"), + @YamlProperty(name = "optimisticLocking", type = "boolean", defaultValue = "false", description = "Turns on optimistic locking, which requires the aggregation repository to implement OptimisticLockingAggregationRepository.", displayName = "Optimistic Locking"), + @YamlProperty(name = "optimisticLockingSyncRetry", type = "boolean", defaultValue = "false", description = "When optimistic locking is enabled, retries happen synchronously in the same thread instead of being scheduled on a background thread. This preserves transaction context for repositories that require single-thread transactional guarantees.", displayName = "Optimistic Locking Sync Retry"), + @YamlProperty(name = "parallelProcessing", type = "boolean", 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.", displayName = "Parallel Processing"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), - @YamlProperty(name = "timeoutCheckerExecutorService", type = "string", description = "If using either of the completionTimeout, completionTimeoutExpression, or completionInterval options a background thread is created to check for the completion for every aggregator. Set this option to provide a custom thread pool to be used rather than creating a new thread for every aggregator.", displayName = "Timeout Checker Executor Service") + @YamlProperty(name = "timeoutCheckerExecutorService", type = "string", description = "Reference to a custom thread pool for the background completion timeout checker.", displayName = "Timeout Checker Executor Service") } ) public static class AggregateDefinitionDeserializer extends YamlDeserializerBase { @@ -511,6 +599,11 @@ protected boolean setProperty(AggregateDefinition target, String propertyKey, target.setOptimisticLocking(val); break; } + case "optimisticLockingSyncRetry": { + String val = asText(node); + target.setOptimisticLockingSyncRetry(val); + break; + } case "parallelProcessing": { String val = asText(node); target.setParallelProcessing(val); @@ -553,14 +646,14 @@ protected boolean setProperty(AggregateDefinition target, String propertyKey, types = org.apache.camel.model.rest.ApiKeyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Api Key", - description = "Rest security basic auth definition", + description = "Configures API key authentication for a REST service", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "A short description for security scheme.", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "A short description for the security scheme.", displayName = "Description"), @YamlProperty(name = "inCookie", type = "boolean", defaultValue = "false", description = "To use a cookie as the location of the API key.", displayName = "In Cookie"), @YamlProperty(name = "inHeader", type = "boolean", defaultValue = "false", description = "To use header as the location of the API key.", displayName = "In Header"), @YamlProperty(name = "inQuery", type = "boolean", defaultValue = "false", description = "To use query parameter as the location of the API key.", displayName = "In Query"), - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key"), + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key"), @YamlProperty(name = "name", type = "string", required = true, description = "The name of the header or query parameter to be used.", displayName = "Name") } ) @@ -623,28 +716,28 @@ protected boolean setProperty(ApiKeyDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.AvroDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Avro", - description = "Serialize and deserialize messages using Apache Avro binary data format.", + description = "Serialize and deserialize messages using Apache Avro binary data format", deprecated = false, properties = { @YamlProperty(name = "allowJmsType", type = "boolean", defaultValue = "false", description = "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", displayName = "Allow Jms Type"), - @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used.", displayName = "Allow Unmarshall Type"), - @YamlProperty(name = "autoDiscoverObjectMapper", type = "boolean", defaultValue = "false", description = "If set to true then Jackson will lookup for an objectMapper into the registry", displayName = "Auto Discover Object Mapper"), - @YamlProperty(name = "autoDiscoverSchemaResolver", type = "boolean", defaultValue = "true", description = "When not disabled, the SchemaResolver will be looked up into the registry", displayName = "Auto Discover Schema Resolver"), - @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", displayName = "Collection Type"), + @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling.", displayName = "Allow Unmarshall Type"), + @YamlProperty(name = "autoDiscoverObjectMapper", type = "boolean", defaultValue = "false", description = "If set to true then Jackson will lookup for an objectMapper into the registry.", displayName = "Auto Discover Object Mapper"), + @YamlProperty(name = "autoDiscoverSchemaResolver", type = "boolean", defaultValue = "true", description = "When not disabled, the SchemaResolver will be looked up into the registry.", displayName = "Auto Discover Schema Resolver"), + @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use.", displayName = "Collection Type"), @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), - @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Disable Features"), - @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Enable Features"), + @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated by comma.", displayName = "Disable Features"), + @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated by comma.", displayName = "Enable Features"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "include", type = "string", description = "If you want to marshal a pojo to JSON, and the pojo has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL", displayName = "Include"), - @YamlProperty(name = "instanceClassName", type = "string", description = "Class name to use for marshal and unmarshalling", displayName = "Instance Class Name"), - @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations", displayName = "Json View"), + @YamlProperty(name = "include", type = "string", description = "If you want to marshal a pojo to JSON, and the pojo has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL.", displayName = "Include"), + @YamlProperty(name = "instanceClassName", type = "string", description = "Class name to use for marshal and unmarshalling.", displayName = "Instance Class Name"), + @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations.", displayName = "Json View"), @YamlProperty(name = "library", type = "enum:ApacheAvro,Jackson", defaultValue = "avroJackson", description = "Which Avro library to use.", displayName = "Library"), @YamlProperty(name = "moduleClassNames", type = "string", description = "To use custom Jackson modules com.fasterxml.jackson.databind.Module specified as a String with FQN class names. Multiple classes can be separated by comma.", displayName = "Module Class Names"), @YamlProperty(name = "moduleRefs", type = "string", description = "To use custom Jackson modules referred from the Camel registry. Multiple modules can be separated by comma.", displayName = "Module Refs"), @YamlProperty(name = "objectMapper", type = "string", description = "Lookup and use the existing ObjectMapper with the given id when using Jackson.", displayName = "Object Mapper"), @YamlProperty(name = "schemaResolver", type = "string", description = "Optional schema resolver used to lookup schemas for the data in transit.", displayName = "Schema Resolver"), @YamlProperty(name = "timezone", type = "string", description = "If set then Jackson will use the Timezone when marshalling/unmarshalling.", displayName = "Timezone"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling", displayName = "Unmarshal Type"), + @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling.", displayName = "Unmarshal Type"), @YamlProperty(name = "useDefaultObjectMapper", type = "boolean", defaultValue = "true", description = "Whether to lookup and use default Jackson ObjectMapper from the registry.", displayName = "Use Default Object Mapper"), @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "To unmarshal to a List of Map or a List of Pojo.", displayName = "Use List") } @@ -786,14 +879,14 @@ protected boolean setProperty(AvroDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.BarcodeDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Barcode", - description = "Transform strings to various 1D/2D barcode bitmap formats and back.", + description = "Transform strings to various 1D/2D barcode bitmap formats and back", deprecated = false, properties = { - @YamlProperty(name = "barcodeFormat", type = "enum:AZTEC,CODABAR,CODE_39,CODE_93,CODE_128,DATA_MATRIX,EAN_8,EAN_13,ITF,MAXICODE,PDF_417,QR_CODE,RSS_14,RSS_EXPANDED,UPC_A,UPC_E,UPC_EAN_EXTENSION", defaultValue = "QR_CODE", description = "Barcode format such as QR-Code", displayName = "Barcode Format"), - @YamlProperty(name = "height", type = "number", defaultValue = "100", description = "Height of the barcode", displayName = "Height"), + @YamlProperty(name = "barcodeFormat", type = "enum:AZTEC,CODABAR,CODE_39,CODE_93,CODE_128,DATA_MATRIX,EAN_8,EAN_13,ITF,MAXICODE,PDF_417,QR_CODE,RSS_14,RSS_EXPANDED,UPC_A,UPC_E,UPC_EAN_EXTENSION", defaultValue = "QR_CODE", description = "Barcode format such as QR-Code.", displayName = "Barcode Format"), + @YamlProperty(name = "height", type = "number", defaultValue = "100", description = "Height of the barcode.", displayName = "Height"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "imageType", type = "enum:JPG,GIF,PNG", defaultValue = "PNG", description = "Image type of the barcode such as png", displayName = "Image Type"), - @YamlProperty(name = "width", type = "number", defaultValue = "100", description = "Width of the barcode", displayName = "Width") + @YamlProperty(name = "imageType", type = "enum:JPG,GIF,PNG", defaultValue = "PNG", description = "Image type of the barcode such as png.", displayName = "Image Type"), + @YamlProperty(name = "width", type = "number", defaultValue = "100", description = "Width of the barcode.", displayName = "Width") } ) public static class BarcodeDataFormatDeserializer extends YamlDeserializerBase { @@ -849,13 +942,13 @@ protected boolean setProperty(BarcodeDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.Base64DataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Base64", - description = "Encode and decode data using Base64.", + description = "Encode and decode data using Base64", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "lineLength", type = "number", defaultValue = "76", description = "To specific a maximum line length for the encoded data. By default 76 is used.", displayName = "Line Length"), - @YamlProperty(name = "lineSeparator", type = "string", description = "The line separators to use. Uses new line characters (CRLF) by default.", displayName = "Line Separator"), - @YamlProperty(name = "urlSafe", type = "boolean", defaultValue = "false", description = "Instead of emitting '' and '/' we emit '-' and '_' respectively. urlSafe is only applied to encode operations. Decoding seamlessly handles both modes. Is by default false.", displayName = "Url Safe") + @YamlProperty(name = "lineSeparator", type = "string", description = "The line separators to use. By default \\r\\n is used.", displayName = "Line Separator"), + @YamlProperty(name = "urlSafe", type = "boolean", defaultValue = "false", description = "Instead of emitting and / we emit - and _ respectively. urlSafe is only applied to encode operations. Decoding seamlessly handles both modes.", displayName = "Url Safe") } ) public static class Base64DataFormatDeserializer extends YamlDeserializerBase { @@ -906,11 +999,11 @@ protected boolean setProperty(Base64DataFormat target, String propertyKey, types = org.apache.camel.model.rest.BasicAuthDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Basic Auth", - description = "Rest security basic auth definition", + description = "Configures HTTP Basic authentication for a REST service", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "A short description for security scheme.", displayName = "Description"), - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key") + @YamlProperty(name = "description", type = "string", description = "A short description for the security scheme.", displayName = "Description"), + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key") } ) public static class BasicAuthDefinitionDeserializer extends YamlDeserializerBase { @@ -951,13 +1044,13 @@ protected boolean setProperty(BasicAuthDefinition target, String propertyKey, types = org.apache.camel.model.config.BatchResequencerConfig.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Batch Config", - description = "Configures batch-processing resequence eip.", + description = "Configures the batch-processing mode of the Resequence EIP, which collects messages into a batch and sorts them before releasing", deprecated = false, properties = { @YamlProperty(name = "allowDuplicates", type = "boolean", defaultValue = "false", description = "Whether to allow duplicates.", displayName = "Allow Duplicates"), @YamlProperty(name = "batchSize", type = "number", defaultValue = "100", description = "Sets the size of the batch to be re-ordered. The default size is 100.", displayName = "Batch Size"), @YamlProperty(name = "batchTimeout", type = "string", defaultValue = "1000", description = "Sets the timeout for collecting elements to be re-ordered. The default timeout is 1000 msec.", displayName = "Batch Timeout"), - @YamlProperty(name = "ignoreInvalidExchanges", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid exchanges", displayName = "Ignore Invalid Exchanges"), + @YamlProperty(name = "ignoreInvalidExchanges", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid exchanges.", displayName = "Ignore Invalid Exchanges"), @YamlProperty(name = "reverse", type = "boolean", defaultValue = "false", description = "Whether to reverse the ordering.", displayName = "Reverse") } ) @@ -1089,17 +1182,17 @@ protected boolean setProperty(BeanConstructorsDefinition target, String property types = org.apache.camel.model.BeanDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Bean", - description = "Calls a Java bean", + description = "Invokes a method on a Java bean, with automatic parameter binding from the message body, headers, and exchange properties", deprecated = false, properties = { - @YamlProperty(name = "beanType", type = "string", description = "Sets the class name (fully qualified) of the bean to use", displayName = "Bean Type"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "method", type = "string", description = "Sets the method name on the bean to use", displayName = "Method"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "ref", type = "string", description = "Sets a reference to an existing bean to use, which is looked up from the registry", displayName = "Ref"), - @YamlProperty(name = "scope", type = "enum:Singleton,Request,Prototype", defaultValue = "Singleton", description = "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint. The bean should be thread-safe in case concurrent threads is calling the bean at the same time. When using request scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean while processing a request and you want to call the same bean instance multiple times while processing the request. The bean does not have to be thread-safe as the instance is only called from the same request. When using prototype scope, then the bean will be looked up or created per call. However in case of lookup then this is delegated to the bean registry such as Spring or CDI (if in use), which depends on their configuration can act as either singleton or prototype scope. So when using prototype scope then this depends on the bean registry implementation.", displayName = "Scope") + @YamlProperty(name = "beanType", type = "string", description = "The class name (fully qualified) of the bean to use.", displayName = "Bean Type"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "method", type = "string", description = "The method name on the bean to invoke.", displayName = "Method"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "ref", type = "string", description = "A reference to an existing bean to use, which is looked up from the registry.", displayName = "Ref"), + @YamlProperty(name = "scope", type = "enum:Singleton,Request,Prototype", defaultValue = "Singleton", description = "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint.", displayName = "Scope") } ) public static class BeanDefinitionDeserializer extends YamlDeserializerBase { @@ -1175,7 +1268,7 @@ protected boolean setProperty(BeanDefinition target, String propertyKey, types = org.apache.camel.model.BeanFactoryDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Bean Factory", - description = "Define custom beans that can be used in your Camel routes and in general.", + description = "Defines a custom bean that can be used in Camel routes and other beans. The bean is created by a factory class or method.", deprecated = false, properties = { @YamlProperty(name = "builderClass", type = "string", description = "Fully qualified class name of builder class to use for creating and configuring the bean. The builder will use the properties values to configure the bean.", displayName = "Builder Class"), @@ -1185,12 +1278,12 @@ protected boolean setProperty(BeanDefinition target, String propertyKey, @YamlProperty(name = "factoryBean", type = "string", description = "Name of factory bean (bean id) to use for creating the bean.", displayName = "Factory Bean"), @YamlProperty(name = "factoryMethod", type = "string", description = "Name of method to invoke when creating the bean via a factory bean.", displayName = "Factory Method"), @YamlProperty(name = "initMethod", type = "string", description = "The name of the custom initialization method to invoke after setting bean properties. The method must have no arguments, but may throw any exception.", displayName = "Init Method"), - @YamlProperty(name = "name", type = "string", required = true, description = "The name of the bean (bean id)", displayName = "Name"), + @YamlProperty(name = "name", type = "string", required = true, description = "The name of the bean (bean id).", displayName = "Name"), @YamlProperty(name = "properties", type = "object", description = "Optional properties to set on the created bean.", displayName = "Properties"), - @YamlProperty(name = "script", type = "string", description = "The script to execute that creates the bean when using scripting languages. If the script use the prefix resource: such as resource:classpath:com/foo/myscript.groovy, resource:file:/var/myscript.groovy, then its loaded from the external resource.", displayName = "Script"), + @YamlProperty(name = "script", type = "string", description = "The script to execute that creates the bean when using scripting languages.", displayName = "Script"), @YamlProperty(name = "scriptLanguage", type = "string", description = "The script language to use when using inlined script for creating the bean, such as groovy, java, javascript etc.", displayName = "Script Language"), @YamlProperty(name = "scriptPropertyPlaceholders", type = "boolean", defaultValue = "true", description = "Whether the script should support using Camel property placeholder syntax {{ }}.", displayName = "Script Property Placeholders"), - @YamlProperty(name = "type", type = "string", required = true, description = "The class name (fully qualified) of the bean", displayName = "Type") + @YamlProperty(name = "type", type = "string", required = true, description = "The class name (fully qualified) of the bean.", displayName = "Type") } ) public static class BeanFactoryDefinitionDeserializer extends YamlDeserializerBase { @@ -1366,10 +1459,10 @@ protected boolean setProperty(BeanPropertyDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.BeanioDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "BeanIO", - description = "Marshal and unmarshal Java beans to and from flat files (such as CSV, delimited, or fixed length formats).", + description = "Marshal and unmarshal Java beans to and from flat files (such as CSV, delimited, or fixed length formats)", deprecated = false, properties = { - @YamlProperty(name = "beanReaderErrorHandlerType", type = "string", description = "To use a custom org.apache.camel.dataformat.beanio.BeanIOErrorHandler as error handler while parsing. Configure the fully qualified class name of the error handler. Notice the options ignoreUnidentifiedRecords, ignoreUnexpectedRecords, and ignoreInvalidRecords may not be in use when you use a custom error handler.", displayName = "Bean Reader Error Handler Type"), + @YamlProperty(name = "beanReaderErrorHandlerType", type = "string", description = "To use a custom org.apache.camel.dataformat.beanio.BeanIOErrorHandler as error handler while parsing. Configure the fully qualified class name of the error handler.", displayName = "Bean Reader Error Handler Type"), @YamlProperty(name = "encoding", type = "string", description = "The charset to use. Is by default the JVM platform default charset.", displayName = "Encoding"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "ignoreInvalidRecords", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid records.", displayName = "Ignore Invalid Records"), @@ -1377,7 +1470,7 @@ protected boolean setProperty(BeanPropertyDefinition target, String propertyKey, @YamlProperty(name = "ignoreUnidentifiedRecords", type = "boolean", defaultValue = "false", description = "Whether to ignore unidentified records.", displayName = "Ignore Unidentified Records"), @YamlProperty(name = "mapping", type = "string", required = true, description = "The BeanIO mapping file. Is by default loaded from the classpath. You can prefix with file:, http:, or classpath: to denote from where to load the mapping file.", displayName = "Mapping"), @YamlProperty(name = "streamName", type = "string", required = true, description = "The name of the stream to use.", displayName = "Stream Name"), - @YamlProperty(name = "unmarshalSingleObject", type = "boolean", defaultValue = "false", description = "This options controls whether to unmarshal as a list of objects or as a single object only. The former is the default mode, and the latter is only intended in special use-cases where beanio maps the Camel message to a single POJO bean.", displayName = "Unmarshal Single Object") + @YamlProperty(name = "unmarshalSingleObject", type = "boolean", defaultValue = "false", description = "This option controls whether to unmarshal as a list of objects or as a single object only.", displayName = "Unmarshal Single Object") } ) public static class BeanioDataFormatDeserializer extends YamlDeserializerBase { @@ -1453,12 +1546,12 @@ protected boolean setProperty(BeanioDataFormat target, String propertyKey, types = org.apache.camel.model.rest.BearerTokenDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Bearer Token", - description = "Rest security bearer token authentication definition", + description = "Configures Bearer token authentication for a REST service", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "A short description for security scheme.", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "A short description for the security scheme.", displayName = "Description"), @YamlProperty(name = "format", type = "string", description = "A hint to the client to identify how the bearer token is formatted.", displayName = "Format"), - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key") + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key") } ) public static class BearerTokenDefinitionDeserializer extends YamlDeserializerBase { @@ -1504,14 +1597,14 @@ protected boolean setProperty(BearerTokenDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.BindyDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Bindy", - description = "Marshal and unmarshal Java beans from and to flat payloads (such as CSV, delimited, fixed length formats, or FIX messages).", + description = "Marshal and unmarshal Java beans from and to flat payloads (such as CSV, delimited, fixed length formats, or FIX messages)", deprecated = false, properties = { @YamlProperty(name = "allowEmptyStream", type = "boolean", defaultValue = "false", description = "Whether to allow empty streams in the unmarshal process. If true, no exception will be thrown when a body without records is provided.", displayName = "Allow Empty Stream"), @YamlProperty(name = "classType", type = "string", description = "Name of model class to use.", displayName = "Class Type"), @YamlProperty(name = "defaultValueStringAsNull", type = "boolean", defaultValue = "false", description = "To change the default value for string types to be null instead of an empty string.", displayName = "Default Value String As Null"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "locale", type = "string", description = "To configure a default locale to use, such as us for united states. To use the JVM platform default locale then use the name default", displayName = "Locale"), + @YamlProperty(name = "locale", type = "string", description = "To configure a default locale to use, such as us for united states. To use the JVM platform default locale then use the name default.", displayName = "Locale"), @YamlProperty(name = "type", type = "enum:Csv,Fixed,KeyValue", description = "Whether to use Csv, Fixed, or KeyValue.", displayName = "Type"), @YamlProperty(name = "unwrapSingleInstance", type = "boolean", defaultValue = "true", description = "When unmarshalling should a single instance be unwrapped and returned instead of wrapped in a java.util.List.", displayName = "Unwrap Single Instance") } @@ -1579,18 +1672,18 @@ protected boolean setProperty(BindyDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.CBORDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "CBOR", - description = "Unmarshal a CBOR payload to POJO and back.", + description = "Unmarshal a CBOR payload to POJO and back", deprecated = false, properties = { @YamlProperty(name = "allowJmsType", type = "boolean", defaultValue = "false", description = "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", displayName = "Allow Jms Type"), - @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson CBOR is allowed to attempt to use the CamelCBORUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used.", displayName = "Allow Unmarshall Type"), - @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", displayName = "Collection Type"), - @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Disable Features"), - @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Enable Features"), + @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson CBOR is allowed to attempt to use the CamelCBORUnmarshalType header during the unmarshalling.", displayName = "Allow Unmarshall Type"), + @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use.", displayName = "Collection Type"), + @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson ObjectMapper. Multiple features can be separated by comma.", displayName = "Disable Features"), + @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson ObjectMapper. Multiple features can be separated by comma.", displayName = "Enable Features"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "objectMapper", type = "string", description = "Lookup and use the existing CBOR ObjectMapper with the given id when using Jackson.", displayName = "Object Mapper"), @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "To enable pretty printing output nicely formatted. Is by default false.", displayName = "Pretty Print"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling", displayName = "Unmarshal Type"), + @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling.", displayName = "Unmarshal Type"), @YamlProperty(name = "useDefaultObjectMapper", type = "boolean", defaultValue = "true", description = "Whether to lookup and use default Jackson CBOR ObjectMapper from the registry.", displayName = "Use Default Object Mapper"), @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "To unmarshal to a List of Map or a List of Pojo.", displayName = "Use List") } @@ -1679,15 +1772,15 @@ protected boolean setProperty(CBORDataFormat target, String propertyKey, types = org.apache.camel.model.language.CSimpleExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "CSimple", - description = "Evaluate a compiled simple expression.", + description = "Evaluate a compiled simple expression", deprecated = true, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "pretty", type = "boolean", defaultValue = "false", description = "To pretty format the output (only JSon or XML supported)", displayName = "Pretty"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim"), - @YamlProperty(name = "trimResult", type = "boolean", defaultValue = "false", description = "Whether to trim the returned values when this language are in use. For example the output result may contain unwanted line breaks at the beginning and end such as when using Java DSL with multi-line blocks. Is default false to be backwards compatible with existing behavior.", displayName = "Trim Result") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "pretty", type = "boolean", defaultValue = "false", description = "To pretty format the output (only JSon or XML supported).", displayName = "Pretty"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim"), + @YamlProperty(name = "trimResult", type = "boolean", defaultValue = "false", description = "Whether to trim the returned values when this language is in use.", displayName = "Trim Result") } ) public static class CSimpleExpressionDeserializer extends YamlDeserializerBase { @@ -1762,15 +1855,15 @@ protected boolean setProperty(CSimpleExpression target, String propertyKey, types = org.apache.camel.model.CatchDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Do Catch", - description = "Catches exceptions as part of a try, catch, finally block", + description = "Catches specific exceptions within a doTry block, allowing fine-grained exception handling within the route", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "exception", type = "array:string", description = "The exception(s) to catch.", displayName = "Exception"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "Used for triggering doCatch in specific situations", displayName = "On When"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "exception", type = "array:string", description = "The exception class names (fully qualified) to catch.", displayName = "Exception"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "An additional predicate that must evaluate to true for this doCatch to trigger. Allows fine-grained control over which exceptions are caught based on the exchange state.", displayName = "On When"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -1836,16 +1929,16 @@ protected boolean setProperty(CatchDefinition target, String propertyKey, types = org.apache.camel.model.ChoiceDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Choice", - description = "Route messages based on a series of predicates", + description = "Routes messages to different steps based on a series of conditions (predicates), similar to if-elseif-else in Java. Each condition is evaluated in order until one matches.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "otherwise", type = "object:org.apache.camel.model.OtherwiseDefinition", description = "Sets the otherwise node", displayName = "Otherwise"), - @YamlProperty(name = "precondition", type = "boolean", defaultValue = "false", description = "Indicates whether this Choice EIP is in precondition mode or not. If so its branches (when/otherwise) are evaluated during startup to keep at runtime only the branch that matched.", displayName = "Precondition"), - @YamlProperty(name = "when", type = "array:org.apache.camel.model.WhenDefinition", description = "Sets the when nodes", displayName = "When") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "otherwise", type = "object:org.apache.camel.model.OtherwiseDefinition", description = "The otherwise clause to execute when none of the when predicates matched.", displayName = "Otherwise"), + @YamlProperty(name = "precondition", type = "boolean", defaultValue = "false", description = "If enabled then the choice is evaluated at route initialization time (precondition). Only when predicates with property placeholders or simple expressions using only property placeholders are supported.", displayName = "Precondition"), + @YamlProperty(name = "when", type = "array:org.apache.camel.model.WhenDefinition", description = "The when clauses (predicates) to evaluate. The first when clause that matches determines which route branch to follow.", displayName = "When") } ) public static class ChoiceDefinitionDeserializer extends YamlDeserializerBase { @@ -1911,17 +2004,17 @@ protected boolean setProperty(ChoiceDefinition target, String propertyKey, types = org.apache.camel.model.CircuitBreakerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Circuit Breaker", - description = "Route messages in a fault tolerance way using Circuit Breaker", + description = "Wraps message processing with a circuit breaker for fault tolerance. Prevents cascading failures by short-circuiting calls to an unhealthy service and routing to a fallback", deprecated = false, properties = { - @YamlProperty(name = "configuration", type = "string", description = "Refers to a circuit breaker configuration (such as resillience4j, or microprofile-fault-tolerance) to use for configuring the circuit breaker EIP.", displayName = "Configuration"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "configuration", type = "string", description = "Refers to a circuit breaker configuration to use for configuring the circuit breaker EIP.", displayName = "Configuration"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), @YamlProperty(name = "faultToleranceConfiguration", type = "object:org.apache.camel.model.FaultToleranceConfigurationDefinition", description = "Configures the circuit breaker to use MicroProfile Fault Tolerance with the given configuration.", displayName = "Fault Tolerance Configuration"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "inheritErrorHandler", type = "boolean", defaultValue = "false", description = "To turn on or off Camel error handling during circuit breaker. If this is enabled then Camel error handler will first trigger if there is an error in the circuit breaker, which allows to let Camel handle redeliveries. If all attempts is failed, then after the circuit breaker is finished, then Camel error handler can handle the error as well such as the dead letter channel. By default, Camel error handler is turned off.", displayName = "Inherit Error Handler"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "onFallback", type = "object:org.apache.camel.model.OnFallbackDefinition", description = "The fallback route path to execute that does not go over the network. This should be a static or cached result that can immediately be returned upon failure. If the fallback requires network connection then use onFallbackViaNetwork() .", displayName = "On Fallback"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "inheritErrorHandler", type = "boolean", defaultValue = "false", description = "Whether to inherit Camel error handling during circuit breaker. By default, Camel error handler is turned off.", displayName = "Inherit Error Handler"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "onFallback", type = "object:org.apache.camel.model.OnFallbackDefinition", description = "The fallback route path to execute when the circuit breaker triggers.", displayName = "On Fallback"), @YamlProperty(name = "resilience4jConfiguration", type = "object:org.apache.camel.model.Resilience4jConfigurationDefinition", description = "Configures the circuit breaker to use Resilience4j with the given configuration.", displayName = "Resilience4j Configuration"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } @@ -2003,18 +2096,18 @@ protected boolean setProperty(CircuitBreakerDefinition target, String propertyKe types = org.apache.camel.model.ClaimCheckDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Claim Check", - description = "The Claim Check EIP allows you to replace message content with a claim check (a unique key), which can be used to retrieve the message content at a later time.", + description = "Temporarily stores the message content and replaces it with a claim check key, allowing the content to be retrieved later in the route. Useful for reducing memory when large payloads pass through processing steps that don't need them.", deprecated = false, properties = { - @YamlProperty(name = "aggregationStrategy", type = "string", description = "To use a custom AggregationStrategy instead of the default implementation. Notice you cannot use both custom aggregation strategy and configure data at the same time.", displayName = "Aggregation Strategy"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "filter", type = "string", description = "Specify a filter to control what data gets merged data back from the claim check repository. The following syntax is supported: body - to aggregate the message body attachments - to aggregate all the message attachments headers - to aggregate all the message headers header:pattern - to aggregate all the message headers that matches the pattern. The following pattern rules are applied in this order: exact match, returns true wildcard match (pattern ends with a and the name starts with the pattern), returns true regular expression match, returns true otherwise returns false You can specify multiple rules separated by comma. For example, the following includes the message body and all headers starting with foo: body,header:foo. The syntax supports the following prefixes which can be used to specify include,exclude, or remove - to include (which is the default mode) - - to exclude (exclude takes precedence over include) -- - to remove (remove takes precedence) For example to exclude a header name foo, and remove all headers starting with bar, -header:foo,--headers:bar Note you cannot have both include and exclude header:pattern at the same time.", displayName = "Filter"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "key", type = "string", description = "To use a specific key for claim check id (for dynamic keys use simple language syntax as the key).", displayName = "Key"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "operation", type = "enum:Get,GetAndRemove,Set,Push,Pop", description = "The claim check operation to use. The following operations are supported: Get - Gets (does not remove) the claim check by the given key. GetAndRemove - Gets and removes the claim check by the given key. Set - Sets a new (will override if key already exists) claim check with the given key. Push - Sets a new claim check on the stack (does not use key). Pop - Gets the latest claim check from the stack (does not use key).", displayName = "Operation") + @YamlProperty(name = "aggregationStrategy", type = "string", description = "Reference to a custom AggregationStrategy to use for merging data back from the claim check repository.", displayName = "Aggregation Strategy"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "The method name to use when using a POJO as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "filter", type = "string", description = "Specifies a filter to control what data gets merged back when using Get or Pop operations. Use body, headers, header:pattern to include only matching data.", displayName = "Filter"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "key", type = "string", description = "The unique claim check key to use for Get, GetAndRemove, and Set operations.", displayName = "Key"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "operation", type = "enum:Get,GetAndRemove,Set,Push,Pop", description = "The claim check operation to use. Get=retrieve, GetAndRemove=retrieve and remove, Set=store with key, Push=store on stack, Pop=retrieve from stack.", displayName = "Operation") } ) public static class ClaimCheckDefinitionDeserializer extends YamlDeserializerBase { @@ -2124,13 +2217,13 @@ protected boolean setProperty(ComponentScanDefinition target, String propertyKey types = org.apache.camel.model.language.ConstantExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Constant", - description = "A fixed value set only once during the route startup.", + description = "A fixed value set only once during the route startup", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class ConstantExpressionDeserializer extends YamlDeserializerBase { @@ -2195,11 +2288,11 @@ protected boolean setProperty(ConstantExpression target, String propertyKey, types = org.apache.camel.model.ContextScanDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Context Scan", - description = "Scans for Java org.apache.camel.builder.RouteBuilder instances in the context org.apache.camel.spi.Registry .", + description = "Scans for RouteBuilder instances in the Camel registry to auto-discover and register routes", deprecated = false, properties = { @YamlProperty(name = "excludes", type = "array:string", description = "Exclude finding route builder from these java package names.", displayName = "Excludes"), - @YamlProperty(name = "includeNonSingletons", type = "boolean", defaultValue = "false", description = "Whether to include non-singleton beans (prototypes) By default only singleton beans is included in the context scan", displayName = "Include Non Singletons"), + @YamlProperty(name = "includeNonSingletons", type = "boolean", defaultValue = "false", description = "Whether to include non-singleton beans (prototypes). By default only singleton beans are included in the context scan.", displayName = "Include Non Singletons"), @YamlProperty(name = "includes", type = "array:string", description = "Include finding route builder from these java package names.", displayName = "Includes") } ) @@ -2247,16 +2340,16 @@ protected boolean setProperty(ContextScanDefinition target, String propertyKey, types = org.apache.camel.model.ConvertBodyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Convert Body To", - description = "Converts the message body to another type", + description = "Converts the message body to a specified Java type using Camel's built-in type converters", deprecated = false, properties = { - @YamlProperty(name = "charset", type = "string", description = "To use a specific charset when converting", displayName = "Charset"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "mandatory", type = "boolean", defaultValue = "true", description = "When mandatory then the conversion must return a value (cannot be null), if this is not possible then NoTypeConversionAvailableException is thrown. Setting this to false could mean conversion is not possible and the value is null.", displayName = "Mandatory"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "type", type = "string", required = true, description = "The java type to convert to", displayName = "Type") + @YamlProperty(name = "charset", type = "string", description = "To use a specific charset when converting.", displayName = "Charset"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "mandatory", type = "boolean", defaultValue = "true", description = "Whether the conversion is mandatory. If mandatory and conversion is not possible, a NoTypeConversionAvailableException is thrown. Setting this to false means null may be returned if conversion is not possible.", displayName = "Mandatory"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "type", type = "string", required = true, description = "The java type to convert to.", displayName = "Type") } ) public static class ConvertBodyDefinitionDeserializer extends YamlDeserializerBase { @@ -2327,18 +2420,18 @@ protected boolean setProperty(ConvertBodyDefinition target, String propertyKey, types = org.apache.camel.model.ConvertHeaderDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Convert Header To", - description = "Converts the message header to another type", + description = "Converts a message header value to a specified Java type using Camel's built-in type converters", deprecated = false, properties = { - @YamlProperty(name = "charset", type = "string", description = "To use a specific charset when converting", displayName = "Charset"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "mandatory", type = "boolean", defaultValue = "true", description = "When mandatory then the conversion must return a value (cannot be null), if this is not possible then NoTypeConversionAvailableException is thrown. Setting this to false could mean conversion is not possible and the value is null.", displayName = "Mandatory"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of message header to convert its value The simple language can be used to define a dynamic evaluated header name to be used. Otherwise a constant name will be used.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "toName", type = "string", description = "To use another header to store the result. By default, the result is stored in the same header. This option allows to use another header. The simple language can be used to define a dynamic evaluated header name to be used. Otherwise a constant name will be used.", displayName = "To Name"), - @YamlProperty(name = "type", type = "string", required = true, description = "The java type to convert to", displayName = "Type") + @YamlProperty(name = "charset", type = "string", description = "To use a specific charset when converting.", displayName = "Charset"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "mandatory", type = "boolean", defaultValue = "true", description = "Whether the conversion is mandatory. If mandatory and conversion is not possible, a NoTypeConversionAvailableException is thrown. Setting this to false means null may be returned if conversion is not possible.", displayName = "Mandatory"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of message header to convert its value. The simple language can be used to define a dynamic evaluated header name.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "toName", type = "string", description = "To use another header to store the result. By default, the result is stored in the same header.", displayName = "To Name"), + @YamlProperty(name = "type", type = "string", required = true, description = "The java type to convert to.", displayName = "Type") } ) public static class ConvertHeaderDefinitionDeserializer extends YamlDeserializerBase { @@ -2414,18 +2507,18 @@ protected boolean setProperty(ConvertHeaderDefinition target, String propertyKey types = org.apache.camel.model.ConvertVariableDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Convert Variable To", - description = "Converts the variable to another type", + description = "Converts a variable value to a specified Java type using Camel's built-in type converters", deprecated = false, properties = { - @YamlProperty(name = "charset", type = "string", description = "To use a specific charset when converting", displayName = "Charset"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "mandatory", type = "boolean", defaultValue = "true", description = "When mandatory then the conversion must return a value (cannot be null), if this is not possible then NoTypeConversionAvailableException is thrown. Setting this to false could mean conversion is not possible and the value is null.", displayName = "Mandatory"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of variable to convert its value The simple language can be used to define a dynamic evaluated header name to be used. Otherwise a constant name will be used.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "toName", type = "string", description = "To use another variable to store the result. By default, the result is stored in the same variable. This option allows to use another variable. The simple language can be used to define a dynamic evaluated variable name to be used. Otherwise a constant name will be used.", displayName = "To Name"), - @YamlProperty(name = "type", type = "string", required = true, description = "The java type to convert to", displayName = "Type") + @YamlProperty(name = "charset", type = "string", description = "To use a specific charset when converting.", displayName = "Charset"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "mandatory", type = "boolean", defaultValue = "true", description = "Whether the conversion is mandatory. If mandatory and conversion is not possible, a NoTypeConversionAvailableException is thrown. Setting this to false means null may be returned if conversion is not possible.", displayName = "Mandatory"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of variable to convert its value. The simple language can be used to define a dynamic evaluated variable name.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "toName", type = "string", description = "To use another variable to store the result. By default, the result is stored in the same variable.", displayName = "To Name"), + @YamlProperty(name = "type", type = "string", required = true, description = "The java type to convert to.", displayName = "Type") } ) public static class ConvertVariableDefinitionDeserializer extends YamlDeserializerBase { @@ -2501,11 +2594,11 @@ protected boolean setProperty(ConvertVariableDefinition target, String propertyK types = org.apache.camel.model.dataformat.CryptoDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Crypto (Java Cryptographic Extension)", - description = "Encrypt and decrypt messages using Java Cryptography Extension (JCE).", + description = "Encrypt and decrypt messages using Java Cryptography Extension (JCE)", deprecated = false, properties = { @YamlProperty(name = "algorithm", type = "string", description = "The JCE algorithm name indicating the cryptographic algorithm that will be used.", displayName = "Algorithm"), - @YamlProperty(name = "algorithmParameterSpec", type = "string", description = "A JCE AlgorithmParameterSpec used to initialize the Cipher. Will lookup the type using the given name as a java.security.spec.AlgorithmParameterSpec type.", displayName = "Algorithm Parameter Spec"), + @YamlProperty(name = "algorithmParameterSpec", type = "string", description = "A JCE AlgorithmParameterSpec used to initialize the Cipher.", displayName = "Algorithm Parameter Spec"), @YamlProperty(name = "bufferSize", type = "number", defaultValue = "4096", description = "The size of the buffer used in the signature process.", displayName = "Buffer Size"), @YamlProperty(name = "cryptoProvider", type = "string", description = "The name of the JCE Security Provider that should be used.", displayName = "Crypto Provider"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @@ -2595,37 +2688,37 @@ protected boolean setProperty(CryptoDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.CsvDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "CSV", - description = "Handle CSV (Comma Separated Values) payloads.", + description = "Handle CSV (Comma Separated Values) payloads", deprecated = false, properties = { @YamlProperty(name = "allowMissingColumnNames", type = "boolean", defaultValue = "false", description = "Whether to allow missing column names.", displayName = "Allow Missing Column Names"), - @YamlProperty(name = "captureHeaderRecord", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should capture the header record and store it in the message header", displayName = "Capture Header Record"), + @YamlProperty(name = "captureHeaderRecord", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should capture the header record and store it in the message header.", displayName = "Capture Header Record"), @YamlProperty(name = "commentMarker", type = "string", description = "Sets the comment marker of the reference format.", displayName = "Comment Marker"), @YamlProperty(name = "commentMarkerDisabled", type = "boolean", defaultValue = "false", description = "Disables the comment marker of the reference format.", displayName = "Comment Marker Disabled"), - @YamlProperty(name = "delimiter", type = "string", description = "Sets the delimiter to use. The default value is , (comma)", displayName = "Delimiter"), - @YamlProperty(name = "escape", type = "string", description = "Sets the escape character to use", displayName = "Escape"), - @YamlProperty(name = "escapeDisabled", type = "boolean", defaultValue = "false", description = "Use for disabling using escape character", displayName = "Escape Disabled"), + @YamlProperty(name = "delimiter", type = "string", description = "The delimiter to use. The default value is , (comma).", displayName = "Delimiter"), + @YamlProperty(name = "escape", type = "string", description = "Sets the escape character to use.", displayName = "Escape"), + @YamlProperty(name = "escapeDisabled", type = "boolean", defaultValue = "false", description = "Whether to disable the escape character.", displayName = "Escape Disabled"), @YamlProperty(name = "format", type = "enum:DEFAULT,EXCEL,INFORMIX_UNLOAD,INFORMIX_UNLOAD_CSV,MONGODB_CSV,MONGODB_TSV,MYSQL,ORACLE,POSTGRESQL_CSV,POSTGRESQL_TEXT,RFC4180", defaultValue = "DEFAULT", description = "The format to use.", displayName = "Format"), @YamlProperty(name = "header", type = "string", description = "To configure the CSV headers. Multiple headers can be separated by comma.", displayName = "Header"), - @YamlProperty(name = "headerDisabled", type = "boolean", defaultValue = "false", description = "Use for disabling headers", displayName = "Header Disabled"), + @YamlProperty(name = "headerDisabled", type = "boolean", defaultValue = "false", description = "Whether to disable headers.", displayName = "Header Disabled"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "ignoreEmptyLines", type = "boolean", defaultValue = "false", description = "Whether to ignore empty lines.", displayName = "Ignore Empty Lines"), - @YamlProperty(name = "ignoreHeaderCase", type = "boolean", defaultValue = "false", description = "Sets whether or not to ignore case when accessing header names.", displayName = "Ignore Header Case"), - @YamlProperty(name = "ignoreSurroundingSpaces", type = "boolean", defaultValue = "false", description = "Whether to ignore surrounding spaces", displayName = "Ignore Surrounding Spaces"), + @YamlProperty(name = "ignoreHeaderCase", type = "boolean", defaultValue = "false", description = "Whether to ignore case when accessing header names.", displayName = "Ignore Header Case"), + @YamlProperty(name = "ignoreSurroundingSpaces", type = "boolean", defaultValue = "false", description = "Whether to ignore surrounding spaces.", displayName = "Ignore Surrounding Spaces"), @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at one.", displayName = "Lazy Load"), - @YamlProperty(name = "marshallerFactoryRef", type = "string", description = "Sets the implementation of the CsvMarshallerFactory interface which is able to customize marshalling/unmarshalling behavior by extending CsvMarshaller or creating it from scratch.", displayName = "Marshaller Factory Ref"), - @YamlProperty(name = "nullString", type = "string", description = "Sets the null string", displayName = "Null String"), - @YamlProperty(name = "nullStringDisabled", type = "boolean", defaultValue = "false", description = "Used to disable null strings", displayName = "Null String Disabled"), - @YamlProperty(name = "quote", type = "string", description = "Sets the quote to use which by default is double-quote character", displayName = "Quote"), - @YamlProperty(name = "quoteDisabled", type = "boolean", defaultValue = "false", description = "Used to disable quotes", displayName = "Quote Disabled"), - @YamlProperty(name = "quoteMode", type = "enum:ALL,ALL_NON_NULL,MINIMAL,NON_NUMERIC,NONE", description = "Sets the quote mode", displayName = "Quote Mode"), + @YamlProperty(name = "marshallerFactoryRef", type = "string", description = "Sets the implementation of the CsvMarshallerFactory interface which is able to customize marshalling/unmarshalling behavior.", displayName = "Marshaller Factory Ref"), + @YamlProperty(name = "nullString", type = "string", description = "Sets the null string.", displayName = "Null String"), + @YamlProperty(name = "nullStringDisabled", type = "boolean", defaultValue = "false", description = "Whether to disable null string handling.", displayName = "Null String Disabled"), + @YamlProperty(name = "quote", type = "string", description = "The quote character to use. The default is double-quote character.", displayName = "Quote"), + @YamlProperty(name = "quoteDisabled", type = "boolean", defaultValue = "false", description = "Whether to disable quoting.", displayName = "Quote Disabled"), + @YamlProperty(name = "quoteMode", type = "enum:ALL,ALL_NON_NULL,MINIMAL,NON_NUMERIC,NONE", description = "Sets the quote mode.", displayName = "Quote Mode"), @YamlProperty(name = "recordConverterRef", type = "string", description = "Refers to a custom CsvRecordConverter to lookup from the registry to use.", displayName = "Record Converter Ref"), - @YamlProperty(name = "recordSeparator", type = "string", description = "Sets the record separator (aka new line) which by default is new line characters (CRLF)", displayName = "Record Separator"), - @YamlProperty(name = "recordSeparatorDisabled", type = "string", description = "Used for disabling record separator", displayName = "Record Separator Disabled"), - @YamlProperty(name = "skipHeaderRecord", type = "boolean", defaultValue = "false", description = "Whether to skip the header record in the output", displayName = "Skip Header Record"), - @YamlProperty(name = "trailingDelimiter", type = "boolean", defaultValue = "false", description = "Sets whether or not to add a trailing delimiter.", displayName = "Trailing Delimiter"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "false", description = "Sets whether or not to trim leading and trailing blanks.", displayName = "Trim"), - @YamlProperty(name = "useMaps", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps (HashMap)for the lines values instead of lists. It requires to have header (either defined or collected).", displayName = "Use Maps"), + @YamlProperty(name = "recordSeparator", type = "string", description = "The record separator (aka new line) which by default is new line characters (CRLF).", displayName = "Record Separator"), + @YamlProperty(name = "recordSeparatorDisabled", type = "boolean", defaultValue = "false", description = "Whether to disable the record separator.", displayName = "Record Separator Disabled"), + @YamlProperty(name = "skipHeaderRecord", type = "boolean", defaultValue = "false", description = "Whether to skip the header record in the output.", displayName = "Skip Header Record"), + @YamlProperty(name = "trailingDelimiter", type = "boolean", defaultValue = "false", description = "Whether to add a trailing delimiter.", displayName = "Trailing Delimiter"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "false", description = "Whether to trim leading and trailing blanks.", displayName = "Trim"), + @YamlProperty(name = "useMaps", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps (HashMap) for the lines values instead of lists. It requires to have header (either defined or collected).", displayName = "Use Maps"), @YamlProperty(name = "useOrderedMaps", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce ordered maps (LinkedHashMap) for the lines values instead of lists. It requires to have header (either defined or collected).", displayName = "Use Ordered Maps") } ) @@ -2808,11 +2901,11 @@ protected boolean setProperty(CsvDataFormat target, String propertyKey, String p types = org.apache.camel.model.dataformat.CustomDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Custom", - description = "Delegate to a custom org.apache.camel.spi.DataFormat implementation via Camel registry.", + description = "Delegates to a custom DataFormat implementation looked up from the Camel registry by name", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the custom org.apache.camel.spi.DataFormat to lookup from the Camel registry.", displayName = "Ref") + @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the custom DataFormat to lookup from the Camel registry.", displayName = "Ref") } ) public static class CustomDataFormatDeserializer extends YamlDeserializerBase { @@ -2859,11 +2952,11 @@ protected boolean setProperty(CustomDataFormat target, String propertyKey, types = org.apache.camel.model.loadbalancer.CustomLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Custom Load Balancer", - description = "To use a custom load balancer implementation.", + description = "References a custom load balancer implementation from the registry", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ref", type = "string", required = true, description = "Refers to the custom load balancer to lookup from the registry", displayName = "Ref") + @YamlProperty(name = "ref", type = "string", required = true, description = "Refers to the custom load balancer to lookup from the registry.", displayName = "Ref") } ) public static class CustomLoadBalancerDefinitionDeserializer extends YamlDeserializerBase { @@ -2909,15 +3002,15 @@ protected boolean setProperty(CustomLoadBalancerDefinition target, String proper types = org.apache.camel.model.transformer.CustomTransformerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Custom Transformer", - description = "To use a custom transformer on a route level.", + description = "References a custom data type transformer implementation from the registry for route-level transformations", deprecated = false, properties = { - @YamlProperty(name = "className", type = "string", description = "Set a class name of the Transformer", displayName = "Class Name"), - @YamlProperty(name = "fromType", type = "string", description = "Set the 'from' data type name. If you specify 'xml:XYZ', the transformer will be picked up if source type is 'xml:XYZ'. If you specify just 'xml', the transformer matches with all of 'xml' source type like 'xml:ABC' or 'xml:DEF'.", displayName = "From Type"), - @YamlProperty(name = "name", type = "string", description = "Set the transformer name under which the transformer gets referenced when specifying the input/output data type on routes. If you specify a transformer name that matches a data type scheme like 'csv' the transformer will be picked up for all of 'csv:' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Name"), - @YamlProperty(name = "ref", type = "string", description = "Set a bean reference of the Transformer", displayName = "Ref"), - @YamlProperty(name = "scheme", type = "string", description = "Set a scheme name supported by the transformer. If you specify 'csv', the transformer will be picked up for all of 'csv' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), - @YamlProperty(name = "toType", type = "string", description = "Set the 'to' data type name. If you specify 'json:XYZ', the transformer will be picked up if destination type is 'json:XYZ'. If you specify just 'json', the transformer matches with all of 'json' destination type like 'json:ABC' or 'json:DEF'.", displayName = "To Type") + @YamlProperty(name = "className", type = "string", description = "Fully qualified class name of the custom Transformer implementation.", displayName = "Class Name"), + @YamlProperty(name = "fromType", type = "string", description = "The source (from) data type name. If you specify 'xml:XYZ', the transformer is picked up when source type matches. If you specify just 'xml', it matches all xml source types.", displayName = "From Type"), + @YamlProperty(name = "name", type = "string", description = "Name under which the transformer gets referenced when specifying input/output data type on routes. If the name matches a data type scheme, the transformer will be picked up as a fallback.", displayName = "Name"), + @YamlProperty(name = "ref", type = "string", description = "Reference to a custom Transformer bean in the registry.", displayName = "Ref"), + @YamlProperty(name = "scheme", type = "string", description = "Scheme name supported by the transformer. If specified, the transformer will be picked up for all from/to transformation of this scheme. Scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), + @YamlProperty(name = "toType", type = "string", description = "The destination (to) data type name. If you specify 'json:XYZ', the transformer is picked up when destination type matches. If you specify just 'json', it matches all json destination types.", displayName = "To Type") } ) public static class CustomTransformerDefinitionDeserializer extends YamlDeserializerBase { @@ -2978,12 +3071,12 @@ protected boolean setProperty(CustomTransformerDefinition target, String propert types = org.apache.camel.model.validator.CustomValidatorDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Custom Validator", - description = "To use a custom validator on the route level.", + description = "References a custom data type validator implementation from the registry for route-level validation", deprecated = false, properties = { - @YamlProperty(name = "className", type = "string", description = "Set a class name of the Validator", displayName = "Class Name"), - @YamlProperty(name = "ref", type = "string", description = "Set a bean reference of the Validator", displayName = "Ref"), - @YamlProperty(name = "type", type = "string", description = "Set the data type name. If you specify 'xml:XYZ', the validator will be picked up if message type is 'xml:XYZ'. If you specify just 'xml', the validator matches with all of 'xml' message type like 'xml:ABC' or 'xml:DEF'.", displayName = "Type") + @YamlProperty(name = "className", type = "string", description = "Fully qualified class name of the custom Validator implementation.", displayName = "Class Name"), + @YamlProperty(name = "ref", type = "string", description = "Reference to a custom Validator bean in the registry.", displayName = "Ref"), + @YamlProperty(name = "type", type = "string", 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.", displayName = "Type") } ) public static class CustomValidatorDefinitionDeserializer extends YamlDeserializerBase { @@ -3062,7 +3155,7 @@ protected boolean setProperty(DataFormatDefinition target, String propertyKey, types = org.apache.camel.model.transformer.DataFormatTransformerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Data Format Transformer", - description = "Represents a org.apache.camel.processor.transformer.DataFormatTransformer which leverages org.apache.camel.spi.DataFormat to perform transformation. One of the DataFormat 'ref' or DataFormat 'type' needs to be specified.", + description = "Uses a Camel data format to perform data type transformation between input and output types", deprecated = false, properties = { @YamlProperty(name = "asn1", type = "object:org.apache.camel.model.dataformat.ASN1DataFormat", oneOf = "dataFormatType"), @@ -3080,7 +3173,7 @@ protected boolean setProperty(DataFormatDefinition target, String propertyKey, @YamlProperty(name = "fhirXml", type = "object:org.apache.camel.model.dataformat.FhirXmlDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "flatpack", type = "object:org.apache.camel.model.dataformat.FlatpackDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "fory", type = "object:org.apache.camel.model.dataformat.ForyDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "fromType", type = "string", description = "Set the 'from' data type name. If you specify 'xml:XYZ', the transformer will be picked up if source type is 'xml:XYZ'. If you specify just 'xml', the transformer matches with all of 'xml' source type like 'xml:ABC' or 'xml:DEF'.", displayName = "From Type"), + @YamlProperty(name = "fromType", type = "string", description = "The source (from) data type name. If you specify 'xml:XYZ', the transformer is picked up when source type matches. If you specify just 'xml', it matches all xml source types.", displayName = "From Type"), @YamlProperty(name = "grok", type = "object:org.apache.camel.model.dataformat.GrokDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "groovyJson", type = "object:org.apache.camel.model.dataformat.GroovyJSonDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "groovyXml", type = "object:org.apache.camel.model.dataformat.GroovyXmlDataFormat", oneOf = "dataFormatType"), @@ -3094,12 +3187,14 @@ protected boolean setProperty(DataFormatDefinition target, String propertyKey, @YamlProperty(name = "jsonApi", type = "object:org.apache.camel.model.dataformat.JsonApiDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "lzf", type = "object:org.apache.camel.model.dataformat.LZFDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "mimeMultipart", type = "object:org.apache.camel.model.dataformat.MimeMultipartDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "name", type = "string", description = "Set the transformer name under which the transformer gets referenced when specifying the input/output data type on routes. If you specify a transformer name that matches a data type scheme like 'csv' the transformer will be picked up for all of 'csv:' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Name"), + @YamlProperty(name = "name", type = "string", description = "Name under which the transformer gets referenced when specifying input/output data type on routes. If the name matches a data type scheme, the transformer will be picked up as a fallback.", displayName = "Name"), + @YamlProperty(name = "ocsf", type = "object:org.apache.camel.model.dataformat.OcsfDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "parquetAvro", type = "object:org.apache.camel.model.dataformat.ParquetAvroDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "pgp", type = "object:org.apache.camel.model.dataformat.PGPDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "pqc", type = "object:org.apache.camel.model.dataformat.PQCDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "protobuf", type = "object:org.apache.camel.model.dataformat.ProtobufDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "rss", type = "object:org.apache.camel.model.dataformat.RssDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "scheme", type = "string", description = "Set a scheme name supported by the transformer. If you specify 'csv', the transformer will be picked up for all of 'csv' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), + @YamlProperty(name = "scheme", type = "string", description = "Scheme name supported by the transformer. If specified, the transformer will be picked up for all from/to transformation of this scheme. Scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), @YamlProperty(name = "smooks", type = "object:org.apache.camel.model.dataformat.SmooksDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "soap", type = "object:org.apache.camel.model.dataformat.SoapDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "swiftMt", type = "object:org.apache.camel.model.dataformat.SwiftMtDataFormat", oneOf = "dataFormatType"), @@ -3107,7 +3202,7 @@ protected boolean setProperty(DataFormatDefinition target, String propertyKey, @YamlProperty(name = "syslog", type = "object:org.apache.camel.model.dataformat.SyslogDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "tarFile", type = "object:org.apache.camel.model.dataformat.TarFileDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "thrift", type = "object:org.apache.camel.model.dataformat.ThriftDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "toType", type = "string", description = "Set the 'to' data type name. If you specify 'json:XYZ', the transformer will be picked up if destination type is 'json:XYZ'. If you specify just 'json', the transformer matches with all of 'json' destination type like 'json:ABC' or 'json:DEF'.", displayName = "To Type"), + @YamlProperty(name = "toType", type = "string", description = "The destination (to) data type name. If you specify 'json:XYZ', the transformer is picked up when destination type matches. If you specify just 'json', it matches all json destination types.", displayName = "To Type"), @YamlProperty(name = "univocityCsv", type = "object:org.apache.camel.model.dataformat.UniVocityCsvDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "univocityFixed", type = "object:org.apache.camel.model.dataformat.UniVocityFixedDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "univocityTsv", type = "object:org.apache.camel.model.dataformat.UniVocityTsvDataFormat", oneOf = "dataFormatType"), @@ -3277,11 +3372,26 @@ protected boolean setProperty(DataFormatTransformerDefinition target, String pro target.setDataFormatType(val); break; } + case "ocsf": { + org.apache.camel.model.dataformat.OcsfDataFormat val = asType(node, org.apache.camel.model.dataformat.OcsfDataFormat.class); + target.setDataFormatType(val); + break; + } case "parquetAvro": { org.apache.camel.model.dataformat.ParquetAvroDataFormat val = asType(node, org.apache.camel.model.dataformat.ParquetAvroDataFormat.class); target.setDataFormatType(val); break; } + case "pgp": { + org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); + target.setDataFormatType(val); + break; + } + case "pqc": { + org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); + target.setDataFormatType(val); + break; + } case "protobuf": { org.apache.camel.model.dataformat.ProtobufDataFormat val = asType(node, org.apache.camel.model.dataformat.ProtobufDataFormat.class); target.setDataFormatType(val); @@ -3347,11 +3457,6 @@ protected boolean setProperty(DataFormatTransformerDefinition target, String pro target.setDataFormatType(val); break; } - case "pgp": { - org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); - target.setDataFormatType(val); - break; - } case "yaml": { org.apache.camel.model.dataformat.YAMLDataFormat val = asType(node, org.apache.camel.model.dataformat.YAMLDataFormat.class); target.setDataFormatType(val); @@ -3400,7 +3505,7 @@ protected boolean setProperty(DataFormatTransformerDefinition target, String pro types = org.apache.camel.model.dataformat.DataFormatsDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Data formats", - description = "Configure data formats.", + description = "Container for defining data format configurations", deprecated = false, properties = { @YamlProperty(name = "asn1", type = "object:org.apache.camel.model.dataformat.ASN1DataFormat"), @@ -3431,8 +3536,10 @@ protected boolean setProperty(DataFormatTransformerDefinition target, String pro @YamlProperty(name = "jsonApi", type = "object:org.apache.camel.model.dataformat.JsonApiDataFormat"), @YamlProperty(name = "lzf", type = "object:org.apache.camel.model.dataformat.LZFDataFormat"), @YamlProperty(name = "mimeMultipart", type = "object:org.apache.camel.model.dataformat.MimeMultipartDataFormat"), + @YamlProperty(name = "ocsf", type = "object:org.apache.camel.model.dataformat.OcsfDataFormat"), @YamlProperty(name = "parquetAvro", type = "object:org.apache.camel.model.dataformat.ParquetAvroDataFormat"), @YamlProperty(name = "pgp", type = "object:org.apache.camel.model.dataformat.PGPDataFormat"), + @YamlProperty(name = "pqc", type = "object:org.apache.camel.model.dataformat.PQCDataFormat"), @YamlProperty(name = "protobuf", type = "object:org.apache.camel.model.dataformat.ProtobufDataFormat"), @YamlProperty(name = "rss", type = "object:org.apache.camel.model.dataformat.RssDataFormat"), @YamlProperty(name = "smooks", type = "object:org.apache.camel.model.dataformat.SmooksDataFormat"), @@ -3751,6 +3858,16 @@ protected boolean setProperty(DataFormatsDefinition target, String propertyKey, target.setDataFormats(existing); break; } + case "ocsf": { + org.apache.camel.model.dataformat.OcsfDataFormat val = asType(node, org.apache.camel.model.dataformat.OcsfDataFormat.class); + java.util.List existing = target.getDataFormats(); + if (existing == null) { + existing = new java.util.ArrayList<>(); + } + existing.add(val); + target.setDataFormats(existing); + break; + } case "parquetAvro": { org.apache.camel.model.dataformat.ParquetAvroDataFormat val = asType(node, org.apache.camel.model.dataformat.ParquetAvroDataFormat.class); java.util.List existing = target.getDataFormats(); @@ -3771,6 +3888,16 @@ protected boolean setProperty(DataFormatsDefinition target, String propertyKey, target.setDataFormats(existing); break; } + case "pqc": { + org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); + java.util.List existing = target.getDataFormats(); + if (existing == null) { + existing = new java.util.ArrayList<>(); + } + existing.add(val); + target.setDataFormats(existing); + break; + } case "protobuf": { org.apache.camel.model.dataformat.ProtobufDataFormat val = asType(node, org.apache.camel.model.dataformat.ProtobufDataFormat.class); java.util.List existing = target.getDataFormats(); @@ -3945,16 +4072,16 @@ protected boolean setProperty(DataFormatsDefinition target, String propertyKey, types = org.apache.camel.model.language.DatasonnetExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "DataSonnet", - description = "To use DataSonnet scripts for message transformations.", + description = "To use DataSonnet scripts for message transformations", deprecated = false, properties = { - @YamlProperty(name = "bodyMediaType", type = "string", description = "The String representation of the message's body MediaType", displayName = "Body Media Type"), - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "outputMediaType", type = "string", description = "The String representation of the MediaType to output", displayName = "Output Media Type"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "bodyMediaType", type = "string", description = "The media type of the message body, such as application/json.", displayName = "Body Media Type"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "outputMediaType", type = "string", description = "The media type to use for the output result.", displayName = "Output Media Type"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class DatasonnetExpressionDeserializer extends YamlDeserializerBase { @@ -4034,24 +4161,24 @@ protected boolean setProperty(DatasonnetExpression target, String propertyKey, types = org.apache.camel.model.errorhandler.DeadLetterChannelDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Dead Letter Channel", - description = "Error handler with dead letter queue.", + description = "Error handler that moves failed messages to a dead letter endpoint after exhausting redelivery attempts", deprecated = false, properties = { - @YamlProperty(name = "deadLetterHandleNewException", type = "boolean", defaultValue = "true", description = "Whether the dead letter channel should handle (and ignore) any new exception that may been thrown during sending the message to the dead letter endpoint. The default value is true which means any such kind of exception is handled and ignored. Set this to false to let the exception be propagated back on the org.apache.camel.Exchange . This can be used in situations where you use transactions, and want to use Camel's dead letter channel to deal with exceptions during routing, but if the dead letter channel itself fails because of a new exception being thrown, then by setting this to false the new exceptions is propagated back and set on the org.apache.camel.Exchange , which allows the transaction to detect the exception, and rollback.", displayName = "Dead Letter Handle New Exception"), - @YamlProperty(name = "deadLetterUri", type = "string", required = true, description = "The dead letter endpoint uri for the Dead Letter error handler.", displayName = "Dead Letter Uri"), - @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used by the error handler", displayName = "Executor Service Ref"), + @YamlProperty(name = "deadLetterHandleNewException", type = "boolean", defaultValue = "true", description = "Whether the dead letter channel should handle (and ignore) any new exception thrown while sending the exchange to the dead letter endpoint. Set to false to propagate the new exception back, which is useful with transactions so the transaction can detect the failure and rollback.", displayName = "Dead Letter Handle New Exception"), + @YamlProperty(name = "deadLetterUri", type = "string", required = true, description = "The endpoint URI where failed exchanges are sent after all redelivery attempts have been exhausted (the dead letter queue).", displayName = "Dead Letter Uri"), + @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used for asynchronous redelivery.", displayName = "Executor Service Ref"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "Logging level to use by error handler", displayName = "Level"), - @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler", displayName = "Log Name"), - @YamlProperty(name = "loggerRef", type = "string", description = "References to a logger to use as logger for the error handler", displayName = "Logger Ref"), - @YamlProperty(name = "onExceptionOccurredRef", type = "string", description = "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", displayName = "On Exception Occurred Ref"), - @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor / dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), - @YamlProperty(name = "onRedeliveryRef", type = "string", description = "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", displayName = "On Redelivery Ref"), - @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "Sets the redelivery settings", displayName = "Redelivery Policy"), - @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", displayName = "Redelivery Policy Ref"), - @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false.", displayName = "Retry While Ref"), - @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Body"), - @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Message") + @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "The logging level to use when logging caught exceptions.", displayName = "Level"), + @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler.", displayName = "Log Name"), + @YamlProperty(name = "loggerRef", type = "string", description = "Sets a reference to a logger to use for logging error handler activity.", displayName = "Logger Ref"), + @YamlProperty(name = "onExceptionOccurredRef", type = "string", 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.", displayName = "On Exception Occurred Ref"), + @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the exchange before handled by the failure processor or dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), + @YamlProperty(name = "onRedeliveryRef", type = "string", 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.", displayName = "On Redelivery Ref"), + @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "The redelivery settings for configuring retry attempts and delays when message processing fails.", displayName = "Redelivery Policy"), + @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a redelivery policy to lookup in the registry to be used.", displayName = "Redelivery Policy Ref"), + @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a reference to a retry while predicate. Redelivery continues as long as the predicate evaluates to true.", displayName = "Retry While Ref"), + @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "If enabled, uses the original input message body (but not headers) when the exchange is moved to the dead letter queue after all redelivery attempts have been exhausted. This allows enriching the message with custom headers while keeping the original body. Cannot be used together with useOriginalMessage.", displayName = "Use Original Body"), + @YamlProperty(name = "useOriginalMessage", type = "boolean", 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.", displayName = "Use Original Message") } ) public static class DeadLetterChannelDefinitionDeserializer extends YamlDeserializerBase { @@ -4157,22 +4284,22 @@ protected boolean setProperty(DeadLetterChannelDefinition target, String propert types = org.apache.camel.model.errorhandler.DefaultErrorHandlerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Default Error Handler", - description = "The default error handler.", + description = "The default error handler that supports redelivery with configurable retry policies and delay patterns", deprecated = false, properties = { - @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used by the error handler", displayName = "Executor Service Ref"), + @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used for asynchronous redelivery.", displayName = "Executor Service Ref"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "Logging level to use by error handler", displayName = "Level"), - @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler", displayName = "Log Name"), - @YamlProperty(name = "loggerRef", type = "string", description = "References to a logger to use as logger for the error handler", displayName = "Logger Ref"), - @YamlProperty(name = "onExceptionOccurredRef", type = "string", description = "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", displayName = "On Exception Occurred Ref"), - @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor / dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), - @YamlProperty(name = "onRedeliveryRef", type = "string", description = "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", displayName = "On Redelivery Ref"), - @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "Sets the redelivery settings", displayName = "Redelivery Policy"), - @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", displayName = "Redelivery Policy Ref"), - @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false.", displayName = "Retry While Ref"), - @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Body"), - @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Message") + @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "The logging level to use when logging caught exceptions.", displayName = "Level"), + @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler.", displayName = "Log Name"), + @YamlProperty(name = "loggerRef", type = "string", description = "Sets a reference to a logger to use for logging error handler activity.", displayName = "Logger Ref"), + @YamlProperty(name = "onExceptionOccurredRef", type = "string", 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.", displayName = "On Exception Occurred Ref"), + @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the exchange before handled by the failure processor or dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), + @YamlProperty(name = "onRedeliveryRef", type = "string", 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.", displayName = "On Redelivery Ref"), + @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "The redelivery settings for configuring retry attempts and delays when message processing fails.", displayName = "Redelivery Policy"), + @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a redelivery policy to lookup in the registry to be used.", displayName = "Redelivery Policy Ref"), + @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a reference to a retry while predicate. Redelivery continues as long as the predicate evaluates to true.", displayName = "Retry While Ref"), + @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "If enabled, uses the original input message body (but not headers) when the exchange is moved to the dead letter queue after all redelivery attempts have been exhausted. This allows enriching the message with custom headers while keeping the original body. Cannot be used together with useOriginalMessage.", displayName = "Use Original Body"), + @YamlProperty(name = "useOriginalMessage", type = "boolean", 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.", displayName = "Use Original Message") } ) public static class DefaultErrorHandlerDefinitionDeserializer extends YamlDeserializerBase { @@ -4268,18 +4395,18 @@ protected boolean setProperty(DefaultErrorHandlerDefinition target, String prope types = org.apache.camel.model.DelayDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Delay", - description = "Delays processing for a specified length of time", + description = "Delays message processing for a specified duration, which can be a fixed value or computed dynamically per message", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), @YamlProperty(name = "asyncDelayed", type = "boolean", defaultValue = "true", description = "Enables asynchronous delay which means the thread will not block while delaying.", displayName = "Async Delayed"), - @YamlProperty(name = "callerRunsWhenRejected", type = "boolean", defaultValue = "true", description = "Whether or not the caller should run the task when it was rejected by the thread pool. Is by default true", displayName = "Caller Runs When Rejected"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "executorService", type = "string", description = "To use a custom Thread Pool if asyncDelay has been enabled.", displayName = "Executor Service"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to define how long time to wait (in millis)", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "callerRunsWhenRejected", type = "boolean", defaultValue = "true", description = "Whether or not the caller should run the task when it was rejected by the thread pool.", displayName = "Caller Runs When Rejected"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "executorService", type = "string", description = "To use a custom thread pool if asyncDelay has been enabled.", displayName = "Executor Service"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression that determines the delay duration in milliseconds.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class DelayDefinitionDeserializer extends YamlDeserializerBase { @@ -4359,32 +4486,32 @@ protected boolean setProperty(DelayDefinition target, String propertyKey, types = org.apache.camel.model.rest.DeleteDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Delete", - description = "Rest DELETE command", + description = "Defines an HTTP DELETE operation in the REST DSL", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. The default value is true.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), @YamlProperty(name = "deprecated", type = "boolean", defaultValue = "false", description = "Marks this rest operation as deprecated in OpenApi documentation.", displayName = "Deprecated"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data. This option will override what may be configured on a parent level.", displayName = "Out Type"), @YamlProperty(name = "param", type = "array:org.apache.camel.model.rest.ParamDefinition", description = "Information about parameters for this REST operation", displayName = "Param"), @YamlProperty(name = "path", type = "string", description = "The path mapping URIs of this REST operation such as /{id}.", displayName = "Path"), - @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), @YamlProperty(name = "responseMessage", type = "array:org.apache.camel.model.rest.ResponseMessageDefinition", description = "Response details for this REST operation", displayName = "Response Message"), - @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), + @YamlProperty(name = "routeId", type = "string", description = "The route id this REST service will refer to.", displayName = "Route Id"), @YamlProperty(name = "security", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Security settings for this REST operation", displayName = "Security"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "streamCache", type = "boolean", defaultValue = "false", description = "Whether stream caching is enabled on this rest operation.", displayName = "Stream Cache"), @YamlProperty(name = "to", type = "object:org.apache.camel.model.ToDefinition", description = "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", displayName = "To"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data. This option will override what may be configured on a parent level.", displayName = "Type") } ) public static class DeleteDefinitionDeserializer extends YamlDeserializerBase { @@ -4531,7 +4658,7 @@ protected boolean setProperty(DeleteDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.DfdlDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "DFDL", - description = "Transforms fixed format data such as EDI message from/to XML using a Data Format Description Language (DFDL).", + description = "Transforms fixed format data such as EDI message from/to XML using a Data Format Description Language (DFDL)", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @@ -4593,18 +4720,18 @@ protected boolean setProperty(DfdlDataFormat target, String propertyKey, types = org.apache.camel.model.DynamicRouterDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Dynamic Router", - description = "Route messages based on dynamic rules", + description = "Routes a message step-by-step through a series of endpoints, determined dynamically by calling an expression repeatedly. The expression is called after each hop and returns the next endpoint, or null to stop.", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this dynamic router, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise producers/endpoints are stored in memory in the caches. However if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both producers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non frequent used producers.", displayName = "Cache Size"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to call that returns the endpoint(s) to route to in the dynamic routing. Important: The expression will be called in a while loop fashion, until the expression returns null which means the dynamic router is finished.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreInvalidEndpoints", type = "boolean", defaultValue = "false", description = "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", displayName = "Ignore Invalid Endpoints"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "uriDelimiter", type = "string", defaultValue = ",", description = "Sets the uri delimiter to use", displayName = "Uri Delimiter") + @YamlProperty(name = "cacheSize", type = "number", 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.", displayName = "Cache Size"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", 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.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "ignoreInvalidEndpoints", type = "boolean", defaultValue = "false", description = "If enabled then invalid endpoint URIs are ignored and logged instead of throwing an exception.", displayName = "Ignore Invalid Endpoints"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "uriDelimiter", type = "string", defaultValue = ",", description = "The delimiter used to separate endpoint URIs when the expression returns multiple endpoints. Default is comma.", displayName = "Uri Delimiter") } ) public static class DynamicRouterDefinitionDeserializer extends YamlDeserializerBase { @@ -4684,15 +4811,15 @@ protected boolean setProperty(DynamicRouterDefinition target, String propertyKey types = org.apache.camel.model.transformer.EndpointTransformerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Endpoint Transformer", - description = "To use a Camel endpoint to perform transformation on the route level.", + description = "Uses a Camel endpoint to perform data type transformation by sending the message through the endpoint", deprecated = false, properties = { - @YamlProperty(name = "fromType", type = "string", description = "Set the 'from' data type name. If you specify 'xml:XYZ', the transformer will be picked up if source type is 'xml:XYZ'. If you specify just 'xml', the transformer matches with all of 'xml' source type like 'xml:ABC' or 'xml:DEF'.", displayName = "From Type"), - @YamlProperty(name = "name", type = "string", description = "Set the transformer name under which the transformer gets referenced when specifying the input/output data type on routes. If you specify a transformer name that matches a data type scheme like 'csv' the transformer will be picked up for all of 'csv:' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Name"), - @YamlProperty(name = "ref", type = "string", description = "Set the reference of the Endpoint.", displayName = "Ref"), - @YamlProperty(name = "scheme", type = "string", description = "Set a scheme name supported by the transformer. If you specify 'csv', the transformer will be picked up for all of 'csv' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), - @YamlProperty(name = "toType", type = "string", description = "Set the 'to' data type name. If you specify 'json:XYZ', the transformer will be picked up if destination type is 'json:XYZ'. If you specify just 'json', the transformer matches with all of 'json' destination type like 'json:ABC' or 'json:DEF'.", displayName = "To Type"), - @YamlProperty(name = "uri", type = "string", description = "Set the URI of the Endpoint.", displayName = "Uri") + @YamlProperty(name = "fromType", type = "string", description = "The source (from) data type name. If you specify 'xml:XYZ', the transformer is picked up when source type matches. If you specify just 'xml', it matches all xml source types.", displayName = "From Type"), + @YamlProperty(name = "name", type = "string", description = "Name under which the transformer gets referenced when specifying input/output data type on routes. If the name matches a data type scheme, the transformer will be picked up as a fallback.", displayName = "Name"), + @YamlProperty(name = "ref", type = "string", description = "Reference of the Endpoint used for transformation.", displayName = "Ref"), + @YamlProperty(name = "scheme", type = "string", description = "Scheme name supported by the transformer. If specified, the transformer will be picked up for all from/to transformation of this scheme. Scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), + @YamlProperty(name = "toType", type = "string", description = "The destination (to) data type name. If you specify 'json:XYZ', the transformer is picked up when destination type matches. If you specify just 'json', it matches all json destination types.", displayName = "To Type"), + @YamlProperty(name = "uri", type = "string", description = "URI of the Endpoint used for transformation.", displayName = "Uri") } ) public static class EndpointTransformerDefinitionDeserializer extends YamlDeserializerBase { @@ -4753,12 +4880,12 @@ protected boolean setProperty(EndpointTransformerDefinition target, String prope types = org.apache.camel.model.validator.EndpointValidatorDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Endpoint Validator", - description = "To use a Camel endpoint to perform validation on the route level.", + description = "Uses a Camel endpoint to perform data type validation by sending the message through the endpoint", deprecated = false, properties = { - @YamlProperty(name = "ref", type = "string", description = "Set the reference of the Endpoint.", displayName = "Ref"), - @YamlProperty(name = "type", type = "string", description = "Set the data type name. If you specify 'xml:XYZ', the validator will be picked up if message type is 'xml:XYZ'. If you specify just 'xml', the validator matches with all of 'xml' message type like 'xml:ABC' or 'xml:DEF'.", displayName = "Type"), - @YamlProperty(name = "uri", type = "string", description = "Set the URI of the Endpoint.", displayName = "Uri") + @YamlProperty(name = "ref", type = "string", description = "Reference of the Endpoint used for validation.", displayName = "Ref"), + @YamlProperty(name = "type", type = "string", 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.", displayName = "Type"), + @YamlProperty(name = "uri", type = "string", description = "URI of the Endpoint used for validation.", displayName = "Uri") } ) public static class EndpointValidatorDefinitionDeserializer extends YamlDeserializerBase { @@ -4804,26 +4931,26 @@ protected boolean setProperty(EndpointValidatorDefinition target, String propert types = org.apache.camel.model.EnrichDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Enrich", - description = "Enriches a message with data from a secondary resource", + description = "Enriches the message with additional data obtained by sending to another endpoint using request-reply. The reply is merged into the original message using an aggregation strategy.", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "aggregateOnException", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method. For example to suppress the exception or set a custom message body etc.", displayName = "Aggregate On Exception"), + @YamlProperty(name = "aggregateOnException", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method.", displayName = "Aggregate On Exception"), @YamlProperty(name = "aggregationStrategy", type = "string", 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.", displayName = "Aggregation Strategy"), @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "string", description = "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise enricher if they are org.apache.camel.spi.SendDynamicAware", displayName = "Allow Optimised Components"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicitly declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise enricher if they are SendDynamicAware.", displayName = "Allow Optimised Components"), @YamlProperty(name = "autoStartComponents", type = "boolean", defaultValue = "true", description = "Whether to auto startup components when enricher is starting up.", displayName = "Auto Start Components"), - @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producer when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise producers/endpoints are stored in memory in the caches. However if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both producers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non frequent used producers.", displayName = "Cache Size"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression that computes the endpoint uri to use as the resource endpoint to enrich from", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreInvalidEndpoint", type = "boolean", defaultValue = "false", description = "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", displayName = "Ignore Invalid Endpoint"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the org.apache.camel.spi.UnitOfWork with the parent and the resource exchange. Enrich will by default not share unit of work between the parent exchange and the resource exchange. This means the resource exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), - @YamlProperty(name = "variableReceive", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Receive"), - @YamlProperty(name = "variableSend", type = "string", 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. Important: When using receive variable then the received body is stored only in this variable and not on the current message.", displayName = "Variable Send") + @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the ProducerCache which is used to cache and reuse producers when uris are reused. Use 0 for default cache size, or -1 to turn cache off.", displayName = "Cache Size"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression to compute the endpoint URI to enrich from.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "ignoreInvalidEndpoint", type = "boolean", defaultValue = "false", description = "Whether to ignore an invalid endpoint URI when trying to create a producer with that endpoint.", displayName = "Ignore Invalid Endpoint"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the UnitOfWork with the parent and the resource exchange. Enrich will by default not share unit of work between the parent exchange and the resource exchange. This means the resource exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), + @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive"), + @YamlProperty(name = "variableSend", type = "string", 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.", displayName = "Variable Send") } ) public static class EnrichDefinitionDeserializer extends YamlDeserializerBase { @@ -4943,7 +5070,7 @@ protected boolean setProperty(EnrichDefinition target, String propertyKey, types = org.apache.camel.model.ErrorHandlerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Error Handler", - description = "Camel error handling.", + description = "Configures error handling strategy for routes, controlling how failed exchanges are handled and redelivered", deprecated = false, properties = { @YamlProperty(name = "deadLetterChannel", type = "object:org.apache.camel.model.errorhandler.DeadLetterChannelDefinition", oneOf = "errorHandlerType"), @@ -5024,12 +5151,12 @@ protected boolean setProperty(ErrorHandlerDefinition target, String propertyKey, types = org.apache.camel.model.language.ExchangePropertyExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "ExchangeProperty", - description = "Gets a property from the Exchange.", + description = "Gets a property from the Exchange", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class ExchangePropertyExpressionDeserializer extends YamlDeserializerBase { @@ -5089,15 +5216,15 @@ protected boolean setProperty(ExchangePropertyExpression target, String property types = org.apache.camel.model.loadbalancer.FailoverLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Failover Load Balancer", - description = "In case of failures the exchange will be tried on the next endpoint.", + description = "Load balancer that tries the next endpoint in case of failure, cycling through available endpoints until one succeeds", deprecated = false, properties = { - @YamlProperty(name = "exception", type = "array:string", description = "A list of class names for specific exceptions to monitor. If no exceptions are configured then all exceptions are monitored", displayName = "Exception"), + @YamlProperty(name = "exception", type = "array:string", description = "A list of class names for specific exceptions to monitor. If no exceptions are configured then all exceptions are monitored.", displayName = "Exception"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "inheritErrorHandler", type = "boolean", defaultValue = "true", description = "To turn off Camel error handling during load balancing. By default, Camel error handler will attempt calling a service, which means you can specify retires and other fine-grained settings. And only when Camel error handler have failed all attempts, then this load balancer will fail over to the next endpoint and try again. You can turn this off, and then this load balancer will fail over immediately on an error.", displayName = "Inherit Error Handler"), - @YamlProperty(name = "maximumFailoverAttempts", type = "string", defaultValue = "-1", description = "A value to indicate after X failover attempts we should exhaust (give up). Use -1 to indicate never give up and continuously try to failover. Use 0 to never failover. And use e.g. 3 to failover at most 3 times before giving up. This option can be used whether roundRobin is enabled or not.", displayName = "Maximum Failover Attempts"), - @YamlProperty(name = "roundRobin", type = "boolean", defaultValue = "false", description = "Whether or not the failover load balancer should operate in round robin mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If round robin is enabled, then it keeps state and will continue with the next endpoint in a round robin fashion. You can also enable sticky mode together with round robin, if so then it will pick the last known good endpoint to use when starting the load balancing (instead of using the next when starting).", displayName = "Round Robin"), - @YamlProperty(name = "sticky", type = "boolean", defaultValue = "false", description = "Whether or not the failover load balancer should operate in sticky mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If sticky is enabled, then it keeps state and will continue with the last known good endpoint. You can also enable sticky mode together with round robin, if so then it will pick the last known good endpoint to use when starting the load balancing (instead of using the next when starting).", displayName = "Sticky") + @YamlProperty(name = "inheritErrorHandler", type = "boolean", defaultValue = "true", description = "Whether to inherit the error handler. If turned off, the load balancer will fail over immediately on an error instead of waiting for Camel error handler to exhaust retries.", displayName = "Inherit Error Handler"), + @YamlProperty(name = "maximumFailoverAttempts", type = "string", defaultValue = "-1", description = "A value to indicate after X failover attempts we should exhaust (give up). Use -1 to indicate never give up and continuously try to failover. Use 0 to never failover. Use e.g. 3 to failover at most 3 times before giving up.", displayName = "Maximum Failover Attempts"), + @YamlProperty(name = "roundRobin", type = "boolean", defaultValue = "false", description = "Whether to use round robin mode. If enabled, the load balancer keeps state and continues with the next endpoint in a round robin fashion. If not, it always starts from the first endpoint for every message.", displayName = "Round Robin"), + @YamlProperty(name = "sticky", type = "boolean", defaultValue = "false", description = "Whether to use sticky mode. If enabled, the load balancer keeps state and continues with the last known good endpoint.", displayName = "Sticky") } ) public static class FailoverLoadBalancerDefinitionDeserializer extends YamlDeserializerBase { @@ -5158,21 +5285,21 @@ protected boolean setProperty(FailoverLoadBalancerDefinition target, String prop types = org.apache.camel.model.FaultToleranceConfigurationDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Fault Tolerance Configuration", - description = "MicroProfile Fault Tolerance Circuit Breaker EIP configuration", + description = "Configures MicroProfile Fault Tolerance settings for the Circuit Breaker EIP, such as timeout, bulkhead, and retry parameters", deprecated = false, properties = { - @YamlProperty(name = "bulkheadEnabled", type = "boolean", defaultValue = "false", description = "Whether bulkhead is enabled or not on the circuit breaker. Default is false.", displayName = "Bulkhead Enabled"), + @YamlProperty(name = "bulkheadEnabled", type = "boolean", defaultValue = "false", description = "Whether bulkhead is enabled or not on the circuit breaker.", displayName = "Bulkhead Enabled"), @YamlProperty(name = "bulkheadMaxConcurrentCalls", type = "number", defaultValue = "10", description = "Configures the max amount of concurrent calls the bulkhead will support.", displayName = "Bulkhead Max Concurrent Calls"), @YamlProperty(name = "bulkheadWaitingTaskQueue", type = "number", defaultValue = "10", description = "Configures the task queue size for holding waiting tasks to be processed by the bulkhead.", displayName = "Bulkhead Waiting Task Queue"), @YamlProperty(name = "delay", type = "string", defaultValue = "5000", description = "Control how long the circuit breaker stays open. The default is 5 seconds.", displayName = "Delay"), - @YamlProperty(name = "failureRatio", type = "number", defaultValue = "50", description = "Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 50 percentage.", displayName = "Failure Ratio"), + @YamlProperty(name = "failureRatio", type = "number", defaultValue = "50", description = "Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls.", displayName = "Failure Ratio"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "requestVolumeThreshold", type = "number", defaultValue = "20", description = "Controls the size of the rolling window used when the circuit breaker is closed", displayName = "Request Volume Threshold"), - @YamlProperty(name = "successThreshold", type = "number", defaultValue = "1", description = "Controls the number of trial calls which are allowed when the circuit breaker is half-open", displayName = "Success Threshold"), + @YamlProperty(name = "requestVolumeThreshold", type = "number", defaultValue = "20", description = "Controls the size of the rolling window used when the circuit breaker is closed.", displayName = "Request Volume Threshold"), + @YamlProperty(name = "successThreshold", type = "number", defaultValue = "1", description = "Controls the number of trial calls which are allowed when the circuit breaker is half-open.", displayName = "Success Threshold"), @YamlProperty(name = "threadOffloadExecutorService", type = "string", description = "References a custom thread pool to use when offloading a guarded action to another thread.", displayName = "Thread Offload Executor Service"), @YamlProperty(name = "timeoutDuration", type = "string", defaultValue = "1000", description = "Configures the thread execution timeout. Default value is 1 second.", displayName = "Timeout Duration"), - @YamlProperty(name = "timeoutEnabled", type = "boolean", defaultValue = "false", description = "Whether timeout is enabled or not on the circuit breaker. Default is false.", displayName = "Timeout Enabled"), - @YamlProperty(name = "timeoutPoolSize", type = "number", defaultValue = "10", description = "Configures the pool size of the thread pool when timeout is enabled. Default value is 10.", displayName = "Timeout Pool Size"), + @YamlProperty(name = "timeoutEnabled", type = "boolean", defaultValue = "false", description = "Whether timeout is enabled or not on the circuit breaker.", displayName = "Timeout Enabled"), + @YamlProperty(name = "timeoutPoolSize", type = "number", defaultValue = "10", description = "Configures the pool size of the thread pool when timeout is enabled.", displayName = "Timeout Pool Size"), @YamlProperty(name = "typedGuard", type = "string", description = "Refers to an existing io.smallrye.faulttolerance.api.TypedGuard instance to lookup and use from the registry. When using this, then any other TypedGuard circuit breaker options are not in use.", displayName = "Typed Guard") } ) @@ -5269,26 +5396,26 @@ protected boolean setProperty(FaultToleranceConfigurationDefinition target, types = org.apache.camel.model.dataformat.FhirJsonDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "FHIR JSon", - description = "Marshall and unmarshall FHIR objects to/from JSON.", + description = "Marshall and unmarshall FHIR objects to/from JSON", deprecated = false, properties = { @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), - @YamlProperty(name = "dontEncodeElements", type = "string", description = "If provided, specifies the elements which should NOT be encoded. Multiple elements can be separated by comma when using String parameter. Valid values for this field would include: Patient - Don't encode patient and all its children Patient.name - Don't encode the patient's name Patient.name.family - Don't encode the patient's family name .text - Don't encode the text element on any resource (only the very first position may contain a wildcard) DSTU2 note: Note that values including meta, such as Patient.meta will work for DSTU2 parsers, but values with subelements on meta such as Patient.meta.lastUpdated will only work in DSTU3 mode.", displayName = "Dont Encode Elements"), - @YamlProperty(name = "dontStripVersionsFromReferencesAtPaths", type = "string", description = "If supplied value(s), any resource references at the specified paths will have their resource versions encoded instead of being automatically stripped during the encoding process. This setting has no effect on the parsing process. Multiple elements can be separated by comma when using String parameter. This method provides a finer-grained level of control than setStripVersionsFromReferences(String) and any paths specified by this method will be encoded even if setStripVersionsFromReferences(String) has been set to true (which is the default)", displayName = "Dont Strip Versions From References At Paths"), - @YamlProperty(name = "encodeElements", type = "string", description = "If provided, specifies the elements which should be encoded, to the exclusion of all others. Multiple elements can be separated by comma when using String parameter. Valid values for this field would include: Patient - Encode patient and all its children Patient.name - Encode only the patient's name Patient.name.family - Encode only the patient's family name .text - Encode the text element on any resource (only the very first position may contain a wildcard) .(mandatory) - This is a special case which causes any mandatory fields (min 0) to be encoded", displayName = "Encode Elements"), - @YamlProperty(name = "encodeElementsAppliesToChildResourcesOnly", type = "boolean", defaultValue = "false", description = "If set to true (default is false), the values supplied to setEncodeElements(Set) will not be applied to the root resource (typically a Bundle), but will be applied to any sub-resources contained within it (i.e. search result resources in that bundle)", displayName = "Encode Elements Applies To Child Resources Only"), - @YamlProperty(name = "fhirContext", type = "string", description = "To use a custom fhir context. Reference to object of type ca.uhn.fhir.context.FhirContext", displayName = "Fhir Context"), - @YamlProperty(name = "fhirVersion", type = "enum:DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", defaultValue = "R4", description = "The version of FHIR to use. Possible values are: DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", displayName = "Fhir Version"), - @YamlProperty(name = "forceResourceId", type = "string", description = "When encoding, force this resource ID to be encoded as the resource ID. Reference to object of type org.hl7.fhir.instance.model.api.IIdType", displayName = "Force Resource Id"), + @YamlProperty(name = "dontEncodeElements", type = "string", description = "If provided, specifies the elements which should NOT be encoded. Multiple elements can be separated by comma.", displayName = "Dont Encode Elements"), + @YamlProperty(name = "dontStripVersionsFromReferencesAtPaths", type = "string", description = "If supplied value(s), any resource references at the specified paths will have their resource versions encoded instead of being automatically stripped during the encoding process. Multiple elements can be separated by comma.", displayName = "Dont Strip Versions From References At Paths"), + @YamlProperty(name = "encodeElements", type = "string", description = "If provided, specifies the elements which should be encoded, to the exclusion of all others. Multiple elements can be separated by comma.", displayName = "Encode Elements"), + @YamlProperty(name = "encodeElementsAppliesToChildResourcesOnly", type = "boolean", defaultValue = "false", description = "If set to true (default is false), the values supplied to setEncodeElements will not be applied to the root resource (typically a Bundle), but will be applied to any sub-resources contained within it.", displayName = "Encode Elements Applies To Child Resources Only"), + @YamlProperty(name = "fhirContext", type = "string", description = "To use a custom fhir context. Reference to object of type ca.uhn.fhir.context.FhirContext.", displayName = "Fhir Context"), + @YamlProperty(name = "fhirVersion", type = "enum:DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", defaultValue = "R4", description = "The version of FHIR to use. Possible values are: DSTU2, DSTU2_HL7ORG, DSTU2_1, DSTU3, R4, R5.", displayName = "Fhir Version"), + @YamlProperty(name = "forceResourceId", type = "string", description = "When encoding, force this resource ID to be encoded as the resource ID. Reference to object of type org.hl7.fhir.instance.model.api.IIdType.", displayName = "Force Resource Id"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "omitResourceId", type = "boolean", defaultValue = "false", description = "If set to true (default is false) the ID of any resources being encoded will not be included in the output. Note that this does not apply to contained resources, only to root resources. In other words, if this is set to true, contained resources will still have local IDs but the outer/containing ID will not have an ID.", displayName = "Omit Resource Id"), - @YamlProperty(name = "overrideResourceIdWithBundleEntryFullUrl", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), the Bundle.entry.fullUrl will override the Bundle.entry.resource's resource id if the fullUrl is defined. This behavior happens when parsing the source data into a Bundle object. Set this to false if this is not the desired behavior (e.g. the client code wishes to perform additional validation checks between the fullUrl and the resource id).", displayName = "Override Resource Id With Bundle Entry Full Url"), - @YamlProperty(name = "parserErrorHandler", type = "string", description = "Registers an error handler which will be invoked when any parse errors are found. Reference to object of type ca.uhn.fhir.parser.IParserErrorHandler", displayName = "Parser Error Handler"), + @YamlProperty(name = "omitResourceId", type = "boolean", defaultValue = "false", description = "If set to true (default is false) the ID of any resources being encoded will not be included in the output.", displayName = "Omit Resource Id"), + @YamlProperty(name = "overrideResourceIdWithBundleEntryFullUrl", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), the Bundle.entry.fullUrl will override the Bundle.entry.resource's resource id if the fullUrl is defined.", displayName = "Override Resource Id With Bundle Entry Full Url"), + @YamlProperty(name = "parserErrorHandler", type = "string", description = "Registers an error handler which will be invoked when any parse errors are found. Reference to object of type ca.uhn.fhir.parser.IParserErrorHandler.", displayName = "Parser Error Handler"), @YamlProperty(name = "parserOptions", type = "string", description = "Sets the parser options object which will be used to supply default options to newly created parsers. Reference to object of type ca.uhn.fhir.context.ParserOptions.", displayName = "Parser Options"), - @YamlProperty(name = "preferTypes", type = "string", description = "If set (FQN class names), when parsing resources the parser will try to use the given types when possible, in the order that they are provided (from highest to lowest priority). For example, if a custom type which declares to implement the Patient resource is passed in here, and the parser is parsing a Bundle containing a Patient resource, the parser will use the given custom type. Multiple class names can be separated by comma.", displayName = "Prefer Types"), - @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "Sets the pretty print flag, meaning that the parser will encode resources with human-readable spacing and newlines between elements instead of condensing output as much as possible.", displayName = "Pretty Print"), + @YamlProperty(name = "preferTypes", type = "string", description = "If set (FQN class names), when parsing resources the parser will try to use the given types when possible. Multiple class names can be separated by comma.", displayName = "Prefer Types"), + @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "Sets the pretty print flag, meaning that the parser will encode resources with human-readable spacing and newlines between elements.", displayName = "Pretty Print"), @YamlProperty(name = "serverBaseUrl", type = "string", description = "Sets the server's base URL used by this parser. If a value is set, resource references will be turned into relative references if they are provided as absolute URLs but have a base matching the given base.", displayName = "Server Base Url"), - @YamlProperty(name = "stripVersionsFromReferences", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), resource references containing a version will have the version removed when the resource is encoded. This is generally good behaviour because in most situations, references from one resource to another should be to the resource by ID, not by ID and version. In some cases though, it may be desirable to preserve the version in resource links. In that case, this value should be set to false. This method provides the ability to globally disable reference encoding. If finer-grained control is needed, use setDontStripVersionsFromReferencesAtPaths(List)", displayName = "Strip Versions From References"), + @YamlProperty(name = "stripVersionsFromReferences", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), resource references containing a version will have the version removed when the resource is encoded.", displayName = "Strip Versions From References"), @YamlProperty(name = "summaryMode", type = "boolean", defaultValue = "false", description = "If set to true (default is false) only elements marked by the FHIR specification as being summary elements will be included.", displayName = "Summary Mode"), @YamlProperty(name = "suppressNarratives", type = "boolean", defaultValue = "false", description = "If set to true (default is false), narratives will not be included in the encoded values.", displayName = "Suppress Narratives") } @@ -5416,26 +5543,26 @@ protected boolean setProperty(FhirJsonDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.FhirXmlDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "FHIR XML", - description = "Marshall and unmarshall FHIR objects to/from XML.", + description = "Marshall and unmarshall FHIR objects to/from XML", deprecated = false, properties = { @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), - @YamlProperty(name = "dontEncodeElements", type = "string", description = "If provided, specifies the elements which should NOT be encoded. Multiple elements can be separated by comma when using String parameter. Valid values for this field would include: Patient - Don't encode patient and all its children Patient.name - Don't encode the patient's name Patient.name.family - Don't encode the patient's family name .text - Don't encode the text element on any resource (only the very first position may contain a wildcard) DSTU2 note: Note that values including meta, such as Patient.meta will work for DSTU2 parsers, but values with subelements on meta such as Patient.meta.lastUpdated will only work in DSTU3 mode.", displayName = "Dont Encode Elements"), - @YamlProperty(name = "dontStripVersionsFromReferencesAtPaths", type = "string", description = "If supplied value(s), any resource references at the specified paths will have their resource versions encoded instead of being automatically stripped during the encoding process. This setting has no effect on the parsing process. Multiple elements can be separated by comma when using String parameter. This method provides a finer-grained level of control than setStripVersionsFromReferences(String) and any paths specified by this method will be encoded even if setStripVersionsFromReferences(String) has been set to true (which is the default)", displayName = "Dont Strip Versions From References At Paths"), - @YamlProperty(name = "encodeElements", type = "string", description = "If provided, specifies the elements which should be encoded, to the exclusion of all others. Multiple elements can be separated by comma when using String parameter. Valid values for this field would include: Patient - Encode patient and all its children Patient.name - Encode only the patient's name Patient.name.family - Encode only the patient's family name .text - Encode the text element on any resource (only the very first position may contain a wildcard) .(mandatory) - This is a special case which causes any mandatory fields (min 0) to be encoded", displayName = "Encode Elements"), - @YamlProperty(name = "encodeElementsAppliesToChildResourcesOnly", type = "boolean", defaultValue = "false", description = "If set to true (default is false), the values supplied to setEncodeElements(Set) will not be applied to the root resource (typically a Bundle), but will be applied to any sub-resources contained within it (i.e. search result resources in that bundle)", displayName = "Encode Elements Applies To Child Resources Only"), - @YamlProperty(name = "fhirContext", type = "string", description = "To use a custom fhir context. Reference to object of type ca.uhn.fhir.context.FhirContext", displayName = "Fhir Context"), - @YamlProperty(name = "fhirVersion", type = "enum:DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", defaultValue = "R4", description = "The version of FHIR to use. Possible values are: DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", displayName = "Fhir Version"), - @YamlProperty(name = "forceResourceId", type = "string", description = "When encoding, force this resource ID to be encoded as the resource ID. Reference to object of type org.hl7.fhir.instance.model.api.IIdType", displayName = "Force Resource Id"), + @YamlProperty(name = "dontEncodeElements", type = "string", description = "If provided, specifies the elements which should NOT be encoded. Multiple elements can be separated by comma.", displayName = "Dont Encode Elements"), + @YamlProperty(name = "dontStripVersionsFromReferencesAtPaths", type = "string", description = "If supplied value(s), any resource references at the specified paths will have their resource versions encoded instead of being automatically stripped during the encoding process. Multiple elements can be separated by comma.", displayName = "Dont Strip Versions From References At Paths"), + @YamlProperty(name = "encodeElements", type = "string", description = "If provided, specifies the elements which should be encoded, to the exclusion of all others. Multiple elements can be separated by comma.", displayName = "Encode Elements"), + @YamlProperty(name = "encodeElementsAppliesToChildResourcesOnly", type = "boolean", defaultValue = "false", description = "If set to true (default is false), the values supplied to setEncodeElements will not be applied to the root resource (typically a Bundle), but will be applied to any sub-resources contained within it.", displayName = "Encode Elements Applies To Child Resources Only"), + @YamlProperty(name = "fhirContext", type = "string", description = "To use a custom fhir context. Reference to object of type ca.uhn.fhir.context.FhirContext.", displayName = "Fhir Context"), + @YamlProperty(name = "fhirVersion", type = "enum:DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", defaultValue = "R4", description = "The version of FHIR to use. Possible values are: DSTU2, DSTU2_HL7ORG, DSTU2_1, DSTU3, R4, R5.", displayName = "Fhir Version"), + @YamlProperty(name = "forceResourceId", type = "string", description = "When encoding, force this resource ID to be encoded as the resource ID. Reference to object of type org.hl7.fhir.instance.model.api.IIdType.", displayName = "Force Resource Id"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "omitResourceId", type = "boolean", defaultValue = "false", description = "If set to true (default is false) the ID of any resources being encoded will not be included in the output. Note that this does not apply to contained resources, only to root resources. In other words, if this is set to true, contained resources will still have local IDs but the outer/containing ID will not have an ID.", displayName = "Omit Resource Id"), - @YamlProperty(name = "overrideResourceIdWithBundleEntryFullUrl", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), the Bundle.entry.fullUrl will override the Bundle.entry.resource's resource id if the fullUrl is defined. This behavior happens when parsing the source data into a Bundle object. Set this to false if this is not the desired behavior (e.g. the client code wishes to perform additional validation checks between the fullUrl and the resource id).", displayName = "Override Resource Id With Bundle Entry Full Url"), - @YamlProperty(name = "parserErrorHandler", type = "string", description = "Registers an error handler which will be invoked when any parse errors are found. Reference to object of type ca.uhn.fhir.parser.IParserErrorHandler", displayName = "Parser Error Handler"), + @YamlProperty(name = "omitResourceId", type = "boolean", defaultValue = "false", description = "If set to true (default is false) the ID of any resources being encoded will not be included in the output.", displayName = "Omit Resource Id"), + @YamlProperty(name = "overrideResourceIdWithBundleEntryFullUrl", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), the Bundle.entry.fullUrl will override the Bundle.entry.resource's resource id if the fullUrl is defined.", displayName = "Override Resource Id With Bundle Entry Full Url"), + @YamlProperty(name = "parserErrorHandler", type = "string", description = "Registers an error handler which will be invoked when any parse errors are found. Reference to object of type ca.uhn.fhir.parser.IParserErrorHandler.", displayName = "Parser Error Handler"), @YamlProperty(name = "parserOptions", type = "string", description = "Sets the parser options object which will be used to supply default options to newly created parsers. Reference to object of type ca.uhn.fhir.context.ParserOptions.", displayName = "Parser Options"), - @YamlProperty(name = "preferTypes", type = "string", description = "If set (FQN class names), when parsing resources the parser will try to use the given types when possible, in the order that they are provided (from highest to lowest priority). For example, if a custom type which declares to implement the Patient resource is passed in here, and the parser is parsing a Bundle containing a Patient resource, the parser will use the given custom type. Multiple class names can be separated by comma.", displayName = "Prefer Types"), - @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "Sets the pretty print flag, meaning that the parser will encode resources with human-readable spacing and newlines between elements instead of condensing output as much as possible.", displayName = "Pretty Print"), + @YamlProperty(name = "preferTypes", type = "string", description = "If set (FQN class names), when parsing resources the parser will try to use the given types when possible. Multiple class names can be separated by comma.", displayName = "Prefer Types"), + @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "Sets the pretty print flag, meaning that the parser will encode resources with human-readable spacing and newlines between elements.", displayName = "Pretty Print"), @YamlProperty(name = "serverBaseUrl", type = "string", description = "Sets the server's base URL used by this parser. If a value is set, resource references will be turned into relative references if they are provided as absolute URLs but have a base matching the given base.", displayName = "Server Base Url"), - @YamlProperty(name = "stripVersionsFromReferences", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), resource references containing a version will have the version removed when the resource is encoded. This is generally good behaviour because in most situations, references from one resource to another should be to the resource by ID, not by ID and version. In some cases though, it may be desirable to preserve the version in resource links. In that case, this value should be set to false. This method provides the ability to globally disable reference encoding. If finer-grained control is needed, use setDontStripVersionsFromReferencesAtPaths(List)", displayName = "Strip Versions From References"), + @YamlProperty(name = "stripVersionsFromReferences", type = "boolean", defaultValue = "false", description = "If set to true (which is the default), resource references containing a version will have the version removed when the resource is encoded.", displayName = "Strip Versions From References"), @YamlProperty(name = "summaryMode", type = "boolean", defaultValue = "false", description = "If set to true (default is false) only elements marked by the FHIR specification as being summary elements will be included.", displayName = "Summary Mode"), @YamlProperty(name = "suppressNarratives", type = "boolean", defaultValue = "false", description = "If set to true (default is false), narratives will not be included in the encoded values.", displayName = "Suppress Narratives") } @@ -5563,16 +5690,16 @@ protected boolean setProperty(FhirXmlDataFormat target, String propertyKey, types = org.apache.camel.model.FilterDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Filter", - description = "Filter out messages based using a predicate", + description = "Filters messages using a predicate expression. Messages matching the predicate continue processing; non-matching messages are skipped.", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to determine if the message should be filtered or not. If the expression returns an empty value or false then the message is filtered (dropped), otherwise the message is continued being routed.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "statusPropertyName", type = "string", description = "Name of exchange property to use for storing the status of the filtering. Setting this allows to know if the filter predicate evaluated as true or false.", displayName = "Status Property Name"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The predicate expression to evaluate. Messages where the predicate returns false are filtered out and not routed further.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "statusPropertyName", type = "string", description = "Name of an exchange property to store whether the filter predicate matched or not. The value is stored as a boolean.", displayName = "Status Property Name"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -5647,13 +5774,13 @@ protected boolean setProperty(FilterDefinition target, String propertyKey, types = org.apache.camel.model.FinallyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Do Finally", - description = "Path traversed when a try, catch, finally block exits", + description = "Defines steps to always execute after a doTry block completes, regardless of whether an exception was thrown or caught", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -5709,17 +5836,17 @@ protected boolean setProperty(FinallyDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.FlatpackDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Flatpack", - description = "Marshal and unmarshal Java lists and maps to/from flat files (such as CSV, delimited, or fixed length formats) using Flatpack library.", + description = "Marshal and unmarshal Java lists and maps to/from flat files (such as CSV, delimited, or fixed length formats) using Flatpack library", deprecated = false, properties = { - @YamlProperty(name = "allowShortLines", type = "boolean", defaultValue = "false", description = "Allows for lines to be shorter than expected and ignores the extra characters", displayName = "Allow Short Lines"), + @YamlProperty(name = "allowShortLines", type = "boolean", defaultValue = "false", description = "Allows for lines to be shorter than expected and ignores the extra characters.", displayName = "Allow Short Lines"), @YamlProperty(name = "definition", type = "string", description = "The flatpack pzmap configuration file. Can be omitted in simpler situations, but its preferred to use the pzmap.", displayName = "Definition"), - @YamlProperty(name = "delimiter", type = "string", defaultValue = ",", description = "The delimiter char (could be ; , or similar)", displayName = "Delimiter"), - @YamlProperty(name = "fixed", type = "boolean", defaultValue = "false", description = "Delimited or fixed. Is by default false = delimited", displayName = "Fixed"), + @YamlProperty(name = "delimiter", type = "string", defaultValue = ",", description = "The delimiter char (could be ; , or similar).", displayName = "Delimiter"), + @YamlProperty(name = "fixed", type = "boolean", defaultValue = "false", description = "Delimited or fixed. Is by default false = delimited.", displayName = "Fixed"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "ignoreExtraColumns", type = "boolean", defaultValue = "false", description = "Allows for lines to be longer than expected and ignores the extra characters.", displayName = "Ignore Extra Columns"), @YamlProperty(name = "ignoreFirstRecord", type = "boolean", defaultValue = "true", description = "Whether the first line is ignored for delimited files (for the column headers). Is by default true.", displayName = "Ignore First Record"), - @YamlProperty(name = "parserFactory", type = "string", description = "References to a custom parser factory to lookup in the registry", displayName = "Parser Factory"), + @YamlProperty(name = "parserFactory", type = "string", description = "References to a custom parser factory to lookup in the registry.", displayName = "Parser Factory"), @YamlProperty(name = "textQualifier", type = "string", description = "If the text is qualified with a character. Uses quote character by default.", displayName = "Text Qualifier") } ) @@ -5859,32 +5986,32 @@ protected boolean setProperty(ForyDataFormat target, String propertyKey, types = org.apache.camel.model.rest.GetDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Get", - description = "Rest GET command", + description = "Defines an HTTP GET operation in the REST DSL", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. The default value is true.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), @YamlProperty(name = "deprecated", type = "boolean", defaultValue = "false", description = "Marks this rest operation as deprecated in OpenApi documentation.", displayName = "Deprecated"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data. This option will override what may be configured on a parent level.", displayName = "Out Type"), @YamlProperty(name = "param", type = "array:org.apache.camel.model.rest.ParamDefinition", description = "Information about parameters for this REST operation", displayName = "Param"), @YamlProperty(name = "path", type = "string", description = "The path mapping URIs of this REST operation such as /{id}.", displayName = "Path"), - @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), @YamlProperty(name = "responseMessage", type = "array:org.apache.camel.model.rest.ResponseMessageDefinition", description = "Response details for this REST operation", displayName = "Response Message"), - @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), + @YamlProperty(name = "routeId", type = "string", description = "The route id this REST service will refer to.", displayName = "Route Id"), @YamlProperty(name = "security", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Security settings for this REST operation", displayName = "Security"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "streamCache", type = "boolean", defaultValue = "false", description = "Whether stream caching is enabled on this rest operation.", displayName = "Stream Cache"), @YamlProperty(name = "to", type = "object:org.apache.camel.model.ToDefinition", description = "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", displayName = "To"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data. This option will override what may be configured on a parent level.", displayName = "Type") } ) public static class GetDefinitionDeserializer extends YamlDeserializerBase { @@ -6030,7 +6157,7 @@ protected boolean setProperty(GetDefinition target, String propertyKey, String p types = org.apache.camel.model.GlobalOptionDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Global Option", - description = "Models a string key/value pair for configuring some global options on a Camel context such as max debug log length.", + description = "Defines a single global configuration option as a key/value pair for the CamelContext", deprecated = false, properties = { @YamlProperty(name = "key", type = "string", required = true, description = "Global option key", displayName = "Key"), @@ -6075,9 +6202,9 @@ protected boolean setProperty(GlobalOptionDefinition target, String propertyKey, types = org.apache.camel.model.GlobalOptionsDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Global Options", - description = "Models a series of string key/value pairs for configuring some global options on a Camel context such as max debug log length.", + description = "Defines a collection of global configuration options for the CamelContext", deprecated = false, - properties = @YamlProperty(name = "globalOption", type = "array:org.apache.camel.model.GlobalOptionDefinition", description = "A series of global options as key value pairs", displayName = "Global Option") + properties = @YamlProperty(name = "globalOption", type = "array:org.apache.camel.model.GlobalOptionDefinition", description = "A series of global options as key value pairs.", displayName = "Global Option") ) public static class GlobalOptionsDefinitionDeserializer extends YamlDeserializerBase { public GlobalOptionsDefinitionDeserializer() { @@ -6112,14 +6239,14 @@ protected boolean setProperty(GlobalOptionsDefinition target, String propertyKey types = org.apache.camel.model.dataformat.GrokDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Grok", - description = "Unmarshal unstructured data to objects using Logstash based Grok patterns.", + description = "Unmarshal unstructured data to objects using Logstash based Grok patterns", deprecated = false, properties = { - @YamlProperty(name = "allowMultipleMatchesPerLine", type = "boolean", defaultValue = "true", description = "If false, every line of input is matched for pattern only once. Otherwise the line can be scanned multiple times when non-terminal pattern is used.", displayName = "Allow Multiple Matches Per Line"), - @YamlProperty(name = "flattened", type = "boolean", defaultValue = "false", description = "Turns on flattened mode. In flattened mode the exception is thrown when there are multiple pattern matches with same key.", displayName = "Flattened"), + @YamlProperty(name = "allowMultipleMatchesPerLine", type = "boolean", defaultValue = "true", description = "Whether to allow multiple matches per line. If false, every line of input is matched for the pattern only once. Otherwise the line can be scanned multiple times when a non-terminal pattern is used.", displayName = "Allow Multiple Matches Per Line"), + @YamlProperty(name = "flattened", type = "boolean", defaultValue = "false", description = "Whether to use flattened mode. In flattened mode an exception is thrown when there are multiple pattern matches with the same key.", displayName = "Flattened"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "namedOnly", type = "boolean", defaultValue = "false", description = "Whether to capture named expressions only or not (i.e. %{IP:ip} but not ${IP})", displayName = "Named Only"), - @YamlProperty(name = "pattern", type = "string", required = true, description = "The grok pattern to match lines of input", displayName = "Pattern") + @YamlProperty(name = "namedOnly", type = "boolean", defaultValue = "false", description = "Whether to capture named expressions only or not (i.e. %{IP:ip} but not ${IP}).", displayName = "Named Only"), + @YamlProperty(name = "pattern", type = "string", required = true, description = "The grok pattern to match lines of input.", displayName = "Pattern") } ) public static class GrokDataFormatDeserializer extends YamlDeserializerBase { @@ -6176,13 +6303,13 @@ protected boolean setProperty(GrokDataFormat target, String propertyKey, types = org.apache.camel.model.language.GroovyExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Groovy", - description = "Evaluates a Groovy script.", + description = "Evaluates a Groovy script", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class GroovyExpressionDeserializer extends YamlDeserializerBase { @@ -6247,11 +6374,11 @@ protected boolean setProperty(GroovyExpression target, String propertyKey, types = org.apache.camel.model.dataformat.GroovyJSonDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Groovy JSon", - description = "Transform between JSon and java.util.Map or java.util.List objects.", + description = "Transform between JSon and java.util.Map or java.util.List objects", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "true", description = "To pretty printing output nicely formatted. Is by default true.", displayName = "Pretty Print") + @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "true", description = "Whether to pretty print output nicely formatted.", displayName = "Pretty Print") } ) public static class GroovyJSonDataFormatDeserializer extends YamlDeserializerBase { @@ -6292,10 +6419,10 @@ protected boolean setProperty(GroovyJSonDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.GroovyXmlDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Groovy XML", - description = "Transform between XML and Groovy Node (Map structure) objects.", + description = "Transform between XML and Groovy Node (Map structure) objects", deprecated = false, properties = { - @YamlProperty(name = "attributeMapping", type = "boolean", defaultValue = "true", description = "To turn on or off attribute mapping. When enabled then keys that start with _ or character will be mapped to an XML attribute, and vise versa. This rule is what Jackson and other XML or JSon libraries uses.", displayName = "Attribute Mapping"), + @YamlProperty(name = "attributeMapping", type = "boolean", defaultValue = "true", description = "Whether to enable attribute mapping. When enabled, keys that start with _ or character will be mapped to an XML attribute, and vice versa.", displayName = "Attribute Mapping"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") } ) @@ -6337,7 +6464,7 @@ protected boolean setProperty(GroovyXmlDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.GzipDeflaterDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "GZip Deflater", - description = "Compress and decompress messages using java.util.zip.GZIPStream.", + description = "Compress and decompress messages using java.util.zip.GZIP*Stream", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -6374,12 +6501,13 @@ protected boolean setProperty(GzipDeflaterDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.HL7DataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "HL7", - description = "Marshal and unmarshal HL7 (Health Care) model objects using the HL7 MLLP codec.", + description = "Marshal and unmarshal HL7 (Health Care) model objects using the HL7 MLLP codec", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "parser", type = "string", description = "To use a custom HL7 parser", displayName = "Parser"), - @YamlProperty(name = "validate", type = "boolean", defaultValue = "true", description = "Whether to validate the HL7 message Is by default true.", displayName = "Validate") + @YamlProperty(name = "parser", type = "string", description = "To use a custom HL7 parser.", displayName = "Parser"), + @YamlProperty(name = "targetFormat", type = "enum:XML", description = "The target format for marshal output and unmarshal result type. By default, marshal encodes to HL7 ER7 and unmarshal returns a HAPI Message object. If set to XML, marshal encodes to HL7 XML and unmarshal returns an XML DOM Document.", displayName = "Target Format"), + @YamlProperty(name = "validate", type = "boolean", defaultValue = "true", description = "Whether to validate the HL7 message.", displayName = "Validate") } ) public static class HL7DataFormatDeserializer extends YamlDeserializerBase { @@ -6407,6 +6535,11 @@ protected boolean setProperty(HL7DataFormat target, String propertyKey, String p target.setParser(val); break; } + case "targetFormat": { + String val = asText(node); + target.setTargetFormat(val); + break; + } case "validate": { String val = asText(node); target.setValidate(val); @@ -6425,32 +6558,32 @@ protected boolean setProperty(HL7DataFormat target, String propertyKey, String p types = org.apache.camel.model.rest.HeadDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Head", - description = "Rest HEAD command", + description = "Defines an HTTP HEAD operation in the REST DSL", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. The default value is true.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), @YamlProperty(name = "deprecated", type = "boolean", defaultValue = "false", description = "Marks this rest operation as deprecated in OpenApi documentation.", displayName = "Deprecated"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data. This option will override what may be configured on a parent level.", displayName = "Out Type"), @YamlProperty(name = "param", type = "array:org.apache.camel.model.rest.ParamDefinition", description = "Information about parameters for this REST operation", displayName = "Param"), @YamlProperty(name = "path", type = "string", description = "The path mapping URIs of this REST operation such as /{id}.", displayName = "Path"), - @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), @YamlProperty(name = "responseMessage", type = "array:org.apache.camel.model.rest.ResponseMessageDefinition", description = "Response details for this REST operation", displayName = "Response Message"), - @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), + @YamlProperty(name = "routeId", type = "string", description = "The route id this REST service will refer to.", displayName = "Route Id"), @YamlProperty(name = "security", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Security settings for this REST operation", displayName = "Security"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "streamCache", type = "boolean", defaultValue = "false", description = "Whether stream caching is enabled on this rest operation.", displayName = "Stream Cache"), @YamlProperty(name = "to", type = "object:org.apache.camel.model.ToDefinition", description = "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", displayName = "To"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data. This option will override what may be configured on a parent level.", displayName = "Type") } ) public static class HeadDefinitionDeserializer extends YamlDeserializerBase { @@ -6597,12 +6730,12 @@ protected boolean setProperty(HeadDefinition target, String propertyKey, types = org.apache.camel.model.language.HeaderExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Header", - description = "Gets a header from the Exchange.", + description = "Gets a header from the Exchange", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class HeaderExpressionDeserializer extends YamlDeserializerBase { @@ -6663,14 +6796,14 @@ protected boolean setProperty(HeaderExpression target, String propertyKey, types = org.apache.camel.model.language.Hl7TerserExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "HL7 Terser", - description = "Get the value of a HL7 message field specified by terse location specification syntax.", + description = "Get the value of a HL7 message field specified by terse location specification syntax", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class Hl7TerserExpressionDeserializer extends YamlDeserializerBase { @@ -6740,11 +6873,11 @@ protected boolean setProperty(Hl7TerserExpression target, String propertyKey, types = org.apache.camel.model.dataformat.IcalDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "iCal", - description = "Marshal and unmarshal iCal (.ics) documents to/from model objects.", + description = "Marshal and unmarshal iCal (*.ics) documents to/from model objects", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "validating", type = "boolean", defaultValue = "false", description = "Whether to validate.", displayName = "Validating") + @YamlProperty(name = "validating", type = "boolean", defaultValue = "false", description = "Whether to validate the iCal document.", displayName = "Validating") } ) public static class IcalDataFormatDeserializer extends YamlDeserializerBase { @@ -6785,20 +6918,20 @@ protected boolean setProperty(IcalDataFormat target, String propertyKey, types = org.apache.camel.model.IdempotentConsumerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Idempotent Consumer", - description = "Filters out duplicate messages", + description = "Filters out duplicate messages based on a unique message identifier and an idempotent repository that tracks previously seen IDs", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "completionEager", type = "boolean", defaultValue = "false", description = "Sets whether to complete the idempotent consumer eager or when the exchange is done. If this option is true to complete eager, then the idempotent consumer will trigger its completion when the exchange reached the end of the block of the idempotent consumer pattern. So if the exchange is continued routed after the block ends, then whatever happens there does not affect the state. If this option is false (default) to not complete eager, then the idempotent consumer will complete when the exchange is done being routed. So if the exchange is continued routed after the block ends, then whatever happens there also affect the state. For example if the exchange failed due to an exception, then the state of the idempotent consumer will be a rollback.", displayName = "Completion Eager"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "completionEager", type = "boolean", defaultValue = "false", description = "Sets whether to complete the idempotent consumer eager or when the exchange is done.", displayName = "Completion Eager"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), @YamlProperty(name = "eager", type = "boolean", 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.", displayName = "Eager"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression used to calculate the correlation key to use for duplicate check. The Exchange which has the same correlation key is regarded as a duplicate and will be rejected.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "idempotentRepository", type = "string", required = true, description = "Sets the reference name of the message id repository", displayName = "Idempotent Repository"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression to compute the unique message ID used for duplicate detection. Messages with the same ID are treated as duplicates and skipped.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "idempotentRepository", type = "string", required = true, description = "Sets the reference name of the message id repository to use for storing processed message ids to detect duplicates.", displayName = "Idempotent Repository"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "removeOnFailure", type = "boolean", defaultValue = "true", description = "Sets whether to remove or keep the key on failure. The default behavior is to remove the key on failure.", displayName = "Remove On Failure"), - @YamlProperty(name = "skipDuplicate", type = "boolean", defaultValue = "true", description = "Sets whether to skip duplicates or not. The default behavior is to skip duplicates. A duplicate message would have the Exchange property org.apache.camel.Exchange#DUPLICATE_MESSAGE set to a Boolean#TRUE value. A none duplicate message will not have this property set.", displayName = "Skip Duplicate"), + @YamlProperty(name = "skipDuplicate", type = "boolean", defaultValue = "true", description = "Sets whether to skip duplicates or not. The default behavior is to skip duplicates.", displayName = "Skip Duplicate"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -6893,14 +7026,14 @@ protected boolean setProperty(IdempotentConsumerDefinition target, String proper types = org.apache.camel.model.InputTypeDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Input Type", - description = "Set the expected data type of the input message. If the actual message type is different at runtime, camel look for a required Transformer and apply if exists. If validate attribute is true then camel applies Validator as well. Type name consists of two parts, 'scheme' and 'name' connected with ':'. For Java type 'name' is a fully qualified class name. For example {code java:java.lang.String} , {code json:ABCOrder} . It's also possible to specify only scheme part, so that it works like a wildcard. If only 'xml' is specified, all the XML message matches. It's handy to add only one transformer/validator for all the transformation from/to XML.", + description = "Declares the expected input data type for a route. Camel will apply a data type transformer if the actual message type differs at runtime.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "urn", type = "string", required = true, description = "The input type URN.", displayName = "Urn"), - @YamlProperty(name = "validate", type = "boolean", defaultValue = "false", description = "Whether if validation is required for this input type.", displayName = "Validate") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "urn", type = "string", required = true, description = "The input type URN in the format 'scheme:name' (e.g. 'java:com.example.MyClass' or 'json:JsonOrder'). Declares the expected data type for messages consumed by this route.", displayName = "Urn"), + @YamlProperty(name = "validate", type = "boolean", defaultValue = "false", description = "Whether validation is required for this input type.", displayName = "Validate") } ) public static class InputTypeDefinitionDeserializer extends YamlDeserializerBase { @@ -6957,13 +7090,13 @@ protected boolean setProperty(InputTypeDefinition target, String propertyKey, types = org.apache.camel.model.InterceptDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Intercept", - description = "Intercepts a message at each step in the route", + description = "Intercepts each message at every processing step in the route, allowing cross-cutting logic such as logging or auditing", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "To use an expression to only trigger intercepting in specific situations", displayName = "On When"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } @@ -7027,16 +7160,16 @@ protected boolean setProperty(InterceptDefinition target, String propertyKey, types = org.apache.camel.model.InterceptFromDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Intercept From", - description = "Intercepts incoming messages", + description = "Intercepts incoming messages arriving from consumer endpoints, optionally filtering by endpoint URI pattern", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "To use an expression to only trigger intercepting in specific situations", displayName = "On When"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), - @YamlProperty(name = "uri", type = "string", description = "Intercept incoming messages from the uri or uri pattern. If this option is not configured, then all incoming messages is intercepted.", displayName = "Uri") + @YamlProperty(name = "uri", type = "string", description = "Intercept incoming messages from the uri or uri pattern. If not configured, then all incoming messages are intercepted.", displayName = "Uri") } ) public static class InterceptFromDefinitionDeserializer extends YamlDeserializerBase { @@ -7108,16 +7241,16 @@ protected boolean setProperty(InterceptFromDefinition target, String propertyKey types = org.apache.camel.model.InterceptSendToEndpointDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Intercept Send To Endpoint", - description = "Intercepts messages being sent to an endpoint", + description = "Intercepts messages being sent to a specific endpoint, allowing the message to be modified or the send to be skipped", deprecated = false, properties = { @YamlProperty(name = "afterUri", type = "string", description = "After sending to the endpoint then send the message to this uri which allows to process its result.", displayName = "After Uri"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "To use an expression to only trigger intercepting sending to an endpoint in specific situations", displayName = "On When"), - @YamlProperty(name = "skipSendToOriginalEndpoint", type = "string", description = "If set to true then the message is not sent to the original endpoint. By default (false) the message is both intercepted and then sent to the original endpoint.", displayName = "Skip Send To Original Endpoint"), + @YamlProperty(name = "skipSendToOriginalEndpoint", type = "boolean", defaultValue = "false", description = "Whether to skip sending the message to the original endpoint. By default, the message is both intercepted and then sent to the original endpoint.", displayName = "Skip Send To Original Endpoint"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), @YamlProperty(name = "uri", type = "string", required = true, description = "Intercept sending to the uri or uri pattern.", displayName = "Uri") } @@ -7199,7 +7332,7 @@ protected boolean setProperty(InterceptSendToEndpointDefinition target, String p types = org.apache.camel.model.dataformat.Iso8583DataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "ISO-8583", - description = "Create, edit and read ISO-8583 messages.", + description = "Create, edit and read ISO-8583 messages", deprecated = false, properties = { @YamlProperty(name = "allowAutoWiredMessageFormat", type = "boolean", defaultValue = "true", description = "Whether to auto-discover com.solab.iso8583.MessageFactory from the registry", displayName = "Allow Auto Wired Message Format"), @@ -7256,26 +7389,26 @@ protected boolean setProperty(Iso8583DataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.JacksonXMLDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Jackson XML", - description = "Unmarshal an XML payloads to POJOs and back using XMLMapper extension of Jackson.", + description = "Unmarshal an XML payloads to POJOs and back using XMLMapper extension of Jackson", deprecated = false, properties = { - @YamlProperty(name = "allowJmsType", type = "boolean", defaultValue = "false", description = "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", displayName = "Allow Jms Type"), - @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used.", displayName = "Allow Unmarshall Type"), - @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", displayName = "Collection Type"), + @YamlProperty(name = "allowJmsType", type = "boolean", defaultValue = "false", description = "Whether to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", displayName = "Allow Jms Type"), + @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "Whether to allow Jackson to use the CamelJacksonUnmarshalType header during unmarshalling. Should only be enabled when desired.", displayName = "Allow Unmarshall Type"), + @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows using different collection types than java.util.Collection based as default.", displayName = "Collection Type"), @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), - @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Disable Features"), - @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Enable Features"), - @YamlProperty(name = "enableJaxbAnnotationModule", type = "boolean", defaultValue = "false", description = "Whether to enable the JAXB annotations module when using jackson. When enabled then JAXB annotations can be used by Jackson.", displayName = "Enable Jaxb Annotation Module"), + @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from SerializationFeature, DeserializationFeature, or MapperFeature. Multiple features can be separated by comma.", displayName = "Disable Features"), + @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from SerializationFeature, DeserializationFeature, or MapperFeature. Multiple features can be separated by comma.", displayName = "Enable Features"), + @YamlProperty(name = "enableJaxbAnnotationModule", type = "boolean", defaultValue = "false", description = "Whether to enable the JAXB annotations module when using Jackson. When enabled then JAXB annotations can be used by Jackson.", displayName = "Enable Jaxb Annotation Module"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "include", type = "string", description = "If you want to marshal a pojo to JSON, and the pojo has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL", displayName = "Include"), - @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations", displayName = "Json View"), - @YamlProperty(name = "maxStringLength", type = "number", description = "Sets the maximum string length (in chars or bytes, depending on input context). The default is 20,000,000. This limit is not exact, the limit is applied when we increase internal buffer sizes and an exception will happen at sizes greater than this limit. Some text values that are a little bigger than the limit may be treated as valid but no text values with sizes less than or equal to this limit will be treated as invalid.", displayName = "Max String Length"), + @YamlProperty(name = "include", type = "string", description = "If you want to marshal a POJO to JSON, and the POJO has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL.", displayName = "Include"), + @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations.", displayName = "Json View"), + @YamlProperty(name = "maxStringLength", type = "number", description = "Maximum allowed string length when deserializing (in chars or bytes, depending on input context). The default is 20,000,000.", displayName = "Max String Length"), @YamlProperty(name = "moduleClassNames", type = "string", description = "To use custom Jackson modules com.fasterxml.jackson.databind.Module specified as a String with FQN class names. Multiple classes can be separated by comma.", displayName = "Module Class Names"), @YamlProperty(name = "moduleRefs", type = "string", description = "To use custom Jackson modules referred from the Camel registry. Multiple modules can be separated by comma.", displayName = "Module Refs"), - @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "To enable pretty printing output nicely formatted. Is by default false.", displayName = "Pretty Print"), + @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "Whether to enable pretty printing output nicely formatted. Is by default false.", displayName = "Pretty Print"), @YamlProperty(name = "timezone", type = "string", description = "If set then Jackson will use the Timezone when marshalling/unmarshalling.", displayName = "Timezone"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling", displayName = "Unmarshal Type"), - @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "To unmarshal to a List of Map or a List of Pojo.", displayName = "Use List"), + @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling.", displayName = "Unmarshal Type"), + @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "Whether to unmarshal to a List of Map or a List of Pojo.", displayName = "Use List"), @YamlProperty(name = "xmlMapper", type = "string", description = "Lookup and use the existing XmlMapper with the given id.", displayName = "Xml Mapper") } ) @@ -7398,15 +7531,15 @@ protected boolean setProperty(JacksonXMLDataFormat target, String propertyKey, types = org.apache.camel.model.language.JavaExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Java", - description = "Evaluates a Java (Java compiled once at runtime) expression.", + description = "Evaluates a Java (Java compiled once at runtime) expression", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), @YamlProperty(name = "preCompile", type = "boolean", defaultValue = "true", description = "Whether the expression should be pre compiled once during initialization phase. If this is turned off, then the expression is reloaded and compiled on each evaluation.", displayName = "Pre Compile"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), @YamlProperty(name = "singleQuotes", type = "boolean", defaultValue = "true", description = "Whether single quotes can be used as replacement for double quotes. This is convenient when you need to work with strings inside strings.", displayName = "Single Quotes"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class JavaExpressionDeserializer extends YamlDeserializerBase { @@ -7482,13 +7615,13 @@ protected boolean setProperty(JavaExpression target, String propertyKey, types = org.apache.camel.model.language.JavaScriptExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "JavaScript", - description = "Evaluates a JavaScript expression.", + description = "Evaluates a JavaScript expression", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class JavaScriptExpressionDeserializer extends YamlDeserializerBase { @@ -7553,29 +7686,29 @@ protected boolean setProperty(JavaScriptExpression target, String propertyKey, types = org.apache.camel.model.dataformat.JaxbDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "JAXB", - description = "Unmarshal XML payloads to POJOs and back using JAXB2 XML marshalling standard.", + description = "Unmarshal XML payloads to POJOs and back using JAXB2 XML marshalling standard", deprecated = false, properties = { - @YamlProperty(name = "accessExternalSchemaProtocols", type = "string", description = "Only in use if schema validation has been enabled. Restrict access to the protocols specified for external reference set by the schemaLocation attribute, Import and Include element. Examples of protocols are file, http, jar:file. empty, false or none to deny all access to external references; a specific protocol, such as file, to give permission to only the protocol; the keyword all to grant permission to all protocols.", displayName = "Access External Schema Protocols"), + @YamlProperty(name = "accessExternalSchemaProtocols", type = "string", description = "Only in use if schema validation has been enabled. Restrict access to the protocols specified for external reference set by the schemaLocation attribute, Import and Include element.", displayName = "Access External Schema Protocols"), @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), @YamlProperty(name = "contextPath", type = "string", required = true, description = "Package name where your JAXB classes are located.", displayName = "Context Path"), @YamlProperty(name = "contextPathIsClassName", type = "boolean", defaultValue = "false", description = "This can be set to true to mark that the contextPath is referring to a classname and not a package name.", displayName = "Context Path Is Class Name"), - @YamlProperty(name = "encoding", type = "string", description = "To overrule and use a specific encoding", displayName = "Encoding"), - @YamlProperty(name = "filterNonXmlChars", type = "boolean", defaultValue = "false", description = "To ignore non xml characheters and replace them with an empty space.", displayName = "Filter Non Xml Chars"), - @YamlProperty(name = "fragment", type = "boolean", defaultValue = "false", description = "To turn on marshalling XML fragment trees. By default JAXB looks for XmlRootElement annotation on given class to operate on whole XML tree. This is useful but not always - sometimes generated code does not have XmlRootElement annotation, sometimes you need unmarshall only part of tree. In that case you can use partial unmarshalling. To enable this behaviours you need set property partClass. Camel will pass this class to JAXB's unmarshaler.", displayName = "Fragment"), + @YamlProperty(name = "encoding", type = "string", description = "To overrule and use a specific encoding.", displayName = "Encoding"), + @YamlProperty(name = "filterNonXmlChars", type = "boolean", defaultValue = "false", description = "To ignore non xml characters and replace them with an empty space.", displayName = "Filter Non Xml Chars"), + @YamlProperty(name = "fragment", type = "boolean", defaultValue = "false", description = "To turn on marshalling XML fragment trees. This is useful when generated code does not have XmlRootElement annotation and you need to unmarshall only part of the tree.", displayName = "Fragment"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "ignoreJAXBElement", type = "boolean", defaultValue = "true", description = "Whether to ignore JAXBElement elements - only needed to be set to false in very special use-cases.", displayName = "Ignore JAXBElement"), @YamlProperty(name = "jaxbProviderProperties", type = "string", description = "Refers to a custom java.util.Map to lookup in the registry containing custom JAXB provider properties to be used with the JAXB marshaller.", displayName = "Jaxb Provider Properties"), - @YamlProperty(name = "mustBeJAXBElement", type = "boolean", defaultValue = "false", description = "Whether marhsalling must be java objects with JAXB annotations. And if not then it fails. This option can be set to false to relax that, such as when the data is already in XML format.", displayName = "Must Be JAXBElement"), + @YamlProperty(name = "mustBeJAXBElement", type = "boolean", defaultValue = "false", description = "Whether marshalling must be java objects with JAXB annotations. And if not then it fails. This option can be set to false to relax that, such as when the data is already in XML format.", displayName = "Must Be JAXBElement"), @YamlProperty(name = "namespacePrefix", type = "string", description = "When marshalling using JAXB or SOAP then the JAXB implementation will automatically assign namespace prefixes, such as ns2, ns3, ns4 etc. To control this mapping, Camel allows you to refer to a map which contains the desired mapping.", displayName = "Namespace Prefix"), - @YamlProperty(name = "noNamespaceSchemaLocation", type = "string", description = "To define the location of the namespaceless schema", displayName = "No Namespace Schema Location"), - @YamlProperty(name = "objectFactory", type = "boolean", defaultValue = "true", description = "Whether to allow using ObjectFactory classes to create the POJO classes during marshalling. This only applies to POJO classes that has not been annotated with JAXB and providing jaxb.index descriptor files.", displayName = "Object Factory"), - @YamlProperty(name = "partClass", type = "string", description = "Name of class used for fragment parsing. See more details at the fragment option.", displayName = "Part Class"), - @YamlProperty(name = "partNamespace", type = "string", description = "XML namespace to use for fragment parsing. See more details at the fragment option.", displayName = "Part Namespace"), + @YamlProperty(name = "noNamespaceSchemaLocation", type = "string", description = "To define the location of the namespaceless schema.", displayName = "No Namespace Schema Location"), + @YamlProperty(name = "objectFactory", type = "boolean", defaultValue = "true", description = "Whether to allow using ObjectFactory classes to create the POJO classes during marshalling.", displayName = "Object Factory"), + @YamlProperty(name = "partClass", type = "string", description = "Name of class used for fragment parsing.", displayName = "Part Class"), + @YamlProperty(name = "partNamespace", type = "string", description = "XML namespace to use for fragment parsing.", displayName = "Part Namespace"), @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "true", description = "To enable pretty printing output nicely formatted. Is by default false.", displayName = "Pretty Print"), - @YamlProperty(name = "schema", type = "string", description = "To validate against an existing schema. Your can use the prefix classpath:, file: or http: to specify how the resource should be resolved. You can separate multiple schema files by using the ',' character.", displayName = "Schema"), - @YamlProperty(name = "schemaLocation", type = "string", description = "To define the location of the schema", displayName = "Schema Location"), - @YamlProperty(name = "schemaSeverityLevel", type = "enum:0,1,2", defaultValue = "0", description = "Sets the schema severity level to use when validating against a schema. This level determines the minimum severity error that triggers JAXB to stop continue parsing. The default value of 0 (warning) means that any error (warning, error or fatal error) will trigger JAXB to stop. There are the following three levels: 0=warning, 1=error, 2=fatal error.", displayName = "Schema Severity Level"), + @YamlProperty(name = "schema", type = "string", description = "To validate against an existing schema. You can use the prefix classpath:, file: or http: to specify how the resource should be resolved. You can separate multiple schema files by using the comma character.", displayName = "Schema"), + @YamlProperty(name = "schemaLocation", type = "string", description = "To define the location of the schema.", displayName = "Schema Location"), + @YamlProperty(name = "schemaSeverityLevel", type = "enum:0,1,2", defaultValue = "0", description = "Sets the schema severity level to use when validating against a schema. The default value of 0 (warning) means that any error will trigger JAXB to stop. There are the following three levels: 0=warning, 1=error, 2=fatal error.", displayName = "Schema Severity Level"), @YamlProperty(name = "xmlStreamWriterWrapper", type = "string", description = "To use a custom xml stream writer.", displayName = "Xml Stream Writer Wrapper") } ) @@ -7713,15 +7846,15 @@ protected boolean setProperty(JaxbDataFormat target, String propertyKey, types = org.apache.camel.model.language.JoorExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "jOOR", - description = "Evaluates a jOOR (Java compiled once at runtime) expression.", + description = "Evaluates a jOOR (Java compiled once at runtime) expression", deprecated = true, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), @YamlProperty(name = "preCompile", type = "boolean", defaultValue = "true", description = "Whether the expression should be pre compiled once during initialization phase. If this is turned off, then the expression is reloaded and compiled on each evaluation.", displayName = "Pre Compile"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), @YamlProperty(name = "singleQuotes", type = "boolean", defaultValue = "true", description = "Whether single quotes can be used as replacement for double quotes. This is convenient when you need to work with strings inside strings.", displayName = "Single Quotes"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class JoorExpressionDeserializer extends YamlDeserializerBase { @@ -7797,14 +7930,14 @@ protected boolean setProperty(JoorExpression target, String propertyKey, types = org.apache.camel.model.language.JqExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "JQ", - description = "Evaluates a JQ expression against a JSON message body.", + description = "Evaluates a JQ expression against a JSON message body", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class JqExpressionDeserializer extends YamlDeserializerBase { @@ -7874,7 +8007,7 @@ protected boolean setProperty(JqExpression target, String propertyKey, String pr types = org.apache.camel.model.dataformat.JsonApiDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "JSonApi", - description = "Marshal and unmarshal JSON:API resources using JSONAPI-Converter library.", + description = "Marshal and unmarshal JSON:API resources using JSONAPI-Converter library", deprecated = false, properties = { @YamlProperty(name = "dataFormatTypes", type = "string", description = "The classes to take into account for the marshalling. Multiple classes can be separated by comma.", displayName = "Data Format Types"), @@ -7925,32 +8058,32 @@ protected boolean setProperty(JsonApiDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.JsonDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "JSon", - description = "Marshal POJOs to JSON and back.", + description = "Marshal POJOs to JSON and back", deprecated = false, properties = { @YamlProperty(name = "allowJmsType", type = "boolean", defaultValue = "false", description = "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", displayName = "Allow Jms Type"), @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used.", displayName = "Allow Unmarshall Type"), - @YamlProperty(name = "autoDiscoverObjectMapper", type = "boolean", defaultValue = "false", description = "If set to true then Jackson will look for an objectMapper to use from the registry", displayName = "Auto Discover Object Mapper"), - @YamlProperty(name = "autoDiscoverSchemaResolver", type = "boolean", defaultValue = "true", description = "When not disabled, the SchemaResolver will be looked up into the registry", displayName = "Auto Discover Schema Resolver"), + @YamlProperty(name = "autoDiscoverObjectMapper", type = "boolean", defaultValue = "false", description = "If set to true then Jackson will look for an objectMapper to use from the registry.", displayName = "Auto Discover Object Mapper"), + @YamlProperty(name = "autoDiscoverSchemaResolver", type = "boolean", defaultValue = "true", description = "When not disabled, the SchemaResolver will be looked up into the registry.", displayName = "Auto Discover Schema Resolver"), @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows using different collection types than java.util.Collection based as default.", displayName = "Collection Type"), @YamlProperty(name = "combineUnicodeSurrogates", type = "boolean", defaultValue = "false", description = "Force generator that outputs JSON content to combine surrogate pairs (if any) into 4-byte characters. This should be preferred when using 4-byte characters such as Japanese.", displayName = "Combine Unicode Surrogates"), @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), @YamlProperty(name = "dateFormatPattern", type = "string", description = "To configure the date format while marshall or unmarshall Date fields in JSON using Gson", displayName = "Date Format Pattern"), - @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Disable Features"), - @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Enable Features"), + @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated by comma.", displayName = "Disable Features"), + @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated by comma.", displayName = "Enable Features"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "include", type = "string", description = "If you want to marshal a pojo to JSON, and the pojo has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL", displayName = "Include"), - @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations", displayName = "Json View"), + @YamlProperty(name = "include", type = "string", description = "If you want to marshal a POJO to JSON, and the POJO has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL.", displayName = "Include"), + @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations.", displayName = "Json View"), @YamlProperty(name = "library", type = "enum:Fastjson,Gson,Jackson,Jsonb", defaultValue = "Jackson", description = "Which json library to use.", displayName = "Library"), - @YamlProperty(name = "maxStringLength", type = "number", description = "Jackson. Sets the maximum string length (in chars or bytes, depending on input context). The default is 20,000,000. This limit is not exact, the limit is applied when we increase internal buffer sizes and an exception will happen at sizes greater than this limit. Some text values that are a little bigger than the limit may be treated as valid but no text values with sizes less than or equal to this limit will be treated as invalid.", displayName = "Max String Length"), + @YamlProperty(name = "maxStringLength", type = "number", description = "Sets the maximum string length (in chars or bytes, depending on input context). The default is 20,000,000.", displayName = "Max String Length"), @YamlProperty(name = "moduleClassNames", type = "string", description = "To use custom Jackson modules com.fasterxml.jackson.databind.Module specified as a String with FQN class names. Multiple classes can be separated by comma.", displayName = "Module Class Names"), @YamlProperty(name = "moduleRefs", type = "string", description = "To use custom Jackson modules referred from the Camel registry. Multiple modules can be separated by comma.", displayName = "Module Refs"), @YamlProperty(name = "namingStrategy", type = "string", description = "If set then Jackson will use the the defined Property Naming Strategy.Possible values are: LOWER_CAMEL_CASE, LOWER_DOT_CASE, LOWER_CASE, KEBAB_CASE, SNAKE_CASE and UPPER_CAMEL_CASE", displayName = "Naming Strategy"), @YamlProperty(name = "objectMapper", type = "string", description = "Lookup and use the existing ObjectMapper with the given id when using Jackson.", displayName = "Object Mapper"), @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "To enable pretty printing output nicely formatted. Is by default false.", displayName = "Pretty Print"), @YamlProperty(name = "schemaResolver", type = "string", description = "Optional schema resolver used to lookup schemas for the data in transit.", displayName = "Schema Resolver"), - @YamlProperty(name = "timezone", type = "string", description = "If set then Jackson will use the Timezone when marshalling/unmarshalling. This option will have no effect on the others Json DataFormat, like gson and fastjson.", displayName = "Timezone"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling", displayName = "Unmarshal Type"), + @YamlProperty(name = "timezone", type = "string", description = "If set then Jackson will use the Timezone when marshalling/unmarshalling.", displayName = "Timezone"), + @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling.", displayName = "Unmarshal Type"), @YamlProperty(name = "useDefaultObjectMapper", type = "boolean", defaultValue = "true", description = "Whether to lookup and use default Jackson ObjectMapper from the registry.", displayName = "Use Default Object Mapper"), @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "To unmarshal to a List of Map or a List of Pojo.", displayName = "Use List") } @@ -8108,18 +8241,18 @@ protected boolean setProperty(JsonDataFormat target, String propertyKey, types = org.apache.camel.model.language.JsonPathExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "JSONPath", - description = "Evaluates a JSONPath expression against a JSON message body.", + description = "Evaluates a JSONPath expression against a JSON message body", deprecated = false, properties = { @YamlProperty(name = "allowEasyPredicate", type = "boolean", defaultValue = "true", description = "Whether to allow using the easy predicate parser to pre-parse predicates.", displayName = "Allow Easy Predicate"), - @YamlProperty(name = "allowSimple", type = "boolean", defaultValue = "true", description = "Whether to allow in inlined Simple exceptions in the JSONPath expression", displayName = "Allow Simple"), - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "allowSimple", type = "boolean", defaultValue = "true", description = "Whether to allow in inlined Simple exceptions in the JSONPath expression.", displayName = "Allow Simple"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), @YamlProperty(name = "option", type = "enum:DEFAULT_PATH_LEAF_TO_NULL,ALWAYS_RETURN_LIST,AS_PATH_LIST,SUPPRESS_EXCEPTIONS,REQUIRE_PROPERTIES", description = "To configure additional options on JSONPath. Multiple values can be separated by comma.", displayName = "Option"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), @YamlProperty(name = "suppressExceptions", type = "boolean", defaultValue = "false", description = "Whether to suppress exceptions such as PathNotFoundException.", displayName = "Suppress Exceptions"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim"), @YamlProperty(name = "unpackArray", type = "boolean", defaultValue = "false", description = "Whether to unpack a single element json-array into an object.", displayName = "Unpack Array"), @YamlProperty(name = "writeAsString", type = "boolean", defaultValue = "false", description = "Whether to write the output of each row/element as a JSON String value instead of a Map/POJO value.", displayName = "Write As String") } @@ -8221,24 +8354,24 @@ protected boolean setProperty(JsonPathExpression target, String propertyKey, types = org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Jta Transaction Error Handler", - description = "JTA based transactional error handler (requires camel-jta).", + description = "Transactional error handler using JTA (Java Transaction API) that marks the transaction for rollback on failure", deprecated = false, properties = { - @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used by the error handler", displayName = "Executor Service Ref"), + @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used for asynchronous redelivery.", displayName = "Executor Service Ref"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "Logging level to use by error handler", displayName = "Level"), - @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler", displayName = "Log Name"), - @YamlProperty(name = "loggerRef", type = "string", description = "References to a logger to use as logger for the error handler", displayName = "Logger Ref"), - @YamlProperty(name = "onExceptionOccurredRef", type = "string", description = "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", displayName = "On Exception Occurred Ref"), - @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor / dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), - @YamlProperty(name = "onRedeliveryRef", type = "string", description = "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", displayName = "On Redelivery Ref"), - @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "Sets the redelivery settings", displayName = "Redelivery Policy"), - @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", displayName = "Redelivery Policy Ref"), - @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false.", displayName = "Retry While Ref"), - @YamlProperty(name = "rollbackLoggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "WARN", description = "Sets the logging level to use for logging transactional rollback. This option is default WARN.", displayName = "Rollback Logging Level"), + @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "The logging level to use when logging caught exceptions.", displayName = "Level"), + @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler.", displayName = "Log Name"), + @YamlProperty(name = "loggerRef", type = "string", description = "Sets a reference to a logger to use for logging error handler activity.", displayName = "Logger Ref"), + @YamlProperty(name = "onExceptionOccurredRef", type = "string", 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.", displayName = "On Exception Occurred Ref"), + @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the exchange before handled by the failure processor or dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), + @YamlProperty(name = "onRedeliveryRef", type = "string", 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.", displayName = "On Redelivery Ref"), + @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "The redelivery settings for configuring retry attempts and delays when message processing fails.", displayName = "Redelivery Policy"), + @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a redelivery policy to lookup in the registry to be used.", displayName = "Redelivery Policy Ref"), + @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a reference to a retry while predicate. Redelivery continues as long as the predicate evaluates to true.", displayName = "Retry While Ref"), + @YamlProperty(name = "rollbackLoggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "WARN", description = "The logging level to use for logging transactional rollback. Default is WARN.", displayName = "Rollback Logging Level"), @YamlProperty(name = "transactedPolicyRef", type = "string", description = "The transacted policy to use that is configured for either Spring or JTA based transactions. If no policy has been configured then Camel will attempt to auto-discover.", displayName = "Transacted Policy Ref"), - @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Body"), - @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Message") + @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "If enabled, uses the original input message body (but not headers) when the exchange is moved to the dead letter queue after all redelivery attempts have been exhausted. This allows enriching the message with custom headers while keeping the original body. Cannot be used together with useOriginalMessage.", displayName = "Use Original Body"), + @YamlProperty(name = "useOriginalMessage", type = "boolean", 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.", displayName = "Use Original Message") } ) public static class JtaTransactionErrorHandlerDefinitionDeserializer extends YamlDeserializerBase { @@ -8344,11 +8477,11 @@ protected boolean setProperty(JtaTransactionErrorHandlerDefinition target, types = org.apache.camel.model.dataformat.LZFDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "LZF Deflate Compression", - description = "Compress and decompress streams using LZF deflate algorithm.", + description = "Compress and decompress streams using LZF deflate algorithm", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "usingParallelCompression", type = "boolean", defaultValue = "false", description = "Enable encoding (compress) using multiple processing cores.", displayName = "Using Parallel Compression") + @YamlProperty(name = "usingParallelCompression", type = "boolean", defaultValue = "false", description = "Whether to enable encoding (compress) using multiple processing cores.", displayName = "Using Parallel Compression") } ) public static class LZFDataFormatDeserializer extends YamlDeserializerBase { @@ -8389,14 +8522,14 @@ protected boolean setProperty(LZFDataFormat target, String propertyKey, String p types = org.apache.camel.model.tokenizer.LangChain4jCharacterTokenizerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "LangChain4J Tokenizer with character splitter", - description = "Camel AI: Tokenizer for splitting by character.", + description = "Splits text into chunks by character count, using LangChain4j's character tokenizer for AI text processing", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "Sets the maximum number of tokens that can overlap in each segment", displayName = "Max Overlap"), - @YamlProperty(name = "maxTokens", type = "number", required = true, description = "Sets the maximum number of tokens on each segment", displayName = "Max Tokens"), - @YamlProperty(name = "modelName", type = "string", description = "Sets the model name", displayName = "Model Name"), - @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "Sets the tokenizer type", displayName = "Tokenizer Type") + @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "The maximum number of tokens that can overlap in each segment.", displayName = "Max Overlap"), + @YamlProperty(name = "maxTokens", type = "number", required = true, description = "The maximum number of tokens on each segment.", displayName = "Max Tokens"), + @YamlProperty(name = "modelName", type = "string", description = "The underlying model name used by the tokenizer. Providing this switches to computing segment sizes in terms of tokens.", displayName = "Model Name"), + @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "The tokenizer type. Must be one of OPEN_AI, AZURE or QWEN.", displayName = "Tokenizer Type") } ) public static class LangChain4jCharacterTokenizerDefinitionDeserializer extends YamlDeserializerBase { @@ -8452,14 +8585,14 @@ protected boolean setProperty(LangChain4jCharacterTokenizerDefinition target, types = org.apache.camel.model.tokenizer.LangChain4jLineTokenizerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "LangChain4J Tokenizer with line splitter", - description = "Camel AI: Tokenizer for splitting line by line.", + description = "Splits text into chunks line by line, using LangChain4j's line tokenizer for AI text processing", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "Sets the maximum number of tokens that can overlap in each segment", displayName = "Max Overlap"), - @YamlProperty(name = "maxTokens", type = "number", required = true, description = "Sets the maximum number of tokens on each segment", displayName = "Max Tokens"), - @YamlProperty(name = "modelName", type = "string", description = "Sets the model name", displayName = "Model Name"), - @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "Sets the tokenizer type", displayName = "Tokenizer Type") + @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "The maximum number of tokens that can overlap in each segment.", displayName = "Max Overlap"), + @YamlProperty(name = "maxTokens", type = "number", required = true, description = "The maximum number of tokens on each segment.", displayName = "Max Tokens"), + @YamlProperty(name = "modelName", type = "string", description = "The underlying model name used by the tokenizer. Providing this switches to computing segment sizes in terms of tokens.", displayName = "Model Name"), + @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "The tokenizer type. Must be one of OPEN_AI, AZURE or QWEN.", displayName = "Tokenizer Type") } ) public static class LangChain4jLineTokenizerDefinitionDeserializer extends YamlDeserializerBase { @@ -8515,14 +8648,14 @@ protected boolean setProperty(LangChain4jLineTokenizerDefinition target, String types = org.apache.camel.model.tokenizer.LangChain4jParagraphTokenizerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "LangChain4J Tokenizer with paragraph splitter", - description = "Camel AI: Tokenizer for splitting by paragraphs.", + description = "Splits text into chunks by paragraph boundaries, using LangChain4j's paragraph tokenizer for AI text processing", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "Sets the maximum number of tokens that can overlap in each segment", displayName = "Max Overlap"), - @YamlProperty(name = "maxTokens", type = "number", required = true, description = "Sets the maximum number of tokens on each segment", displayName = "Max Tokens"), - @YamlProperty(name = "modelName", type = "string", description = "Sets the model name", displayName = "Model Name"), - @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "Sets the tokenizer type", displayName = "Tokenizer Type") + @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "The maximum number of tokens that can overlap in each segment.", displayName = "Max Overlap"), + @YamlProperty(name = "maxTokens", type = "number", required = true, description = "The maximum number of tokens on each segment.", displayName = "Max Tokens"), + @YamlProperty(name = "modelName", type = "string", description = "The underlying model name used by the tokenizer. Providing this switches to computing segment sizes in terms of tokens.", displayName = "Model Name"), + @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "The tokenizer type. Must be one of OPEN_AI, AZURE or QWEN.", displayName = "Tokenizer Type") } ) public static class LangChain4jParagraphTokenizerDefinitionDeserializer extends YamlDeserializerBase { @@ -8578,14 +8711,14 @@ protected boolean setProperty(LangChain4jParagraphTokenizerDefinition target, types = org.apache.camel.model.tokenizer.LangChain4jSentenceTokenizerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "LangChain4J Tokenizer with sentence splitter", - description = "Camel AI: Tokenizer for splitting by sentences.", + description = "Splits text into chunks by sentence boundaries, using LangChain4j's sentence tokenizer for AI text processing", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "Sets the maximum number of tokens that can overlap in each segment", displayName = "Max Overlap"), - @YamlProperty(name = "maxTokens", type = "number", required = true, description = "Sets the maximum number of tokens on each segment", displayName = "Max Tokens"), - @YamlProperty(name = "modelName", type = "string", description = "Sets the model name", displayName = "Model Name"), - @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "Sets the tokenizer type", displayName = "Tokenizer Type") + @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "The maximum number of tokens that can overlap in each segment.", displayName = "Max Overlap"), + @YamlProperty(name = "maxTokens", type = "number", required = true, description = "The maximum number of tokens on each segment.", displayName = "Max Tokens"), + @YamlProperty(name = "modelName", type = "string", description = "The underlying model name used by the tokenizer. Providing this switches to computing segment sizes in terms of tokens.", displayName = "Model Name"), + @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "The tokenizer type. Must be one of OPEN_AI, AZURE or QWEN.", displayName = "Tokenizer Type") } ) public static class LangChain4jSentenceTokenizerDefinitionDeserializer extends YamlDeserializerBase { @@ -8700,14 +8833,14 @@ protected boolean setProperty(LangChain4jTokenizerDefinition target, String prop types = org.apache.camel.model.tokenizer.LangChain4jWordTokenizerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "LangChain4J Tokenizer with word splitter", - description = "Camel AI: Tokenizer for splitting by word.", + description = "Splits text into chunks by word boundaries, using LangChain4j's word tokenizer for AI text processing", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "Sets the maximum number of tokens that can overlap in each segment", displayName = "Max Overlap"), - @YamlProperty(name = "maxTokens", type = "number", required = true, description = "Sets the maximum number of tokens on each segment", displayName = "Max Tokens"), - @YamlProperty(name = "modelName", type = "string", description = "Sets the model name", displayName = "Model Name"), - @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "Sets the tokenizer type", displayName = "Tokenizer Type") + @YamlProperty(name = "maxOverlap", type = "number", required = true, description = "The maximum number of tokens that can overlap in each segment.", displayName = "Max Overlap"), + @YamlProperty(name = "maxTokens", type = "number", required = true, description = "The maximum number of tokens on each segment.", displayName = "Max Tokens"), + @YamlProperty(name = "modelName", type = "string", description = "The underlying model name used by the tokenizer. Providing this switches to computing segment sizes in terms of tokens.", displayName = "Model Name"), + @YamlProperty(name = "tokenizerType", type = "enum:OPEN_AI,AZURE,QWEN", description = "The tokenizer type. Must be one of OPEN_AI, AZURE or QWEN.", displayName = "Tokenizer Type") } ) public static class LangChain4jWordTokenizerDefinitionDeserializer extends YamlDeserializerBase { @@ -8763,13 +8896,13 @@ protected boolean setProperty(LangChain4jWordTokenizerDefinition target, String types = org.apache.camel.model.language.LanguageExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Language", - description = "Evaluates a custom language.", + description = "Evaluates a custom language", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "language", type = "string", required = true, description = "The name of the language to use", displayName = "Language"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "language", type = "string", required = true, description = "The name of the language to use.", displayName = "Language"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class LanguageExpressionDeserializer extends YamlDeserializerBase { @@ -8829,15 +8962,15 @@ protected boolean setProperty(LanguageExpression target, String propertyKey, types = org.apache.camel.model.LoadBalanceDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Load Balance", - description = "Balances message processing among a number of nodes", + description = "Distributes messages across multiple endpoints using a load balancing strategy such as round-robin, random, failover, or weighted", deprecated = false, properties = { @YamlProperty(name = "customLoadBalancer", type = "object:org.apache.camel.model.loadbalancer.CustomLoadBalancerDefinition", oneOf = "loadBalancerType"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), @YamlProperty(name = "failoverLoadBalancer", type = "object:org.apache.camel.model.loadbalancer.FailoverLoadBalancerDefinition", oneOf = "loadBalancerType"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "randomLoadBalancer", type = "object:org.apache.camel.model.loadbalancer.RandomLoadBalancerDefinition", oneOf = "loadBalancerType"), @YamlProperty(name = "roundRobinLoadBalancer", type = "object:org.apache.camel.model.loadbalancer.RoundRobinLoadBalancerDefinition", oneOf = "loadBalancerType"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), @@ -8938,15 +9071,15 @@ protected boolean setProperty(LoadBalanceDefinition target, String propertyKey, types = org.apache.camel.model.transformer.LoadTransformerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Load Transformer", - description = "To load custom transformers from classpath scanning to be used for route level transformations.", + description = "Auto-discovers and loads data type transformers from the classpath via scanning", deprecated = false, properties = { - @YamlProperty(name = "defaults", type = "boolean", defaultValue = "false", description = "Enable loading of default transformers.", displayName = "Defaults"), - @YamlProperty(name = "fromType", type = "string", description = "Set the 'from' data type name. If you specify 'xml:XYZ', the transformer will be picked up if source type is 'xml:XYZ'. If you specify just 'xml', the transformer matches with all of 'xml' source type like 'xml:ABC' or 'xml:DEF'.", displayName = "From Type"), - @YamlProperty(name = "name", type = "string", description = "Set the transformer name under which the transformer gets referenced when specifying the input/output data type on routes. If you specify a transformer name that matches a data type scheme like 'csv' the transformer will be picked up for all of 'csv:' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Name"), - @YamlProperty(name = "packageScan", type = "string", description = "Set the classpath location to scan for annotated transformers.", displayName = "Package Scan"), - @YamlProperty(name = "scheme", type = "string", description = "Set a scheme name supported by the transformer. If you specify 'csv', the transformer will be picked up for all of 'csv' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), - @YamlProperty(name = "toType", type = "string", description = "Set the 'to' data type name. If you specify 'json:XYZ', the transformer will be picked up if destination type is 'json:XYZ'. If you specify just 'json', the transformer matches with all of 'json' destination type like 'json:ABC' or 'json:DEF'.", displayName = "To Type") + @YamlProperty(name = "defaults", type = "boolean", defaultValue = "false", description = "Whether to enable loading of default transformers.", displayName = "Defaults"), + @YamlProperty(name = "fromType", type = "string", description = "The source (from) data type name. If you specify 'xml:XYZ', the transformer is picked up when source type matches. If you specify just 'xml', it matches all xml source types.", displayName = "From Type"), + @YamlProperty(name = "name", type = "string", description = "Name under which the transformer gets referenced when specifying input/output data type on routes. If the name matches a data type scheme, the transformer will be picked up as a fallback.", displayName = "Name"), + @YamlProperty(name = "packageScan", type = "string", description = "The classpath location to scan for annotated transformers.", displayName = "Package Scan"), + @YamlProperty(name = "scheme", type = "string", description = "Scheme name supported by the transformer. If specified, the transformer will be picked up for all from/to transformation of this scheme. Scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), + @YamlProperty(name = "toType", type = "string", description = "The destination (to) data type name. If you specify 'json:XYZ', the transformer is picked up when destination type matches. If you specify just 'json', it matches all json destination types.", displayName = "To Type") } ) public static class LoadTransformerDefinitionDeserializer extends YamlDeserializerBase { @@ -9008,19 +9141,19 @@ protected boolean setProperty(LoadTransformerDefinition target, String propertyK types = org.apache.camel.model.LogDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Logger", - description = "Used for printing custom messages to the logger.", + description = "Logs a message using an expression that can include message body, headers, and other exchange data", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "logLanguage", type = "string", description = "To configure the language to use. By default, the simple language is used. However, Camel also supports other languages such as groovy.", displayName = "Log Language"), - @YamlProperty(name = "logName", type = "string", description = "Sets the name of the logger. The name is default the routeId or the source:line if source location is enabled. You can also specify the name using tokens: ${class} - the logger class name (org.apache.camel.processor.LogProcessor) ${contextId} - the camel context id ${routeId} - the route id ${groupId} - the route group id ${nodeId} - the node id ${nodePrefixId} - the node prefix id ${source} - the source:line (source location must be enabled) ${source.name} - the source filename (source location must be enabled) ${source.line} - the source line number (source location must be enabled) For example to use the route and node id you can specify the name as: ${routeId}/${nodeId}", displayName = "Log Name"), - @YamlProperty(name = "logger", type = "string", description = "To refer to a custom logger instance to lookup from the registry.", displayName = "Logger"), - @YamlProperty(name = "loggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "INFO", description = "Sets the logging level. The default value is INFO", displayName = "Logging Level"), - @YamlProperty(name = "marker", type = "string", description = "To use slf4j marker", displayName = "Marker"), - @YamlProperty(name = "message", type = "string", required = true, description = "Sets the log message (uses simple language)", displayName = "Message"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "logLanguage", type = "string", description = "The language to use for evaluating the log message, such as simple, groovy, or ognl.", displayName = "Log Language"), + @YamlProperty(name = "logName", type = "string", description = "The logger name to use. By default the route id is used.", displayName = "Log Name"), + @YamlProperty(name = "logger", type = "string", description = "Reference to a custom SLF4J logger instance to use.", displayName = "Logger"), + @YamlProperty(name = "loggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "INFO", description = "Sets the logging level to use for the log message. Available levels: TRACE, DEBUG, INFO, WARN, ERROR, OFF.", displayName = "Logging Level"), + @YamlProperty(name = "marker", type = "string", description = "An optional SLF4J marker to use with the log statement.", displayName = "Marker"), + @YamlProperty(name = "message", type = "string", required = true, description = "The log message to output. Supports simple language expressions.", displayName = "Message"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class LogDefinitionDeserializer extends YamlDeserializerBase { @@ -9106,19 +9239,19 @@ protected boolean setProperty(LogDefinition target, String propertyKey, String p types = org.apache.camel.model.LoopDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Loop", - description = "Processes a message multiple times", + description = "Processes the message body repeatedly for a specified number of iterations, or until a condition is met", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "breakOnShutdown", type = "boolean", defaultValue = "false", description = "If the breakOnShutdown attribute is true, then the loop will not iterate until it reaches the end when Camel is shut down.", displayName = "Break On Shutdown"), - @YamlProperty(name = "copy", type = "boolean", defaultValue = "false", description = "If the copy attribute is true, a copy of the input Exchange is used for each iteration. That means each iteration will start from a copy of the same message. By default loop will loop the same exchange all over, so each iteration may have different message content.", displayName = "Copy"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "breakOnShutdown", type = "boolean", defaultValue = "false", description = "If enabled, the loop will not iterate until it reaches the end when Camel is shut down.", displayName = "Break On Shutdown"), + @YamlProperty(name = "copy", type = "boolean", 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.", displayName = "Copy"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), @YamlProperty(name = "doWhile", type = "boolean", defaultValue = "false", description = "Enables the while loop that loops until the predicate evaluates to false or null.", displayName = "Do While"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to define how many times we should loop. Notice the expression is only evaluated once, and should return a number as how many times to loop. A value of zero or negative means no looping. The loop is like a for-loop fashion, if you want a while loop, then the dynamic router may be a better choice.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the org.apache.camel.Exchange for each loop iteration. This can be used to deep-clone messages, or any custom logic needed before the looping executes.", displayName = "On Prepare"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression that determines the number of times to loop. The result is converted to an integer.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "onPrepare", type = "string", description = "Uses a processor when preparing the exchange for each loop iteration. This can be used to deep-clone messages, or any custom logic needed before the looping executes.", displayName = "On Prepare"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -9208,7 +9341,7 @@ protected boolean setProperty(LoopDefinition target, String propertyKey, types = org.apache.camel.model.MarshalDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Marshal", - description = "Marshals data into a specified format for transmission over a transport or component", + description = "Serializes the message body into a specific data format such as JSON, XML, CSV, or Protobuf for transmission or storage", deprecated = false, properties = { @YamlProperty(name = "asn1", type = "object:org.apache.camel.model.dataformat.ASN1DataFormat", oneOf = "dataFormatType"), @@ -9221,9 +9354,9 @@ protected boolean setProperty(LoopDefinition target, String propertyKey, @YamlProperty(name = "crypto", type = "object:org.apache.camel.model.dataformat.CryptoDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "csv", type = "object:org.apache.camel.model.dataformat.CsvDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "custom", type = "object:org.apache.camel.model.dataformat.CustomDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), @YamlProperty(name = "dfdl", type = "object:org.apache.camel.model.dataformat.DfdlDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), @YamlProperty(name = "fhirJson", type = "object:org.apache.camel.model.dataformat.FhirJsonDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "fhirXml", type = "object:org.apache.camel.model.dataformat.FhirXmlDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "flatpack", type = "object:org.apache.camel.model.dataformat.FlatpackDataFormat", oneOf = "dataFormatType"), @@ -9234,7 +9367,7 @@ protected boolean setProperty(LoopDefinition target, String propertyKey, @YamlProperty(name = "gzipDeflater", type = "object:org.apache.camel.model.dataformat.GzipDeflaterDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "hl7", type = "object:org.apache.camel.model.dataformat.HL7DataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "ical", type = "object:org.apache.camel.model.dataformat.IcalDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "iso8583", type = "object:org.apache.camel.model.dataformat.Iso8583DataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "jacksonXml", type = "object:org.apache.camel.model.dataformat.JacksonXMLDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "jaxb", type = "object:org.apache.camel.model.dataformat.JaxbDataFormat", oneOf = "dataFormatType"), @@ -9242,7 +9375,7 @@ protected boolean setProperty(LoopDefinition target, String propertyKey, @YamlProperty(name = "jsonApi", type = "object:org.apache.camel.model.dataformat.JsonApiDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "lzf", type = "object:org.apache.camel.model.dataformat.LZFDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "mimeMultipart", type = "object:org.apache.camel.model.dataformat.MimeMultipartDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "ocsf", type = "object:org.apache.camel.model.dataformat.OcsfDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "parquetAvro", type = "object:org.apache.camel.model.dataformat.ParquetAvroDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "pgp", type = "object:org.apache.camel.model.dataformat.PGPDataFormat", oneOf = "dataFormatType"), @@ -9259,8 +9392,8 @@ protected boolean setProperty(LoopDefinition target, String propertyKey, @YamlProperty(name = "univocityCsv", type = "object:org.apache.camel.model.dataformat.UniVocityCsvDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "univocityFixed", type = "object:org.apache.camel.model.dataformat.UniVocityFixedDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "univocityTsv", type = "object:org.apache.camel.model.dataformat.UniVocityTsvDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "variableReceive", type = "string", 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. Important: When using receive variable then the received body is stored only in this variable and not on the current message.", displayName = "Variable Receive"), - @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Send"), + @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive"), + @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving.", displayName = "Variable Send"), @YamlProperty(name = "xmlSecurity", type = "object:org.apache.camel.model.dataformat.XMLSecurityDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "yaml", type = "object:org.apache.camel.model.dataformat.YAMLDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "zipDeflater", type = "object:org.apache.camel.model.dataformat.ZipDeflaterDataFormat", oneOf = "dataFormatType"), @@ -9437,6 +9570,16 @@ protected boolean setProperty(MarshalDefinition target, String propertyKey, target.setDataFormatType(val); break; } + case "pgp": { + org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); + target.setDataFormatType(val); + break; + } + case "pqc": { + org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); + target.setDataFormatType(val); + break; + } case "protobuf": { org.apache.camel.model.dataformat.ProtobufDataFormat val = asType(node, org.apache.camel.model.dataformat.ProtobufDataFormat.class); target.setDataFormatType(val); @@ -9502,16 +9645,6 @@ protected boolean setProperty(MarshalDefinition target, String propertyKey, target.setDataFormatType(val); break; } - case "pgp": { - org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); - target.setDataFormatType(val); - break; - } - case "pqc": { - org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); - target.setDataFormatType(val); - break; - } case "yaml": { org.apache.camel.model.dataformat.YAMLDataFormat val = asType(node, org.apache.camel.model.dataformat.YAMLDataFormat.class); target.setDataFormatType(val); @@ -9571,16 +9704,16 @@ protected boolean setProperty(MarshalDefinition target, String propertyKey, types = org.apache.camel.model.language.MethodCallExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Bean Method", - description = "Calls a Java bean method.", + description = "Calls a Java bean method", deprecated = false, properties = { - @YamlProperty(name = "beanType", type = "string", description = "Class name (fully qualified) of the bean to use Will lookup in registry and if there is a single instance of the same type, then the existing bean is used, otherwise a new bean is created (requires a default no-arg constructor).", displayName = "Bean Type"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "method", type = "string", description = "Name of method to call", displayName = "Method"), - @YamlProperty(name = "ref", type = "string", description = "Reference to an existing bean (bean id) to lookup in the registry", displayName = "Ref"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), - @YamlProperty(name = "scope", type = "enum:Singleton,Request,Prototype", defaultValue = "Singleton", description = "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint. The bean should be thread-safe in case concurrent threads is calling the bean at the same time. When using request scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean while processing a request and you want to call the same bean instance multiple times while processing the request. The bean does not have to be thread-safe as the instance is only called from the same request. When using prototype scope, then the bean will be looked up or created per call. However in case of lookup then this is delegated to the bean registry such as Spring or CDI (if in use), which depends on their configuration can act as either singleton or prototype scope. So when using prototype scope then this depends on the bean registry implementation.", displayName = "Scope"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim"), + @YamlProperty(name = "beanType", type = "string", description = "Class name (fully qualified) of the bean to use. Will lookup in registry and if there is a single instance of the same type, then the existing bean is used, otherwise a new bean is created (requires a default no-arg constructor).", displayName = "Bean Type"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "method", type = "string", description = "Name of method to call.", displayName = "Method"), + @YamlProperty(name = "ref", type = "string", description = "Reference to an existing bean (bean id) to lookup in the registry.", displayName = "Ref"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "scope", type = "enum:Singleton,Request,Prototype", defaultValue = "Singleton", description = "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint.", displayName = "Scope"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim"), @YamlProperty(name = "validate", type = "boolean", defaultValue = "true", description = "Whether to validate the bean has the configured method.", displayName = "Validate") } ) @@ -9666,15 +9799,15 @@ protected boolean setProperty(MethodCallExpression target, String propertyKey, types = org.apache.camel.model.dataformat.MimeMultipartDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "MIME Multipart", - description = "Marshal Camel messages with attachments into MIME-Multipart messages and back.", + description = "Marshal Camel messages with attachments into MIME-Multipart messages and back", deprecated = false, properties = { - @YamlProperty(name = "binaryContent", type = "boolean", defaultValue = "false", description = "Defines whether the content of binary parts in the MIME multipart is binary (true) or Base-64 encoded (false) Default is false.", displayName = "Binary Content"), - @YamlProperty(name = "headersInline", type = "boolean", defaultValue = "false", description = "Defines whether the MIME-Multipart headers are part of the message body (true) or are set as Camel headers (false). Default is false.", displayName = "Headers Inline"), + @YamlProperty(name = "binaryContent", type = "boolean", defaultValue = "false", description = "Whether the content of binary parts in the MIME multipart is binary (true) or Base-64 encoded (false).", displayName = "Binary Content"), + @YamlProperty(name = "headersInline", type = "boolean", defaultValue = "false", description = "Whether the MIME-Multipart headers are part of the message body (true) or are set as Camel headers (false).", displayName = "Headers Inline"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "includeHeaders", type = "string", description = "A regex that defines which Camel headers are also included as MIME headers into the MIME multipart. This will only work if headersInline is set to true. Default is to include no headers", displayName = "Include Headers"), - @YamlProperty(name = "multipartSubType", type = "string", defaultValue = "mixed", description = "Specify the subtype of the MIME Multipart. Default is mixed.", displayName = "Multipart Sub Type"), - @YamlProperty(name = "multipartWithoutAttachment", type = "boolean", defaultValue = "false", description = "Defines whether a message without attachment is also marshaled into a MIME Multipart (with only one body part). Default is false.", displayName = "Multipart Without Attachment") + @YamlProperty(name = "includeHeaders", type = "string", description = "A regex that defines which Camel headers are also included as MIME headers into the MIME multipart. This only works if headersInline is set to true.", displayName = "Include Headers"), + @YamlProperty(name = "multipartSubType", type = "string", defaultValue = "mixed", description = "Specify the subtype of the MIME Multipart.", displayName = "Multipart Sub Type"), + @YamlProperty(name = "multipartWithoutAttachment", type = "boolean", defaultValue = "false", description = "Whether a message without attachment is also marshaled into a MIME Multipart (with only one body part).", displayName = "Multipart Without Attachment") } ) public static class MimeMultipartDataFormatDeserializer extends YamlDeserializerBase { @@ -9735,26 +9868,26 @@ protected boolean setProperty(MimeMultipartDataFormat target, String propertyKey types = org.apache.camel.model.MulticastDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Multicast", - description = "Routes the same message to multiple paths either sequentially or in parallel.", + description = "Sends a copy of the message to multiple fixed endpoints, processing them sequentially or in parallel, and optionally aggregating their replies", deprecated = false, properties = { - @YamlProperty(name = "aggregationStrategy", type = "string", description = "Refers to an AggregationStrategy to be used to assemble the replies from the multicasts, into a single outgoing message from the Multicast. By default Camel will use the last reply as the outgoing message. You can also use a POJO as the AggregationStrategy", displayName = "Aggregation Strategy"), - @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy", displayName = "Aggregation Strategy Method Allow Null"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "executorService", type = "string", description = "Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well.", displayName = "Executor Service"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the org.apache.camel.Exchange to be send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send.", displayName = "On Prepare"), + @YamlProperty(name = "aggregationStrategy", type = "string", description = "Reference to the AggregationStrategy to assemble the replies from the multicasts into a single outgoing message. By default Camel uses the last reply as the outgoing message.", displayName = "Aggregation Strategy"), + @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If true then null is used as the oldExchange when there is no data to aggregate, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "The method name to use when using a POJO as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "executorService", type = "string", description = "Reference to a custom thread pool to use for parallel processing. Setting this option implies parallel processing.", displayName = "Executor Service"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "onPrepare", type = "string", description = "Reference to a processor for preparing the exchange to be sent. Can be used to deep-clone messages that should be sent.", displayName = "On Prepare"), @YamlProperty(name = "parallelAggregate", type = "boolean", deprecated = true, defaultValue = "false", description = "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe.", displayName = "Parallel Aggregate"), - @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then sending messages to the multicasts occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the multicasts which happens concurrently. When parallel processing is enabled, then the Camel routing engin will continue processing using last used thread from the parallel thread pool. However, if you want to use the original thread that called the multicast, then make sure to enable the synchronous option as well. In parallel processing mode, you may want to also synchronous = true to force this EIP to process the sub-tasks using the upper bounds of the thread-pool. If using synchronous = false then Camel will allow its reactive routing engine to use as many threads as possible, which may be available due to sub-tasks using other thread-pools such as CompletableFuture.runAsync or others.", displayName = "Parallel Processing"), - @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Multicast will by default not share unit of work between the parent exchange and each multicasted exchange. This means each sub exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), + @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then sending messages to the multicasts occurs concurrently. The caller thread still waits until all messages are fully processed before it continues.", displayName = "Parallel Processing"), + @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the unit of work with the parent and each of the multicast exchanges. By default each multicast exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), - @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the multicast will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The default behavior is to not stop but continue processing till the end", displayName = "Stop On Exception"), - @YamlProperty(name = "streaming", type = "boolean", defaultValue = "false", description = "If enabled then Camel will process replies out-of-order, eg in the order they come back. If disabled, Camel will process replies in the same order as defined by the multicast.", displayName = "Streaming"), - @YamlProperty(name = "synchronous", type = "boolean", defaultValue = "false", description = "Sets whether synchronous processing should be strictly used. When enabled then the same thread is used to continue routing after the multicast is complete, even if parallel processing is enabled.", displayName = "Synchronous"), - @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Sets a total timeout specified in millis, when using parallel processing. If the Multicast hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Multicast breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care.", displayName = "Timeout") + @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "If enabled then stops further multicast processing if an exception or failure occurred during processing of an exchange, and the caused exception will be thrown. The default behavior is to not stop but continue processing till the end.", displayName = "Stop On Exception"), + @YamlProperty(name = "streaming", type = "boolean", defaultValue = "false", description = "If enabled then Camel will process replies out-of-order, in the order they come back. If disabled, Camel will process replies in the same order as defined by the multicast.", displayName = "Streaming"), + @YamlProperty(name = "synchronous", type = "boolean", defaultValue = "false", description = "When enabled then the same thread is used to continue routing after the multicast is complete, even if parallel processing is enabled.", displayName = "Synchronous"), + @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Total timeout in millis when using parallel processing. If the multicast has not been able to process all replies within the given timeframe, then the timeout triggers and the multicast breaks out and continues.", displayName = "Timeout") } ) public static class MulticastDefinitionDeserializer extends YamlDeserializerBase { @@ -9869,11 +10002,11 @@ protected boolean setProperty(MulticastDefinition target, String propertyKey, types = org.apache.camel.model.rest.MutualTLSDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Mutual TLS", - description = "Rest security mutual TLS authentication definition", + description = "Configures mutual TLS (mTLS) client certificate authentication for a REST service", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "A short description for security scheme.", displayName = "Description"), - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key") + @YamlProperty(name = "description", type = "string", description = "A short description for the security scheme.", displayName = "Description"), + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key") } ) public static class MutualTLSDefinitionDeserializer extends YamlDeserializerBase { @@ -9915,13 +10048,13 @@ protected boolean setProperty(MutualTLSDefinition target, String propertyKey, types = org.apache.camel.model.language.MvelExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "MVEL", - description = "Evaluates a MVEL template.", + description = "Evaluates a MVEL template", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class MvelExpressionDeserializer extends YamlDeserializerBase { @@ -9986,7 +10119,7 @@ protected boolean setProperty(MvelExpression target, String propertyKey, types = org.apache.camel.model.errorhandler.NoErrorHandlerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "No Error Handler", - description = "To not use an error handler.", + description = "Disables error handling for a route, causing exceptions to propagate immediately to the caller", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -10023,16 +10156,16 @@ protected boolean setProperty(NoErrorHandlerDefinition target, String propertyKe types = org.apache.camel.model.rest.OAuth2Definition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Oauth2", - description = "Rest security OAuth2 definition", + description = "Configures OAuth2 authentication for a REST service", deprecated = false, properties = { - @YamlProperty(name = "authorizationUrl", type = "string", description = "The authorization URL to be used for this flow. This SHOULD be in the form of a URL. Required for implicit and access code flows", displayName = "Authorization Url"), - @YamlProperty(name = "description", type = "string", description = "A short description for security scheme.", displayName = "Description"), + @YamlProperty(name = "authorizationUrl", type = "string", description = "The authorization URL to use for this flow. Required for implicit and access code flows.", displayName = "Authorization Url"), + @YamlProperty(name = "description", type = "string", description = "A short description for the security scheme.", displayName = "Description"), @YamlProperty(name = "flow", type = "enum:implicit,password,application,clientCredentials,accessCode,authorizationCode", description = "The flow used by the OAuth2 security scheme. Valid values are implicit, password, application or accessCode.", displayName = "Flow"), - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key"), - @YamlProperty(name = "refreshUrl", type = "string", description = "The URL to be used for obtaining refresh tokens. This MUST be in the form of a URL.", displayName = "Refresh Url"), - @YamlProperty(name = "scopes", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "The available scopes for an OAuth2 security scheme", displayName = "Scopes"), - @YamlProperty(name = "tokenUrl", type = "string", description = "The token URL to be used for this flow. This SHOULD be in the form of a URL. Required for password, application, and access code flows.", displayName = "Token Url") + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key"), + @YamlProperty(name = "refreshUrl", type = "string", description = "The URL to use for obtaining refresh tokens.", displayName = "Refresh Url"), + @YamlProperty(name = "scopes", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "The available scopes for the OAuth2 security scheme.", displayName = "Scopes"), + @YamlProperty(name = "tokenUrl", type = "string", description = "The token URL to use for this flow. Required for password, application, and access code flows.", displayName = "Token Url") } ) public static class OAuth2DefinitionDeserializer extends YamlDeserializerBase { @@ -10098,17 +10231,17 @@ protected boolean setProperty(OAuth2Definition target, String propertyKey, types = org.apache.camel.model.dataformat.OcsfDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "OCSF", - description = "Marshal and unmarshal OCSF (Open Cybersecurity Schema Framework) security events to/from JSON.", + description = "Marshal and unmarshal OCSF (Open Cybersecurity Schema Framework) security events to/from JSON", deprecated = false, properties = { - @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then the unmarshal type can be specified via the CamelOcsfUnmarshalType header. This should only be enabled when desired to be used.", displayName = "Allow Unmarshall Type"), - @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", displayName = "Collection Type"), + @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "Whether to allow the unmarshal type to be specified via the CamelOcsfUnmarshalType header.", displayName = "Allow Unmarshall Type"), + @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows using different collection types than java.util.Collection based as default.", displayName = "Collection Type"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "objectMapper", type = "string", description = "Lookup and use the existing ObjectMapper with the given id when using Jackson.", displayName = "Object Mapper"), - @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "To enable pretty printing output nicely formatted. Is by default false.", displayName = "Pretty Print"), + @YamlProperty(name = "prettyPrint", type = "boolean", defaultValue = "false", description = "Whether to enable pretty printing output nicely formatted.", displayName = "Pretty Print"), @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the OCSF event type to use when unmarshalling. Defaults to OcsfEvent.", displayName = "Unmarshal Type"), @YamlProperty(name = "useDefaultObjectMapper", type = "boolean", defaultValue = "true", description = "Whether to lookup and use default Jackson ObjectMapper from the registry.", displayName = "Use Default Object Mapper"), - @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "To unmarshal to a List of OCSF events.", displayName = "Use List") + @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "Whether to unmarshal to a List of OCSF events.", displayName = "Use List") } ) public static class OcsfDataFormatDeserializer extends YamlDeserializerBase { @@ -10180,13 +10313,13 @@ protected boolean setProperty(OcsfDataFormat target, String propertyKey, types = org.apache.camel.model.language.OgnlExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "OGNL", - description = "Evaluates an OGNL expression (Apache Commons OGNL).", + description = "Evaluates an OGNL expression (Apache Commons OGNL)", deprecated = true, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class OgnlExpressionDeserializer extends YamlDeserializerBase { @@ -10252,21 +10385,21 @@ protected boolean setProperty(OgnlExpression target, String propertyKey, types = org.apache.camel.model.OnCompletionDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "On Completion", - description = "Route to be executed when normal route processing completes", + description = "Defines steps to execute when route processing completes, either on success, failure, or both", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "executorService", type = "string", description = "To use a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well.", displayName = "Executor Service"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "mode", type = "enum:AfterConsumer,BeforeConsumer", defaultValue = "AfterConsumer", description = "Sets the on completion mode. The default value is AfterConsumer", displayName = "Mode"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "onCompleteOnly", type = "boolean", defaultValue = "false", description = "Will only synchronize when the org.apache.camel.Exchange completed successfully (no errors).", displayName = "On Complete Only"), - @YamlProperty(name = "onFailureOnly", type = "boolean", defaultValue = "false", description = "Will only synchronize when the org.apache.camel.Exchange ended with failure (exception or FAULT message).", displayName = "On Failure Only"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "executorService", type = "string", description = "Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatically implied, and you do not have to enable that option as well.", displayName = "Executor Service"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "mode", type = "enum:AfterConsumer,BeforeConsumer", defaultValue = "AfterConsumer", description = "Controls when the on-completion callback runs. AfterConsumer (default) runs after the consumer has written the response back to the caller. BeforeConsumer runs before the consumer writes the response, allowing the on-completion route to modify the Exchange before it is returned to the caller (e.g. in InOut mode).", displayName = "Mode"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "onCompleteOnly", type = "boolean", defaultValue = "false", description = "Will only synchronize when the Exchange completed successfully (no errors)", displayName = "On Complete Only"), + @YamlProperty(name = "onFailureOnly", type = "boolean", defaultValue = "false", description = "Will only synchronize when the Exchange ended with failure (exception or FAULT message)", displayName = "On Failure Only"), @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "To use an expression to only trigger routing this completion steps in specific situations", displayName = "On When"), @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then the on completion process will run asynchronously by a separate thread from a thread pool. By default this is false, meaning the on completion process will run synchronously using the same caller thread as from the route.", displayName = "Parallel Processing"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), - @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input message body when an org.apache.camel.Exchange for this on completion. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the split message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Message") + @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input message when an Exchange for this on completion. By default this feature is off.", displayName = "Use Original Message") } ) public static class OnCompletionDefinitionDeserializer extends YamlDeserializerBase { @@ -10357,25 +10490,25 @@ protected boolean setProperty(OnCompletionDefinition target, String propertyKey, types = org.apache.camel.model.OnExceptionDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "On Exception", - description = "Route to be executed when an exception is thrown", + description = "Defines exception handling for specific exception types, with options for redelivery, logging, and routing to error endpoints", deprecated = false, properties = { - @YamlProperty(name = "continued", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Sets whether the exchange should handle and continue routing from the point of failure. If this option is enabled then its considered handled as well.", displayName = "Continued"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "exception", type = "array:string", description = "A set of exceptions to react upon.", displayName = "Exception"), - @YamlProperty(name = "handled", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Sets whether the exchange should be marked as handled or not.", displayName = "Handled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "onExceptionOccurredRef", type = "string", description = "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", displayName = "On Exception Occurred Ref"), - @YamlProperty(name = "onRedeliveryRef", type = "string", description = "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", displayName = "On Redelivery Ref"), + @YamlProperty(name = "continued", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", 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.", displayName = "Continued"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "exception", type = "array:string", description = "A list of exception class names to catch and handle.", displayName = "Exception"), + @YamlProperty(name = "handled", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", 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.", displayName = "Handled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "onExceptionOccurredRef", type = "string", 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.", displayName = "On Exception Occurred Ref"), + @YamlProperty(name = "onRedeliveryRef", type = "string", 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.", displayName = "On Redelivery Ref"), @YamlProperty(name = "onWhen", type = "object:org.apache.camel.model.OnWhenDefinition", description = "To use an expression to only trigger this in specific situations", displayName = "On When"), - @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "Used for configuring redelivery options", displayName = "Redelivery Policy"), - @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a redelivery policy to lookup in the org.apache.camel.spi.Registry to be used.", displayName = "Redelivery Policy Ref"), - @YamlProperty(name = "retryWhile", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Sets the retry while predicate. Will continue retrying until predicate returns false.", displayName = "Retry While"), + @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "Configures redelivery options such as maximum redeliveries, delays, and logging behavior.", displayName = "Redelivery Policy"), + @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a redelivery policy to lookup in the registry to be used.", displayName = "Redelivery Policy Ref"), + @YamlProperty(name = "retryWhile", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "Sets a predicate to control whether redelivery should continue. Redelivery continues as long as the predicate evaluates to true.", displayName = "Retry While"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), - @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the split message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Body"), - @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the split message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Message") + @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "If enabled, uses the original input message body (but not headers) when the exchange is moved to the dead letter queue after all redelivery attempts have been exhausted. This allows enriching the message with custom headers while keeping the original body. Cannot be used together with useOriginalMessage.", displayName = "Use Original Body"), + @YamlProperty(name = "useOriginalMessage", type = "boolean", 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.", displayName = "Use Original Message") } ) public static class OnExceptionDefinitionDeserializer extends YamlDeserializerBase { @@ -10485,13 +10618,13 @@ protected boolean setProperty(OnExceptionDefinition target, String propertyKey, types = org.apache.camel.model.OnFallbackDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "On Fallback", - description = "Route to be executed when Circuit Breaker EIP executes fallback", + description = "Defines the fallback route that executes when the Circuit Breaker trips or the primary route fails", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "fallbackViaNetwork", type = "boolean", defaultValue = "false", description = "Whether the fallback goes over the network. If the fallback will go over the network it is another possible point of failure. It is important to execute the fallback command on a separate thread-pool, otherwise if the main command were to become latent and fill the thread-pool this would prevent the fallback from running if the two commands share the same pool.", displayName = "Fallback Via Network"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "fallbackViaNetwork", type = "boolean", defaultValue = "false", description = "Whether the fallback goes over the network. If so, the fallback is executed on a separate thread-pool to avoid exhausting the main thread-pool.", displayName = "Fallback Via Network"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -10547,14 +10680,14 @@ protected boolean setProperty(OnFallbackDefinition target, String propertyKey, types = org.apache.camel.model.OnWhenDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "On When", - description = "To use a predicate to determine when to trigger this.", + description = "Applies a predicate condition to filter when a parent definition (such as onException or onCompletion) should be triggered", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The predicate to use", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The predicate expression to evaluate.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class OnWhenDefinitionDeserializer extends YamlDeserializerBase { @@ -10614,18 +10747,18 @@ protected boolean setProperty(OnWhenDefinition target, String propertyKey, types = org.apache.camel.model.rest.OpenApiDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Open Api", - description = "To use OpenApi as contract-first with Camel Rest DSL.", + description = "Configures a contract-first REST service using an OpenAPI specification, where Camel auto-generates routes for each operation", deprecated = false, properties = { - @YamlProperty(name = "apiContextPath", type = "string", description = "Whether to enable api-doc that exposes the OpenAPI specification file as a REST endpoint. This allows clients to obtain the specification from the running Camel application.", displayName = "Api Context Path"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "apiContextPath", type = "string", description = "Context path for exposing the OpenAPI specification file as a REST endpoint, allowing clients to obtain the specification from the running application.", displayName = "Api Context Path"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable all the REST services from the OpenAPI contract from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "missingOperation", type = "enum:fail,ignore,mock", defaultValue = "fail", description = "Whether to fail, ignore or return a mock response for OpenAPI operations that are not mapped to a corresponding route.", displayName = "Missing Operation"), @YamlProperty(name = "mockIncludePattern", type = "string", defaultValue = "classpath:camel-mock/**", description = "Used for inclusive filtering of mock data from directories. The pattern is using Ant-path style pattern. Multiple patterns can be specified separated by comma.", displayName = "Mock Include Pattern"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), - @YamlProperty(name = "specification", type = "string", required = true, description = "Path to the OpenApi specification file.", displayName = "Specification") + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "routeId", type = "string", description = "The route id.", displayName = "Route Id"), + @YamlProperty(name = "specification", type = "string", required = true, description = "Path to the OpenAPI specification file.", displayName = "Specification") } ) public static class OpenApiDefinitionDeserializer extends YamlDeserializerBase { @@ -10701,12 +10834,12 @@ protected boolean setProperty(OpenApiDefinition target, String propertyKey, types = org.apache.camel.model.rest.OpenIdConnectDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Open Id Connect", - description = "Rest security OpenID Connect definition", + description = "Configures OpenID Connect authentication for a REST service", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "A short description for security scheme.", displayName = "Description"), - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key"), - @YamlProperty(name = "url", type = "string", required = true, description = "OpenId Connect URL to discover OAuth2 configuration values.", displayName = "Url") + @YamlProperty(name = "description", type = "string", description = "A short description for the security scheme.", displayName = "Description"), + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key"), + @YamlProperty(name = "url", type = "string", required = true, description = "OpenID Connect URL to discover OAuth2 configuration values.", displayName = "Url") } ) public static class OpenIdConnectDefinitionDeserializer extends YamlDeserializerBase { @@ -10752,14 +10885,14 @@ protected boolean setProperty(OpenIdConnectDefinition target, String propertyKey types = org.apache.camel.model.OptimisticLockRetryPolicyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Optimistic Lock Retry Policy", - description = "To configure optimistic locking", + description = "Configures the retry policy for optimistic locking in the Aggregate EIP, controlling retry attempts and delays on version conflicts", deprecated = false, properties = { - @YamlProperty(name = "exponentialBackOff", type = "boolean", defaultValue = "true", description = "Enable exponential backoff", displayName = "Exponential Back Off"), - @YamlProperty(name = "maximumRetries", type = "number", description = "Sets the maximum number of retries", displayName = "Maximum Retries"), - @YamlProperty(name = "maximumRetryDelay", type = "string", defaultValue = "1000", description = "Sets the upper value of retry in millis between retries, when using exponential or random backoff", displayName = "Maximum Retry Delay"), - @YamlProperty(name = "randomBackOff", type = "boolean", defaultValue = "false", description = "Enables random backoff", displayName = "Random Back Off"), - @YamlProperty(name = "retryDelay", type = "string", defaultValue = "50", description = "Sets the delay in millis between retries", displayName = "Retry Delay") + @YamlProperty(name = "exponentialBackOff", type = "boolean", defaultValue = "true", description = "Whether to enable exponential backoff, so each subsequent retry delay is doubled until the maximum retry delay is reached.", displayName = "Exponential Back Off"), + @YamlProperty(name = "maximumRetries", type = "number", description = "Sets the maximum number of retries before giving up on acquiring the optimistic lock.", displayName = "Maximum Retries"), + @YamlProperty(name = "maximumRetryDelay", type = "string", defaultValue = "1000", description = "Sets the upper bound on retry delay in milliseconds to prevent delays from growing unbounded when using exponential or random backoff.", displayName = "Maximum Retry Delay"), + @YamlProperty(name = "randomBackOff", type = "boolean", defaultValue = "false", description = "Whether to enable random backoff, which uses a random delay between 0 and the computed retry delay to avoid thundering herd problems.", displayName = "Random Back Off"), + @YamlProperty(name = "retryDelay", type = "string", defaultValue = "50", description = "Sets the delay in milliseconds between retry attempts when the optimistic lock fails.", displayName = "Retry Delay") } ) public static class OptimisticLockRetryPolicyDefinitionDeserializer extends YamlDeserializerBase { @@ -10815,13 +10948,13 @@ protected boolean setProperty(OptimisticLockRetryPolicyDefinition target, types = org.apache.camel.model.OtherwiseDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Otherwise", - description = "Route to be executed when all other choices evaluate to false", + description = "Defines the default branch within a Choice EIP that executes when no When condition matches", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -10935,14 +11068,14 @@ protected boolean setProperty(OutputDefinition target, String propertyKey, types = org.apache.camel.model.OutputTypeDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Output Type", - description = "Set the expected data type of the output message. If the actual message type is different at runtime, camel look for a required Transformer and apply if exists. If validate attribute is true then camel applies Validator as well. Type name consists of two parts, 'scheme' and 'name' connected with ':'. For Java type 'name' is a fully qualified class name. For example {code java:java.lang.String} , {code json:ABCOrder} . It's also possible to specify only scheme part, so that it works like a wildcard. If only 'xml' is specified, all the XML message matches. It's handy to add only one transformer/validator for all the XML-Java transformation.", + description = "Declares the expected output data type for a route. Camel will apply a data type transformer if the actual message type differs at runtime.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "urn", type = "string", required = true, description = "Set output type URN.", displayName = "Urn"), - @YamlProperty(name = "validate", type = "boolean", defaultValue = "false", description = "Whether if validation is required for this output type.", displayName = "Validate") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "urn", type = "string", required = true, description = "The output type URN, such as java:fully.qualified.ClassName or json:SchemaName.", displayName = "Urn"), + @YamlProperty(name = "validate", type = "boolean", defaultValue = "false", description = "Whether to validate the output type.", displayName = "Validate") } ) public static class OutputTypeDefinitionDeserializer extends YamlDeserializerBase { @@ -10998,24 +11131,24 @@ protected boolean setProperty(OutputTypeDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.PGPDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "PGP (Pretty Good Privacy Cryptographic)", - description = "Encrypt and decrypt messages using Java Cryptographic Extension (JCE) and PGP.", + description = "Encrypt and decrypt messages using Java Cryptographic Extension (JCE) and PGP", deprecated = false, properties = { - @YamlProperty(name = "algorithm", type = "number", description = "Symmetric key encryption algorithm; possible values are defined in org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags; for example 2 (= TRIPLE DES), 3 (= CAST5), 4 (= BLOWFISH), 6 (= DES), 7 (= AES_128). Only relevant for encrypting.", displayName = "Algorithm"), + @YamlProperty(name = "algorithm", type = "number", description = "Symmetric key encryption algorithm; possible values are defined in org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags. Only relevant for encrypting.", displayName = "Algorithm"), @YamlProperty(name = "armored", type = "boolean", defaultValue = "false", description = "This option will cause PGP to base64 encode the encrypted text, making it available for copy/paste, etc.", displayName = "Armored"), - @YamlProperty(name = "compressionAlgorithm", type = "number", description = "Compression algorithm; possible values are defined in org.bouncycastle.bcpg.CompressionAlgorithmTags; for example 0 (= UNCOMPRESSED), 1 (= ZIP), 2 (= ZLIB), 3 (= BZIP2). Only relevant for encrypting.", displayName = "Compression Algorithm"), - @YamlProperty(name = "hashAlgorithm", type = "number", description = "Signature hash algorithm; possible values are defined in org.bouncycastle.bcpg.HashAlgorithmTags; for example 2 (= SHA1), 8 (= SHA256), 9 (= SHA384), 10 (= SHA512), 11 (=SHA224). Only relevant for signing.", displayName = "Hash Algorithm"), + @YamlProperty(name = "compressionAlgorithm", type = "number", description = "Compression algorithm; possible values are defined in org.bouncycastle.bcpg.CompressionAlgorithmTags. Only relevant for encrypting.", displayName = "Compression Algorithm"), + @YamlProperty(name = "hashAlgorithm", type = "number", description = "Signature hash algorithm; possible values are defined in org.bouncycastle.bcpg.HashAlgorithmTags. Only relevant for signing.", displayName = "Hash Algorithm"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "integrity", type = "boolean", defaultValue = "true", description = "Adds an integrity check/sign into the encryption file. The default value is true.", displayName = "Integrity"), + @YamlProperty(name = "integrity", type = "boolean", defaultValue = "true", description = "Adds an integrity check/sign into the encryption file.", displayName = "Integrity"), @YamlProperty(name = "keyFileName", type = "string", description = "Filename of the keyring; must be accessible as a classpath resource (but you can specify a location in the file system by using the file: prefix).", displayName = "Key File Name"), - @YamlProperty(name = "keyUserid", type = "string", description = "The user ID of the key in the PGP keyring used during encryption. Can also be only a part of a user ID. For example, if the user ID is Test User then you can use the part Test User or to address the user ID.", displayName = "Key Userid"), + @YamlProperty(name = "keyUserid", type = "string", description = "The user ID of the key in the PGP keyring used during encryption. Can also be only a part of a user ID.", displayName = "Key Userid"), @YamlProperty(name = "password", type = "string", description = "Password used when opening the private key (not used for encryption).", displayName = "Password"), - @YamlProperty(name = "provider", type = "string", description = "Java Cryptography Extension (JCE) provider, default is Bouncy Castle (BC). Alternatively you can use, for example, the IAIK JCE provider; in this case the provider must be registered beforehand and the Bouncy Castle provider must not be registered beforehand. The Sun JCE provider does not work.", displayName = "Provider"), + @YamlProperty(name = "provider", type = "string", description = "Java Cryptography Extension (JCE) provider, default is Bouncy Castle (BC). Alternatively you can use, for example, the IAIK JCE provider.", displayName = "Provider"), @YamlProperty(name = "signatureKeyFileName", type = "string", description = "Filename of the keyring to use for signing (during encryption) or for signature verification (during decryption); must be accessible as a classpath resource (but you can specify a location in the file system by using the file: prefix).", displayName = "Signature Key File Name"), - @YamlProperty(name = "signatureKeyRing", type = "string", description = "Keyring used for signing/verifying as byte array. You can not set the signatureKeyFileName and signatureKeyRing at the same time.", displayName = "Signature Key Ring"), - @YamlProperty(name = "signatureKeyUserid", type = "string", description = "User ID of the key in the PGP keyring used for signing (during encryption) or signature verification (during decryption). During the signature verification process the specified User ID restricts the public keys from the public keyring which can be used for the verification. If no User ID is specified for the signature verficiation then any public key in the public keyring can be used for the verification. Can also be only a part of a user ID. For example, if the user ID is Test User then you can use the part Test User or to address the User ID.", displayName = "Signature Key Userid"), + @YamlProperty(name = "signatureKeyRing", type = "string", description = "Keyring used for signing/verifying as byte array. You cannot set the signatureKeyFileName and signatureKeyRing at the same time.", displayName = "Signature Key Ring"), + @YamlProperty(name = "signatureKeyUserid", type = "string", description = "User ID of the key in the PGP keyring used for signing (during encryption) or signature verification (during decryption).", displayName = "Signature Key Userid"), @YamlProperty(name = "signaturePassword", type = "string", description = "Password used when opening the private key used for signing (during encryption).", displayName = "Signature Password"), - @YamlProperty(name = "signatureVerificationOption", type = "string", description = "Controls the behavior for verifying the signature during unmarshaling. There are 4 values possible: optional: The PGP message may or may not contain signatures; if it does contain signatures, then a signature verification is executed. required: The PGP message must contain at least one signature; if this is not the case an exception (PGPException) is thrown. A signature verification is executed. ignore: Contained signatures in the PGP message are ignored; no signature verification is executed. no_signature_allowed: The PGP message must not contain a signature; otherwise an exception (PGPException) is thrown.", displayName = "Signature Verification Option") + @YamlProperty(name = "signatureVerificationOption", type = "string", description = "Controls the behavior for verifying the signature during unmarshaling. Possible values: optional, required, ignore, no_signature_allowed.", displayName = "Signature Verification Option") } ) public static class PGPDataFormatDeserializer extends YamlDeserializerBase { @@ -11121,16 +11254,15 @@ protected boolean setProperty(PGPDataFormat target, String propertyKey, String p types = org.apache.camel.model.dataformat.PQCDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "PQC (Post-Quantum Cryptography)", - description = "Encrypt and decrypt messages using Post-Quantum Cryptography Key Encapsulation Mechanisms (KEM).", + description = "Encrypt and decrypt messages using Post-Quantum Cryptography Key Encapsulation Mechanisms (KEM)", deprecated = false, properties = { - @YamlProperty(name = "bufferSize", type = "number", defaultValue = "4096", description = "The size of the buffer used for streaming encryption/decryption.", displayName = "Buffer Size"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "keyEncapsulationAlgorithm", type = "enum:MLKEM,BIKE,HQC,CMCE,SABER,FRODO,NTRU,NTRULPRime,SNTRUPrime,KYBER", defaultValue = "MLKEM", description = "The Post-Quantum KEM algorithm to use for key encapsulation. Supported values: MLKEM, BIKE, HQC, CMCE, SABER, FRODO, NTRU, NTRULPRime, SNTRUPrime, KYBER", displayName = "Key Encapsulation Algorithm"), - @YamlProperty(name = "keyGenerator", type = "string", description = "Refers to a custom KeyGenerator to lookup from the register for KEM operations.", displayName = "Key Generator"), - @YamlProperty(name = "keyPair", type = "string", description = "Refers to the KeyPair to lookup from the register to use for KEM operations.", displayName = "Key Pair"), + @YamlProperty(name = "keyEncapsulationAlgorithm", type = "enum:MLKEM,BIKE,HQC,CMCE,SABER,FRODO,NTRU,NTRULPRime,SNTRUPrime,KYBER", defaultValue = "MLKEM", description = "The Post-Quantum KEM algorithm to use for key encapsulation.", displayName = "Key Encapsulation Algorithm"), + @YamlProperty(name = "keyGenerator", type = "string", description = "Refers to a custom KeyGenerator to lookup from the registry for KEM operations.", displayName = "Key Generator"), + @YamlProperty(name = "keyPair", type = "string", description = "Refers to the KeyPair to lookup from the registry to use for KEM operations.", displayName = "Key Pair"), @YamlProperty(name = "provider", type = "string", description = "The JCE security provider to use.", displayName = "Provider"), - @YamlProperty(name = "symmetricKeyAlgorithm", type = "enum:AES,ARIA,RC2,RC5,CAMELLIA,CAST5,CAST6,CHACHA7539,DSTU7624,GOST28147,GOST3412_2015,GRAIN128,HC128,HC256,SALSA20,SEED,SM4,DESEDE", defaultValue = "AES", description = "The symmetric encryption algorithm to use with the shared secret. Supported values: AES, ARIA, RC2, RC5, CAMELLIA, CAST5, CAST6, CHACHA7539, etc.", displayName = "Symmetric Key Algorithm"), + @YamlProperty(name = "symmetricKeyAlgorithm", type = "enum:AES,ARIA,CAMELLIA,CAST6,DSTU7624,GOST3412_2015,SEED,SM4,CHACHA7539", defaultValue = "AES", description = "The symmetric encryption algorithm to use with the shared secret. Only algorithms that support authenticated encryption (AEAD) are allowed: AES, ARIA, CAMELLIA, CAST6, DSTU7624, GOST3412_2015, SEED and SM4 are encrypted with GCM, and CHACHA7539 with ChaCha20-Poly1305.", displayName = "Symmetric Key Algorithm"), @YamlProperty(name = "symmetricKeyLength", type = "number", defaultValue = "128", description = "The length (in bits) of the symmetric key.", displayName = "Symmetric Key Length") } ) @@ -11149,11 +11281,6 @@ protected boolean setProperty(PQCDataFormat target, String propertyKey, String p Node node) { propertyKey = org.apache.camel.util.StringHelper.dashToCamelCase(propertyKey); switch(propertyKey) { - case "bufferSize": { - String val = asText(node); - target.setBufferSize(val); - break; - } case "id": { String val = asText(node); target.setId(val); @@ -11202,12 +11329,12 @@ protected boolean setProperty(PQCDataFormat target, String propertyKey, String p types = org.apache.camel.model.PackageScanDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Package Scan", - description = "Scans for Java org.apache.camel.builder.RouteBuilder classes in java packages", + description = "Scans Java packages on the classpath for RouteBuilder classes to auto-discover and register routes", deprecated = false, properties = { @YamlProperty(name = "excludes", type = "array:string", description = "Exclude finding route builder from these java package names.", displayName = "Excludes"), @YamlProperty(name = "includes", type = "array:string", description = "Include finding route builder from these java package names.", displayName = "Includes"), - @YamlProperty(name = "package", type = "array:string", description = "Sets the java package names to use for scanning for route builder classes", displayName = "Package") + @YamlProperty(name = "package", type = "array:string", description = "Java package names to use for scanning for route builder classes.", displayName = "Package") } ) public static class PackageScanDefinitionDeserializer extends YamlDeserializerBase { @@ -11253,20 +11380,20 @@ protected boolean setProperty(PackageScanDefinition target, String propertyKey, types = org.apache.camel.model.rest.ParamDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Param", - description = "To specify the rest operation parameters.", + description = "Defines a parameter for a REST operation, specifying its type, name, data type, and whether it is required", deprecated = false, properties = { - @YamlProperty(name = "allowableValues", type = "array:org.apache.camel.model.ValueDefinition", description = "Sets the parameter list of allowable values (enum).", displayName = "Allowable Values"), + @YamlProperty(name = "allowableValues", type = "array:org.apache.camel.model.ValueDefinition", description = "List of allowable values for the parameter (enum).", displayName = "Allowable Values"), @YamlProperty(name = "arrayType", type = "string", defaultValue = "string", description = "Sets the parameter array type. Required if data type is array. Describes the type of items in the array.", displayName = "Array Type"), @YamlProperty(name = "collectionFormat", type = "enum:csv,multi,pipes,ssv,tsv", defaultValue = "csv", description = "Sets the parameter collection format.", displayName = "Collection Format"), - @YamlProperty(name = "dataFormat", type = "string", description = "Sets the parameter data format.", displayName = "Data Format"), - @YamlProperty(name = "dataType", type = "string", defaultValue = "string", description = "Sets the parameter data type.", displayName = "Data Type"), - @YamlProperty(name = "defaultValue", type = "string", description = "Sets the parameter default value.", displayName = "Default Value"), - @YamlProperty(name = "description", type = "string", description = "Sets the parameter description.", displayName = "Description"), - @YamlProperty(name = "examples", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Sets the parameter examples.", displayName = "Examples"), - @YamlProperty(name = "name", type = "string", required = true, description = "Sets the parameter name.", displayName = "Name"), + @YamlProperty(name = "dataFormat", type = "string", description = "The data format of the parameter such as binary, date, date-time, or password.", displayName = "Data Format"), + @YamlProperty(name = "dataType", type = "string", defaultValue = "string", description = "Sets the parameter data type such as string, integer, or boolean.", displayName = "Data Type"), + @YamlProperty(name = "defaultValue", type = "string", description = "The default value of the parameter.", displayName = "Default Value"), + @YamlProperty(name = "description", type = "string", description = "Description of the parameter.", displayName = "Description"), + @YamlProperty(name = "examples", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Examples of the parameter.", displayName = "Examples"), + @YamlProperty(name = "name", type = "string", required = true, description = "The parameter name.", displayName = "Name"), @YamlProperty(name = "required", type = "boolean", defaultValue = "true", description = "Sets the parameter required flag.", displayName = "Required"), - @YamlProperty(name = "type", type = "enum:body,formData,header,path,query", defaultValue = "path", description = "Sets the parameter type.", displayName = "Type") + @YamlProperty(name = "type", type = "enum:body,formData,header,path,query", defaultValue = "path", description = "Sets the parameter type such as body, form, header, path, or query.", displayName = "Type") } ) public static class ParamDefinitionDeserializer extends YamlDeserializerBase { @@ -11351,13 +11478,13 @@ protected boolean setProperty(ParamDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.ParquetAvroDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Parquet File", - description = "Parquet Avro serialization and de-serialization.", + description = "Parquet Avro serialization and de-serialization", deprecated = false, properties = { @YamlProperty(name = "compressionCodecName", type = "enum:UNCOMPRESSED,SNAPPY,GZIP,LZO,BROTLI,LZ4,ZSTD,LZ4_RAW", defaultValue = "GZIP", description = "Compression codec to use when marshalling.", displayName = "Compression Codec Name"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator of records or read all the records at once.", displayName = "Lazy Load"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class to use when (un)marshalling. If omitted, parquet files are converted into Avro's GenericRecords for unmarshalling and input objects are assumed as GenericRecords for marshalling.", displayName = "Unmarshal Type") + @YamlProperty(name = "unmarshalType", type = "string", description = "Class to use when (un)marshalling. If omitted, parquet files are converted into Avro GenericRecords for unmarshalling and input objects are assumed as GenericRecords for marshalling.", displayName = "Unmarshal Type") } ) public static class ParquetAvroDataFormatDeserializer extends YamlDeserializerBase { @@ -11413,32 +11540,32 @@ protected boolean setProperty(ParquetAvroDataFormat target, String propertyKey, types = org.apache.camel.model.rest.PatchDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Patch", - description = "Rest PATCH command", + description = "Defines an HTTP PATCH operation in the REST DSL", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. The default value is true.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), @YamlProperty(name = "deprecated", type = "boolean", defaultValue = "false", description = "Marks this rest operation as deprecated in OpenApi documentation.", displayName = "Deprecated"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data. This option will override what may be configured on a parent level.", displayName = "Out Type"), @YamlProperty(name = "param", type = "array:org.apache.camel.model.rest.ParamDefinition", description = "Information about parameters for this REST operation", displayName = "Param"), @YamlProperty(name = "path", type = "string", description = "The path mapping URIs of this REST operation such as /{id}.", displayName = "Path"), - @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), @YamlProperty(name = "responseMessage", type = "array:org.apache.camel.model.rest.ResponseMessageDefinition", description = "Response details for this REST operation", displayName = "Response Message"), - @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), + @YamlProperty(name = "routeId", type = "string", description = "The route id this REST service will refer to.", displayName = "Route Id"), @YamlProperty(name = "security", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Security settings for this REST operation", displayName = "Security"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "streamCache", type = "boolean", defaultValue = "false", description = "Whether stream caching is enabled on this rest operation.", displayName = "Stream Cache"), @YamlProperty(name = "to", type = "object:org.apache.camel.model.ToDefinition", description = "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", displayName = "To"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data. This option will override what may be configured on a parent level.", displayName = "Type") } ) public static class PatchDefinitionDeserializer extends YamlDeserializerBase { @@ -11584,15 +11711,15 @@ protected boolean setProperty(PatchDefinition target, String propertyKey, types = org.apache.camel.model.PausableDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Pausable", - description = "Pausable EIP to support resuming processing from last known offset.", + description = "Pauses a consumer based on a condition, allowing it to be resumed later from the last known offset. Useful for controlling ingestion rate on polling consumers.", deprecated = false, properties = { - @YamlProperty(name = "consumerListener", type = "string", required = true, description = "Sets the consumer listener to use", displayName = "Consumer Listener"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "untilCheck", type = "string", required = true, description = "References to a java.util.function.Predicate to use for until checks. The predicate is responsible for evaluating whether the processing can resume or not. Such predicate should return true if the consumption can resume, or false otherwise. The exact point of when the predicate is called is dependent on the component, and it may be called on either one of the available events. Implementations should not assume the predicate to be called at any specific point.", displayName = "Until Check") + @YamlProperty(name = "consumerListener", type = "string", required = true, description = "The consumer listener to use for pausing and resuming the consumer.", displayName = "Consumer Listener"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "untilCheck", type = "string", required = true, description = "Predicate to evaluate whether the processing can resume. Returns true if consumption can resume, or false otherwise.", displayName = "Until Check") } ) public static class PausableDefinitionDeserializer extends YamlDeserializerBase { @@ -11653,13 +11780,13 @@ protected boolean setProperty(PausableDefinition target, String propertyKey, types = org.apache.camel.model.PipelineDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Pipeline", - description = "Routes the message to a sequence of processors.", + description = "Processes the message through a sequence of steps where the output of each step becomes the input of the next", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -11715,14 +11842,14 @@ protected boolean setProperty(PipelineDefinition target, String propertyKey, types = org.apache.camel.model.PolicyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Policy", - description = "Defines a policy the route will use", + description = "Applies a policy to the route, such as a transactional policy or a custom policy for cross-cutting concerns", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "ref", type = "string", required = true, description = "Sets a reference to use for lookup the policy in the registry.", displayName = "Ref"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the policy to lookup in the registry.", displayName = "Ref"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -11784,17 +11911,17 @@ protected boolean setProperty(PolicyDefinition target, String propertyKey, types = org.apache.camel.model.PollDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Poll", - description = "Polls a message from a static endpoint", + description = "Polls a single message from a consumer endpoint and sets it as the message body. Useful for fetching data on-demand from file, database, or messaging endpoints.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "parameters", type = "object"), - @YamlProperty(name = "timeout", type = "string", defaultValue = "20000", description = "Timeout in millis when polling from the external service. The timeout has influence about the poll enrich behavior. It basically operations in three different modes: negative value - Waits until a message is available and then returns it. Warning that this method could block indefinitely if no messages are available. 0 - Attempts to receive a message exchange immediately without waiting and returning null if a message exchange is not available yet. positive value - Attempts to receive a message exchange, waiting up to the given timeout to expire if a message is not yet available. Returns null if timed out The default value is 20000 (20 seconds).", displayName = "Timeout"), - @YamlProperty(name = "uri", type = "string", required = true, description = "Sets the uri of the endpoint to poll from.", displayName = "Uri"), - @YamlProperty(name = "variableReceive", type = "string", 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. Important: When using receive variable then the received body is stored only in this variable and not on the current message.", displayName = "Variable Receive") + @YamlProperty(name = "timeout", type = "string", defaultValue = "20000", description = "Timeout in millis when polling from the external service. The default value is 20000 (20 seconds).", displayName = "Timeout"), + @YamlProperty(name = "uri", type = "string", required = true, description = "The uri of the endpoint to poll a single message from. The result is stored in the original message body (or in a variable if variableReceive is set).", displayName = "Uri"), + @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive") } ) public static class PollDefinitionDeserializer extends YamlDeserializerEndpointAwareBase { @@ -11871,25 +11998,25 @@ protected boolean setProperty(PollDefinition target, String propertyKey, types = org.apache.camel.model.PollEnrichDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Poll Enrich", - description = "Enriches messages with data polled from a secondary resource", + description = "Enriches the message with additional data obtained by polling a consumer endpoint (such as a file or message queue). The polled data is merged using an aggregation strategy.", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "aggregateOnException", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method. For example to suppress the exception or set a custom message body etc.", displayName = "Aggregate On Exception"), + @YamlProperty(name = "aggregateOnException", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method.", displayName = "Aggregate On Exception"), @YamlProperty(name = "aggregationStrategy", type = "string", 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.", displayName = "Aggregation Strategy"), @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "string", description = "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise if they are org.apache.camel.spi.PollDynamicAware", displayName = "Allow Optimised Components"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicitly declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise if they are PollDynamicAware.", displayName = "Allow Optimised Components"), @YamlProperty(name = "autoStartComponents", type = "boolean", defaultValue = "true", description = "Whether to auto startup components when poll enricher is starting up.", displayName = "Auto Start Components"), - @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ConsumerCache which is used to cache and reuse consumers when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the consumers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise consumers/endpoints are stored in memory in the caches. However, if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both consumers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non-frequent used consumers.", displayName = "Cache Size"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression that computes the endpoint uri to use as the resource endpoint to enrich from", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreInvalidEndpoint", type = "boolean", defaultValue = "false", description = "Ignore the invalidate endpoint exception when try to create a consumer with that endpoint", displayName = "Ignore Invalid Endpoint"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "timeout", type = "string", defaultValue = "-1", description = "Timeout in millis when polling from the external service. The timeout has influence about the poll enrich behavior. It basically operations in three different modes: negative value - Waits until a message is available and then returns it. Warning that this method could block indefinitely if no messages are available. 0 - Attempts to receive a message exchange immediately without waiting and returning null if a message exchange is not available yet. positive value - Attempts to receive a message exchange, waiting up to the given timeout to expire if a message is not yet available. Returns null if timed out The default value is -1 and therefore the method could block indefinitely, and therefore its recommended to use a timeout value", displayName = "Timeout"), - @YamlProperty(name = "variableReceive", type = "string", 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. Important: When using receive variable then the received body is stored only in this variable and not on the current message.", displayName = "Variable Receive") + @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the ConsumerCache which is used to cache and reuse consumers when uris are reused. Use 0 for default cache size, or -1 to turn cache off.", displayName = "Cache Size"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression to compute the endpoint URI to poll-enrich from.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "ignoreInvalidEndpoint", type = "boolean", defaultValue = "false", description = "Whether to ignore an invalid endpoint URI when trying to create a consumer with that endpoint.", displayName = "Ignore Invalid Endpoint"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "timeout", type = "string", defaultValue = "-1", description = "Timeout in millis when polling from the external service. A negative value waits until a message is available (could block indefinitely). Zero attempts to receive immediately without waiting. A positive value waits up to the given timeout.", displayName = "Timeout"), + @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive") } ) public static class PollEnrichDefinitionDeserializer extends YamlDeserializerBase { @@ -12004,32 +12131,32 @@ protected boolean setProperty(PollEnrichDefinition target, String propertyKey, types = org.apache.camel.model.rest.PostDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Post", - description = "Rest POST command", + description = "Defines an HTTP POST operation in the REST DSL", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. The default value is true.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), @YamlProperty(name = "deprecated", type = "boolean", defaultValue = "false", description = "Marks this rest operation as deprecated in OpenApi documentation.", displayName = "Deprecated"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data. This option will override what may be configured on a parent level.", displayName = "Out Type"), @YamlProperty(name = "param", type = "array:org.apache.camel.model.rest.ParamDefinition", description = "Information about parameters for this REST operation", displayName = "Param"), @YamlProperty(name = "path", type = "string", description = "The path mapping URIs of this REST operation such as /{id}.", displayName = "Path"), - @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), @YamlProperty(name = "responseMessage", type = "array:org.apache.camel.model.rest.ResponseMessageDefinition", description = "Response details for this REST operation", displayName = "Response Message"), - @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), + @YamlProperty(name = "routeId", type = "string", description = "The route id this REST service will refer to.", displayName = "Route Id"), @YamlProperty(name = "security", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Security settings for this REST operation", displayName = "Security"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "streamCache", type = "boolean", defaultValue = "false", description = "Whether stream caching is enabled on this rest operation.", displayName = "Stream Cache"), @YamlProperty(name = "to", type = "object:org.apache.camel.model.ToDefinition", description = "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", displayName = "To"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data. This option will override what may be configured on a parent level.", displayName = "Type") } ) public static class PostDefinitionDeserializer extends YamlDeserializerBase { @@ -12175,11 +12302,11 @@ protected boolean setProperty(PostDefinition target, String propertyKey, types = org.apache.camel.model.validator.PredicateValidatorDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Predicate Validator", - description = "To use a predicate to perform validation on the route level.", + description = "Uses a predicate expression to validate message data types at the route level", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The predicate to use for validation.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "type", type = "string", description = "Set the data type name. If you specify 'xml:XYZ', the validator will be picked up if message type is 'xml:XYZ'. If you specify just 'xml', the validator matches with all of 'xml' message type like 'xml:ABC' or 'xml:DEF'.", displayName = "Type") + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The predicate expression to use for validation.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "type", type = "string", 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.", displayName = "Type") } ) public static class PredicateValidatorDefinitionDeserializer extends YamlDeserializerBase { @@ -12220,14 +12347,14 @@ protected boolean setProperty(PredicateValidatorDefinition target, String proper types = org.apache.camel.model.ProcessDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Process", - description = "Calls a Camel processor", + description = "Invokes a custom Camel Processor for programmatic message processing in Java", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the Processor to lookup in the registry to use. A Processor is a class of type org.apache.camel.Processor, which can are to be called by this EIP. In this processor you have custom Java code, that can work with the message, such as to do custom business logic, special message manipulations and so on. By default, the ref, will lookup the bean in the Camel registry. The ref can use prefix that controls how the processor is obtained. You can use #bean:myBean where myBean is the id of the Camel processor (lookup). Can also be used for creating new beans by their class name by prefixing with #class, eg #class:com.foo.MyClassType. And it is also possible to refer to singleton beans by their type in the registry by prefixing with #type: syntax, eg #type:com.foo.MyClassType", displayName = "Ref") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the Processor to lookup in the registry to use. Can use prefixes such as #bean:, #class:, or #type: to control how the processor is obtained.", displayName = "Ref") } ) public static class ProcessDefinitionDeserializer extends YamlDeserializerBase { @@ -12283,10 +12410,10 @@ protected boolean setProperty(ProcessDefinition target, String propertyKey, types = org.apache.camel.model.PropertyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Property", - description = "A key value pair where the value is a literal value", + description = "Defines a key/value pair with a literal value, used for passing parameters in route templates and other configurations", deprecated = false, properties = { - @YamlProperty(name = "key", type = "string", required = true, description = "The name of the property", displayName = "Key"), + @YamlProperty(name = "key", type = "string", required = true, description = "The name of the property.", displayName = "Key"), @YamlProperty(name = "value", type = "string", required = true, description = "The property value.", displayName = "Value") } ) @@ -12328,12 +12455,12 @@ protected boolean setProperty(PropertyDefinition target, String propertyKey, types = org.apache.camel.model.PropertyExpressionDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Property Expression", - description = "A key value pair where the value is an expression.", + description = "Defines a key/value pair where the value is computed by an expression, used for passing dynamic parameters", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Property values as an expression", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "key", type = "string", required = true, description = "Property key", displayName = "Key") + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The property value as an expression.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "key", type = "string", required = true, description = "The property key.", displayName = "Key") } ) public static class PropertyExpressionDefinitionDeserializer extends YamlDeserializerBase { @@ -12384,29 +12511,29 @@ protected boolean setProperty(PropertyExpressionDefinition target, String proper types = org.apache.camel.model.dataformat.ProtobufDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Protobuf", - description = "Serialize and deserialize Java objects using Google's Protocol buffers.", + description = "Serialize and deserialize Java objects using Google's Protocol buffers", deprecated = false, properties = { @YamlProperty(name = "allowJmsType", type = "boolean", defaultValue = "false", description = "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", displayName = "Allow Jms Type"), - @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used.", displayName = "Allow Unmarshall Type"), - @YamlProperty(name = "autoDiscoverObjectMapper", type = "boolean", defaultValue = "false", description = "If set to true then Jackson will lookup for an objectMapper into the registry", displayName = "Auto Discover Object Mapper"), - @YamlProperty(name = "autoDiscoverSchemaResolver", type = "boolean", defaultValue = "true", description = "When not disabled, the SchemaResolver will be looked up into the registry", displayName = "Auto Discover Schema Resolver"), - @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", displayName = "Collection Type"), - @YamlProperty(name = "contentTypeFormat", type = "enum:native,json", defaultValue = "native", description = "Defines a content type format in which protobuf message will be serialized/deserialized from(to) the Java been. The format can either be native or json for either native protobuf or json fields representation. The default value is native.", displayName = "Content Type Format"), + @YamlProperty(name = "allowUnmarshallType", type = "boolean", defaultValue = "false", description = "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling.", displayName = "Allow Unmarshall Type"), + @YamlProperty(name = "autoDiscoverObjectMapper", type = "boolean", defaultValue = "false", description = "If set to true then Jackson will lookup for an objectMapper into the registry.", displayName = "Auto Discover Object Mapper"), + @YamlProperty(name = "autoDiscoverSchemaResolver", type = "boolean", defaultValue = "true", description = "When not disabled, the SchemaResolver will be looked up into the registry.", displayName = "Auto Discover Schema Resolver"), + @YamlProperty(name = "collectionType", type = "string", description = "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows using different collection types than java.util.Collection based as default.", displayName = "Collection Type"), + @YamlProperty(name = "contentTypeFormat", type = "enum:native,json", defaultValue = "native", description = "Defines a content type format in which protobuf message will be serialized/deserialized from(to) the Java been. The format can either be native or json for either native protobuf or json fields representation.", displayName = "Content Type Format"), @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), - @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Disable Features"), - @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", displayName = "Enable Features"), + @YamlProperty(name = "disableFeatures", type = "string", description = "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated by comma.", displayName = "Disable Features"), + @YamlProperty(name = "enableFeatures", type = "string", description = "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated by comma.", displayName = "Enable Features"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "include", type = "string", description = "If you want to marshal a pojo to JSON, and the pojo has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL", displayName = "Include"), - @YamlProperty(name = "instanceClass", type = "string", description = "Name of class to use when unmarshalling", displayName = "Instance Class"), - @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations", displayName = "Json View"), + @YamlProperty(name = "include", type = "string", description = "If you want to marshal a pojo to JSON, and the pojo has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL.", displayName = "Include"), + @YamlProperty(name = "instanceClass", type = "string", description = "Name of class to use when unmarshalling.", displayName = "Instance Class"), + @YamlProperty(name = "jsonView", type = "string", description = "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations.", displayName = "Json View"), @YamlProperty(name = "library", type = "enum:GoogleProtobuf,Jackson", defaultValue = "GoogleProtobuf", description = "Which Protobuf library to use.", displayName = "Library"), @YamlProperty(name = "moduleClassNames", type = "string", description = "To use custom Jackson modules com.fasterxml.jackson.databind.Module specified as a String with FQN class names. Multiple classes can be separated by comma.", displayName = "Module Class Names"), @YamlProperty(name = "moduleRefs", type = "string", description = "To use custom Jackson modules referred from the Camel registry. Multiple modules can be separated by comma.", displayName = "Module Refs"), @YamlProperty(name = "objectMapper", type = "string", description = "Lookup and use the existing ObjectMapper with the given id when using Jackson.", displayName = "Object Mapper"), @YamlProperty(name = "schemaResolver", type = "string", description = "Optional schema resolver used to lookup schemas for the data in transit.", displayName = "Schema Resolver"), @YamlProperty(name = "timezone", type = "string", description = "If set then Jackson will use the Timezone when marshalling/unmarshalling.", displayName = "Timezone"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling", displayName = "Unmarshal Type"), + @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling.", displayName = "Unmarshal Type"), @YamlProperty(name = "useDefaultObjectMapper", type = "boolean", defaultValue = "true", description = "Whether to lookup and use default Jackson ObjectMapper from the registry.", displayName = "Use Default Object Mapper"), @YamlProperty(name = "useList", type = "boolean", defaultValue = "false", description = "To unmarshal to a List of Map or a List of Pojo.", displayName = "Use List") } @@ -12553,32 +12680,32 @@ protected boolean setProperty(ProtobufDataFormat target, String propertyKey, types = org.apache.camel.model.rest.PutDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Put", - description = "Rest PUT command", + description = "Defines an HTTP PUT operation in the REST DSL", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. The default value is true.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), @YamlProperty(name = "deprecated", type = "boolean", defaultValue = "false", description = "Marks this rest operation as deprecated in OpenApi documentation.", displayName = "Deprecated"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data. This option will override what may be configured on a parent level.", displayName = "Out Type"), @YamlProperty(name = "param", type = "array:org.apache.camel.model.rest.ParamDefinition", description = "Information about parameters for this REST operation", displayName = "Param"), @YamlProperty(name = "path", type = "string", description = "The path mapping URIs of this REST operation such as /{id}.", displayName = "Path"), - @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), @YamlProperty(name = "responseMessage", type = "array:org.apache.camel.model.rest.ResponseMessageDefinition", description = "Response details for this REST operation", displayName = "Response Message"), - @YamlProperty(name = "routeId", type = "string", description = "Sets the id of the route", displayName = "Route Id"), + @YamlProperty(name = "routeId", type = "string", description = "The route id this REST service will refer to.", displayName = "Route Id"), @YamlProperty(name = "security", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Security settings for this REST operation", displayName = "Security"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "streamCache", type = "boolean", defaultValue = "false", description = "Whether stream caching is enabled on this rest operation.", displayName = "Stream Cache"), @YamlProperty(name = "to", type = "object:org.apache.camel.model.ToDefinition", description = "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", displayName = "To"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data. This option will override what may be configured on a parent level.", displayName = "Type") } ) public static class PutDefinitionDeserializer extends YamlDeserializerBase { @@ -12725,13 +12852,13 @@ protected boolean setProperty(PutDefinition target, String propertyKey, String p types = org.apache.camel.model.language.PythonExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Python", - description = "Evaluates a Python expression.", + description = "Evaluates a Python expression", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class PythonExpressionDeserializer extends YamlDeserializerBase { @@ -12796,7 +12923,7 @@ protected boolean setProperty(PythonExpression target, String propertyKey, types = org.apache.camel.model.loadbalancer.RandomLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Random Load Balancer", - description = "The destination endpoints are selected randomly.", + description = "Load balancer that randomly selects a destination endpoint for each message", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -12833,30 +12960,30 @@ protected boolean setProperty(RandomLoadBalancerDefinition target, String proper types = org.apache.camel.model.RecipientListDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Recipient List", - description = "Route messages to a number of dynamically specified recipients", + description = "Routes a message to a list of dynamically calculated endpoints, determined at runtime from an expression. Each recipient receives a copy of the message.", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "aggregationStrategy", type = "string", description = "Sets the AggregationStrategy to be used to assemble the replies from the recipients, into a single outgoing message from the RecipientList. By default Camel will use the last reply as the outgoing message. You can also use a POJO as the AggregationStrategy", displayName = "Aggregation Strategy"), - @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy", displayName = "Aggregation Strategy Method Allow Null"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise producers/endpoints are stored in memory in the caches. However if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both producers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non frequent used producers.", displayName = "Cache Size"), - @YamlProperty(name = "delimiter", type = "string", defaultValue = ",", description = "Delimiter used if the Expression returned multiple endpoints. Can be turned off using the value false. The default value is ,", displayName = "Delimiter"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "executorService", type = "string", description = "To use a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well.", displayName = "Executor Service"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression that returns which endpoints (url) to send the message to (the recipients). If the expression return an empty value then the message is not sent to any recipients.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreInvalidEndpoints", type = "boolean", defaultValue = "false", description = "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", displayName = "Ignore Invalid Endpoints"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the org.apache.camel.Exchange to be used send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send.", displayName = "On Prepare"), + @YamlProperty(name = "aggregationStrategy", type = "string", description = "Sets the AggregationStrategy to be used to assemble the replies from the recipients, into a single outgoing message.", displayName = "Aggregation Strategy"), + @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicitly declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the ProducerCache which is used to cache and reuse producers when uris are reused. Use 0 for default cache size, or -1 to turn cache off.", displayName = "Cache Size"), + @YamlProperty(name = "delimiter", type = "string", defaultValue = ",", description = "Delimiter used if the Expression returned multiple endpoints. Can be turned off using the value false.", displayName = "Delimiter"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "executorService", type = "string", description = "Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatically implied, and you do not have to enable that option as well.", displayName = "Executor Service"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", 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.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "ignoreInvalidEndpoints", type = "boolean", defaultValue = "false", description = "Whether to ignore an invalid endpoint URI when trying to create a producer with that endpoint.", displayName = "Ignore Invalid Endpoints"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the exchange to be sent. This can be used to deep-clone messages that should be sent, or any custom logic needed before the exchange is sent.", displayName = "On Prepare"), @YamlProperty(name = "parallelAggregate", type = "boolean", deprecated = true, defaultValue = "false", description = "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe.", displayName = "Parallel Aggregate"), - @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then sending messages to the recipients occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the recipients which happens concurrently. When parallel processing is enabled, then the Camel routing engin will continue processing using last used thread from the parallel thread pool. However, if you want to use the original thread that called the recipient list, then make sure to enable the synchronous option as well. In parallel processing mode, you may want to also synchronous = true to force this EIP to process the sub-tasks using the upper bounds of the thread-pool. If using synchronous = false then Camel will allow its reactive routing engine to use as many threads as possible, which may be available due to sub-tasks using other thread-pools such as CompletableFuture.runAsync or others.", displayName = "Parallel Processing"), - @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Recipient List will by default not share unit of work between the parent exchange and each recipient exchange. This means each sub exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), - @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the recipient list will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The default behavior is to not stop but continue processing till the end", displayName = "Stop On Exception"), + @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then sending messages to the recipients occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues.", displayName = "Parallel Processing"), + @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the UnitOfWork with the parent and each of the sub messages. Recipient List will by default not share unit of work between the parent exchange and each recipient exchange. This means each sub exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), + @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "Stops further processing if an exception or failure occurred during processing of an exchange and the caused exception will be thrown.", displayName = "Stop On Exception"), @YamlProperty(name = "streaming", type = "boolean", defaultValue = "false", description = "If enabled then Camel will process replies out-of-order, eg in the order they come back. If disabled, Camel will process replies in the same order as defined by the recipient list.", displayName = "Streaming"), @YamlProperty(name = "synchronous", type = "boolean", defaultValue = "false", description = "Sets whether synchronous processing should be strictly used. When enabled then the same thread is used to continue routing after the recipient list is complete, even if parallel processing is enabled.", displayName = "Synchronous"), - @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Sets a total timeout specified in millis, when using parallel processing. If the Recipient List hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Recipient List breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care.", displayName = "Timeout") + @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Sets a total timeout specified in millis, when using parallel processing. If the Recipient List hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Recipient List breaks out and continues.", displayName = "Timeout") } ) public static class RecipientListDefinitionDeserializer extends YamlDeserializerBase { @@ -12996,34 +13123,34 @@ protected boolean setProperty(RecipientListDefinition target, String propertyKey types = org.apache.camel.model.RedeliveryPolicyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Redelivery Policy", - description = "To configure re-delivery for error handling", + description = "Configures message redelivery for error handling, including maximum retries, delay patterns, and backoff settings", deprecated = false, properties = { @YamlProperty(name = "allowRedeliveryWhileStopping", type = "boolean", defaultValue = "true", description = "Controls whether to allow redelivery while stopping/shutting down a route that uses error handling.", displayName = "Allow Redelivery While Stopping"), @YamlProperty(name = "asyncDelayedRedelivery", type = "boolean", defaultValue = "false", description = "Allow asynchronous delayed redelivery. The route, in particular the consumer's component, must support the Asynchronous Routing Engine (e.g. seda).", displayName = "Async Delayed Redelivery"), - @YamlProperty(name = "backOffMultiplier", type = "number", defaultValue = "2.0", description = "Sets the back off multiplier", displayName = "Back Off Multiplier"), - @YamlProperty(name = "collisionAvoidanceFactor", type = "number", defaultValue = "0.15", description = "Sets the collision avoidance factor", displayName = "Collision Avoidance Factor"), - @YamlProperty(name = "delayPattern", type = "string", description = "Sets the delay pattern with delay intervals.", displayName = "Delay Pattern"), - @YamlProperty(name = "disableRedelivery", type = "boolean", defaultValue = "false", description = "Disables redelivery (same as setting maximum redeliveries to 0)", displayName = "Disable Redelivery"), + @YamlProperty(name = "backOffMultiplier", type = "number", defaultValue = "2.0", description = "Sets the multiplier applied to the previous redelivery delay to compute the next delay when using exponential backoff.", displayName = "Back Off Multiplier"), + @YamlProperty(name = "collisionAvoidanceFactor", type = "number", defaultValue = "0.15", description = "Sets the collision avoidance factor, which adds a random percentage of the delay to avoid thundering herd problems when multiple redeliveries happen simultaneously.", displayName = "Collision Avoidance Factor"), + @YamlProperty(name = "delayPattern", type = "string", description = "Sets the delay pattern for redeliveries using a pattern such as '0:1000;5:5000;10:30000' where each entry maps a redelivery count to a delay in milliseconds (e.g. redeliveries 0-4 use 1s delay, 5-9 use 5s, 10 use 30s).", displayName = "Delay Pattern"), + @YamlProperty(name = "disableRedelivery", type = "boolean", defaultValue = "false", description = "Disables redelivery (same as setting maximum redeliveries to 0).", displayName = "Disable Redelivery"), @YamlProperty(name = "exchangeFormatterRef", type = "string", description = "Sets the reference of the instance of org.apache.camel.spi.ExchangeFormatter to generate the log message from exchange.", displayName = "Exchange Formatter Ref"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "logContinued", type = "boolean", defaultValue = "false", description = "Sets whether continued exceptions should be logged or not. Can be used to include or reduce verbose.", displayName = "Log Continued"), - @YamlProperty(name = "logExhausted", type = "boolean", defaultValue = "true", description = "Sets whether exhausted exceptions should be logged or not. Can be used to include or reduce verbose.", displayName = "Log Exhausted"), - @YamlProperty(name = "logExhaustedMessageBody", type = "boolean", defaultValue = "false", description = "Sets whether exhausted message body should be logged including message history or not (supports property placeholders). Can be used to include or reduce verbose. Requires logExhaustedMessageHistory to be enabled.", displayName = "Log Exhausted Message Body"), - @YamlProperty(name = "logExhaustedMessageHistory", type = "boolean", defaultValue = "false", description = "Sets whether exhausted exceptions should be logged including message history or not (supports property placeholders). Can be used to include or reduce verbose.", displayName = "Log Exhausted Message History"), - @YamlProperty(name = "logHandled", type = "boolean", defaultValue = "false", description = "Sets whether handled exceptions should be logged or not. Can be used to include or reduce verbose.", displayName = "Log Handled"), - @YamlProperty(name = "logNewException", type = "boolean", defaultValue = "true", description = "Sets whether new exceptions should be logged or not. Can be used to include or reduce verbose. A new exception is an exception that was thrown while handling a previous exception.", displayName = "Log New Exception"), - @YamlProperty(name = "logRetryAttempted", type = "boolean", defaultValue = "true", description = "Sets whether retry attempts should be logged or not. Can be used to include or reduce verbose.", displayName = "Log Retry Attempted"), - @YamlProperty(name = "logRetryStackTrace", type = "boolean", defaultValue = "false", description = "Sets whether stack traces should be logged when an retry attempt failed. Can be used to include or reduce verbose.", displayName = "Log Retry Stack Trace"), - @YamlProperty(name = "logStackTrace", type = "boolean", defaultValue = "true", description = "Sets whether stack traces should be logged. Can be used to include or reduce verbose.", displayName = "Log Stack Trace"), - @YamlProperty(name = "maximumRedeliveries", type = "number", description = "Sets the maximum redeliveries x = redeliver at most x times 0 = no redeliveries -1 = redeliver forever", displayName = "Maximum Redeliveries"), - @YamlProperty(name = "maximumRedeliveryDelay", type = "string", defaultValue = "60000", description = "Sets the maximum delay between redelivery", displayName = "Maximum Redelivery Delay"), - @YamlProperty(name = "redeliveryDelay", type = "string", defaultValue = "1000", description = "Sets the initial redelivery delay", displayName = "Redelivery Delay"), - @YamlProperty(name = "retriesExhaustedLogLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "Sets the logging level to use when retries have been exhausted", displayName = "Retries Exhausted Log Level"), - @YamlProperty(name = "retryAttemptedLogInterval", type = "number", defaultValue = "1", description = "Sets the interval to use for logging retry attempts", displayName = "Retry Attempted Log Interval"), - @YamlProperty(name = "retryAttemptedLogLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "DEBUG", description = "Sets the logging level to use for logging retry attempts", displayName = "Retry Attempted Log Level"), - @YamlProperty(name = "useCollisionAvoidance", type = "boolean", defaultValue = "false", description = "Turn on collision avoidance.", displayName = "Use Collision Avoidance"), - @YamlProperty(name = "useExponentialBackOff", type = "boolean", defaultValue = "false", description = "Turn on exponential back off", displayName = "Use Exponential Back Off") + @YamlProperty(name = "logContinued", type = "boolean", defaultValue = "false", description = "Whether continued exceptions should be logged or not. Can be used to include or reduce verbose logging.", displayName = "Log Continued"), + @YamlProperty(name = "logExhausted", type = "boolean", defaultValue = "true", description = "Whether exhausted exceptions should be logged or not. Can be used to include or reduce verbose logging.", displayName = "Log Exhausted"), + @YamlProperty(name = "logExhaustedMessageBody", type = "boolean", defaultValue = "false", description = "Whether exhausted message body should be logged including message history. Requires logExhaustedMessageHistory to be enabled.", displayName = "Log Exhausted Message Body"), + @YamlProperty(name = "logExhaustedMessageHistory", type = "boolean", defaultValue = "false", description = "Whether exhausted exceptions should be logged including message history. Can be used to include or reduce verbose logging.", displayName = "Log Exhausted Message History"), + @YamlProperty(name = "logHandled", type = "boolean", defaultValue = "false", description = "Whether handled exceptions should be logged or not. Can be used to include or reduce verbose logging.", displayName = "Log Handled"), + @YamlProperty(name = "logNewException", type = "boolean", defaultValue = "true", description = "Whether new exceptions should be logged or not. A new exception is an exception that was thrown while handling a previous exception.", displayName = "Log New Exception"), + @YamlProperty(name = "logRetryAttempted", type = "boolean", defaultValue = "true", description = "Whether retry attempts should be logged or not. Can be used to include or reduce verbose logging.", displayName = "Log Retry Attempted"), + @YamlProperty(name = "logRetryStackTrace", type = "boolean", defaultValue = "false", description = "Whether stack traces should be logged when a retry attempt failed. Can be used to include or reduce verbose logging.", displayName = "Log Retry Stack Trace"), + @YamlProperty(name = "logStackTrace", type = "boolean", defaultValue = "true", description = "Whether stack traces should be logged. Can be used to include or reduce verbose logging.", displayName = "Log Stack Trace"), + @YamlProperty(name = "maximumRedeliveries", type = "number", description = "Sets the maximum number of redeliveries. Use 0 for no redeliveries, or -1 to redeliver forever.", displayName = "Maximum Redeliveries"), + @YamlProperty(name = "maximumRedeliveryDelay", type = "string", defaultValue = "60000", description = "Sets the upper bound on redelivery delay in milliseconds when using exponential backoff, to prevent delays from growing unbounded.", displayName = "Maximum Redelivery Delay"), + @YamlProperty(name = "redeliveryDelay", type = "string", defaultValue = "1000", description = "Sets the initial delay in milliseconds before the first redelivery attempt.", displayName = "Redelivery Delay"), + @YamlProperty(name = "retriesExhaustedLogLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "Sets the logging level to use when all retries have been exhausted and the message is moved to the dead letter channel or failed.", displayName = "Retries Exhausted Log Level"), + @YamlProperty(name = "retryAttemptedLogInterval", type = "number", defaultValue = "1", description = "Sets how often to log redelivery attempts. For example, a value of 3 logs every 3rd redelivery attempt.", displayName = "Retry Attempted Log Interval"), + @YamlProperty(name = "retryAttemptedLogLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "DEBUG", description = "Sets the logging level to use when a redelivery attempt is made.", displayName = "Retry Attempted Log Level"), + @YamlProperty(name = "useCollisionAvoidance", type = "boolean", defaultValue = "false", description = "Enables collision avoidance, which adds a random factor to redelivery delays to prevent multiple simultaneous redeliveries from colliding.", displayName = "Use Collision Avoidance"), + @YamlProperty(name = "useExponentialBackOff", type = "boolean", defaultValue = "false", description = "Enables exponential backoff, so each subsequent redelivery delay is multiplied by the backOffMultiplier.", displayName = "Use Exponential Back Off") } ) public static class RedeliveryPolicyDefinitionDeserializer extends YamlDeserializerBase { @@ -13180,11 +13307,11 @@ protected boolean setProperty(RedeliveryPolicyDefinition target, String property types = org.apache.camel.model.errorhandler.RefErrorHandlerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Ref Error Handler", - description = "References to an existing or custom error handler.", + description = "References a custom error handler bean from the registry by its name", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ref", type = "string", required = true, description = "References to an existing or custom error handler.", displayName = "Ref") + @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to an existing or custom error handler to lookup from the registry.", displayName = "Ref") } ) public static class RefErrorHandlerDefinitionDeserializer extends YamlDeserializerBase { @@ -13231,13 +13358,13 @@ protected boolean setProperty(RefErrorHandlerDefinition target, String propertyK types = org.apache.camel.model.language.RefExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Ref", - description = "Uses an existing expression from the registry.", + description = "Uses an existing expression from the registry", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class RefExpressionDeserializer extends YamlDeserializerBase { @@ -13303,14 +13430,14 @@ protected boolean setProperty(RefExpression target, String propertyKey, String p types = org.apache.camel.model.RemoveHeaderDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Remove Header", - description = "Removes a named header from the message", + description = "Removes a specific header from the message by name", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of header to remove", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of header to remove.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class RemoveHeaderDefinitionDeserializer extends YamlDeserializerBase { @@ -13372,15 +13499,15 @@ protected boolean setProperty(RemoveHeaderDefinition target, String propertyKey, types = org.apache.camel.model.RemoveHeadersDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Remove Headers", - description = "Removes message headers whose name matches a specified pattern", + description = "Removes all message headers whose names match a given pattern. Useful for stripping internal Camel headers before sending to external systems.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "excludePattern", type = "string", description = "Name or patter of headers to not remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", displayName = "Exclude Pattern"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "pattern", type = "string", required = true, description = "Name or pattern of headers to remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", displayName = "Pattern") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "excludePattern", type = "string", description = "Name or pattern of headers to not remove. You can use comma to separate multiple patterns.", displayName = "Exclude Pattern"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "pattern", type = "string", required = true, description = "Name or pattern of headers to remove. The pattern supports exact match, wildcard (pattern ends with ), and regular expression (all case-insensitive).", displayName = "Pattern") } ) public static class RemoveHeadersDefinitionDeserializer extends YamlDeserializerBase { @@ -13447,15 +13574,15 @@ protected boolean setProperty(RemoveHeadersDefinition target, String propertyKey types = org.apache.camel.model.RemovePropertiesDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Remove Properties", - description = "Removes message exchange properties whose name matches a specified pattern", + description = "Removes all exchange properties whose names match a given pattern", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "excludePattern", type = "string", description = "Name or pattern of properties to not remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", displayName = "Exclude Pattern"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "pattern", type = "string", required = true, description = "Name or pattern of properties to remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", displayName = "Pattern") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "excludePattern", type = "string", description = "Name or pattern of properties to not remove. You can use comma to separate multiple patterns.", displayName = "Exclude Pattern"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "pattern", type = "string", required = true, description = "Name or pattern of properties to remove. Supports exact match, wildcard (ending with ), and regular expression (all case-insensitive).", displayName = "Pattern") } ) public static class RemovePropertiesDefinitionDeserializer extends YamlDeserializerBase { @@ -13522,14 +13649,14 @@ protected boolean setProperty(RemovePropertiesDefinition target, String property types = org.apache.camel.model.RemovePropertyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Remove Property", - description = "Removes a named property from the message exchange", + description = "Removes a specific exchange property by name", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of property to remove.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of the exchange property to remove.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class RemovePropertyDefinitionDeserializer extends YamlDeserializerBase { @@ -13591,14 +13718,14 @@ protected boolean setProperty(RemovePropertyDefinition target, String propertyKe types = org.apache.camel.model.RemoveVariableDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Remove Variable", - description = "Removes a named variable", + description = "Removes a specific variable by name", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of variable to remove.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of the variable to remove.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class RemoveVariableDefinitionDeserializer extends YamlDeserializerBase { @@ -13659,16 +13786,16 @@ protected boolean setProperty(RemoveVariableDefinition target, String propertyKe types = org.apache.camel.model.ResequenceDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Resequence", - description = "Resequences (re-order) messages based on an expression", + description = "Reorders messages based on a sequence expression, either in batch mode (collect and sort) or stream mode (continuous reordering with a timeout)", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), @YamlProperty(name = "batchConfig", type = "object:org.apache.camel.model.config.BatchResequencerConfig", oneOf = "resequencerConfig"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to use for re-ordering the messages, such as a header with a sequence number", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to use for re-ordering the messages, such as a header with a sequence number.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), @YamlProperty(name = "streamConfig", type = "object:org.apache.camel.model.config.StreamResequencerConfig", oneOf = "resequencerConfig") } @@ -13754,33 +13881,33 @@ protected boolean setProperty(ResequenceDefinition target, String propertyKey, types = org.apache.camel.model.Resilience4jConfigurationDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Resilience4j Configuration", - description = "Resilience4j Circuit Breaker EIP configuration", + description = "Configures Resilience4j settings for the Circuit Breaker EIP, such as failure rate threshold, wait duration, and sliding window parameters", deprecated = false, properties = { @YamlProperty(name = "automaticTransitionFromOpenToHalfOpenEnabled", type = "boolean", defaultValue = "false", description = "Enables automatic transition from OPEN to HALF_OPEN state once the waitDurationInOpenState has passed.", displayName = "Automatic Transition From Open To Half Open Enabled"), - @YamlProperty(name = "bulkheadEnabled", type = "boolean", defaultValue = "false", description = "Whether bulkhead is enabled or not on the circuit breaker. Default is false.", displayName = "Bulkhead Enabled"), + @YamlProperty(name = "bulkheadEnabled", type = "boolean", defaultValue = "false", description = "Whether bulkhead is enabled or not on the circuit breaker.", displayName = "Bulkhead Enabled"), @YamlProperty(name = "bulkheadMaxConcurrentCalls", type = "number", defaultValue = "25", description = "Configures the max amount of concurrent calls the bulkhead will support.", displayName = "Bulkhead Max Concurrent Calls"), - @YamlProperty(name = "bulkheadMaxWaitDuration", type = "number", defaultValue = "0", description = "Configures a maximum amount of time which the calling thread will wait to enter the bulkhead. If bulkhead has space available, entry is guaranteed and immediate. If bulkhead is full, calling threads will contest for space, if it becomes available. maxWaitDuration can be set to 0. Note: for threads running on an event-loop or equivalent (rx computation pool, etc), setting maxWaitDuration to 0 is highly recommended. Blocking an event-loop thread will most likely have a negative effect on application throughput.", displayName = "Bulkhead Max Wait Duration"), + @YamlProperty(name = "bulkheadMaxWaitDuration", type = "number", defaultValue = "0", description = "Configures a maximum amount of time which the calling thread will wait to enter the bulkhead.", displayName = "Bulkhead Max Wait Duration"), @YamlProperty(name = "circuitBreaker", type = "string", description = "Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreaker instance to lookup and use from the registry. When using this, then any other circuit breaker options are not in use.", displayName = "Circuit Breaker"), @YamlProperty(name = "config", type = "string", description = "Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreakerConfig instance to lookup and use from the registry.", displayName = "Config"), - @YamlProperty(name = "failureRateThreshold", type = "number", defaultValue = "50", description = "Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 50 percentage.", displayName = "Failure Rate Threshold"), + @YamlProperty(name = "failureRateThreshold", type = "number", defaultValue = "50", description = "Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls.", displayName = "Failure Rate Threshold"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreException", type = "array:string", description = "Configure a list of exceptions that are ignored and neither count as a failure nor success. Any exception matching or inheriting from one of the list will not count as a failure nor success, even if the exceptions is part of recordExceptions.", displayName = "Ignore Exception"), + @YamlProperty(name = "ignoreException", type = "array:string", description = "Configure a list of exceptions that are ignored and neither count as a failure nor success. Any exception matching or inheriting from one of the list will not count as a failure nor success, even if the exception is part of recordExceptions.", displayName = "Ignore Exception"), @YamlProperty(name = "micrometerEnabled", type = "boolean", defaultValue = "false", description = "Whether to enable collecting statistics using Micrometer. This requires adding camel-resilience4j-micrometer JAR to the classpath.", displayName = "Micrometer Enabled"), - @YamlProperty(name = "minimumNumberOfCalls", type = "number", defaultValue = "100", description = "Configures the minimum number of calls which are required (per sliding window period) before the CircuitBreaker can calculate the error rate. For example, if minimumNumberOfCalls is 10, then at least 10 calls must be recorded, before the failure rate can be calculated. If only 9 calls have been recorded the CircuitBreaker will not transition to open even if all 9 calls have failed. Default minimumNumberOfCalls is 100", displayName = "Minimum Number Of Calls"), - @YamlProperty(name = "permittedNumberOfCallsInHalfOpenState", type = "number", defaultValue = "10", description = "Configures the number of permitted calls when the CircuitBreaker is half open. The size must be greater than 0. Default size is 10.", displayName = "Permitted Number Of Calls In Half Open State"), + @YamlProperty(name = "minimumNumberOfCalls", type = "number", defaultValue = "100", description = "Configures the minimum number of calls which are required (per sliding window period) before the CircuitBreaker can calculate the error rate.", displayName = "Minimum Number Of Calls"), + @YamlProperty(name = "permittedNumberOfCallsInHalfOpenState", type = "number", defaultValue = "10", description = "Configures the number of permitted calls when the CircuitBreaker is half open.", displayName = "Permitted Number Of Calls In Half Open State"), @YamlProperty(name = "recordException", type = "array:string", description = "Configure a list of exceptions that are recorded as a failure and thus increase the failure rate. Any exception matching or inheriting from one of the list counts as a failure, unless explicitly ignored via ignoreExceptions.", displayName = "Record Exception"), - @YamlProperty(name = "slidingWindowSize", type = "number", defaultValue = "100", description = "Configures the size of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. slidingWindowSize configures the size of the sliding window. Sliding window can either be count-based or time-based. If slidingWindowType is COUNT_BASED, the last slidingWindowSize calls are recorded and aggregated. If slidingWindowType is TIME_BASED, the calls of the last slidingWindowSize seconds are recorded and aggregated. The slidingWindowSize must be greater than 0. The minimumNumberOfCalls must be greater than 0. If the slidingWindowType is COUNT_BASED, the minimumNumberOfCalls cannot be greater than slidingWindowSize . If the slidingWindowType is TIME_BASED, you can pick whatever you want. Default slidingWindowSize is 100.", displayName = "Sliding Window Size"), - @YamlProperty(name = "slidingWindowType", type = "enum:TIME_BASED,COUNT_BASED", defaultValue = "COUNT_BASED", description = "Configures the type of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. Sliding window can either be count-based or time-based. If slidingWindowType is COUNT_BASED, the last slidingWindowSize calls are recorded and aggregated. If slidingWindowType is TIME_BASED, the calls of the last slidingWindowSize seconds are recorded and aggregated. Default slidingWindowType is COUNT_BASED.", displayName = "Sliding Window Type"), - @YamlProperty(name = "slowCallDurationThreshold", type = "number", defaultValue = "60", description = "Configures the duration threshold (seconds) above which calls are considered as slow and increase the slow calls percentage. Default value is 60 seconds.", displayName = "Slow Call Duration Threshold"), - @YamlProperty(name = "slowCallRateThreshold", type = "number", defaultValue = "100", description = "Configures a threshold in percentage. The CircuitBreaker considers a call as slow when the call duration is greater than slowCallDurationThreshold Duration. When the percentage of slow calls is equal or greater the threshold, the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 100 percentage which means that all recorded calls must be slower than slowCallDurationThreshold.", displayName = "Slow Call Rate Threshold"), - @YamlProperty(name = "throwExceptionWhenHalfOpenOrOpenState", type = "boolean", defaultValue = "false", description = "Whether to throw io.github.resilience4j.circuitbreaker.CallNotPermittedException when the call is rejected due circuit breaker is half open (and was not attempted but rejected immediately) or open (always rejected). This option is only in use when there is NOT a fallback configured on the circuit breaker. When there is a fallback then the fallback is always executed and CallNotPermittedException is not thrown.", displayName = "Throw Exception When Half Open Or Open State"), + @YamlProperty(name = "slidingWindowSize", type = "number", defaultValue = "100", description = "Configures the size of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. Sliding window can either be count-based or time-based.", displayName = "Sliding Window Size"), + @YamlProperty(name = "slidingWindowType", type = "enum:TIME_BASED,COUNT_BASED", defaultValue = "COUNT_BASED", description = "Configures the type of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. Sliding window can either be count-based or time-based.", displayName = "Sliding Window Type"), + @YamlProperty(name = "slowCallDurationThreshold", type = "number", defaultValue = "60", description = "Configures the duration threshold (seconds) above which calls are considered as slow and increase the slow calls percentage.", displayName = "Slow Call Duration Threshold"), + @YamlProperty(name = "slowCallRateThreshold", type = "number", defaultValue = "100", description = "Configures a threshold in percentage. The CircuitBreaker considers a call as slow when the call duration is greater than slowCallDurationThreshold. When the percentage of slow calls is equal or greater the threshold, the CircuitBreaker transitions to open and starts short-circuiting calls.", displayName = "Slow Call Rate Threshold"), + @YamlProperty(name = "throwExceptionWhenHalfOpenOrOpenState", type = "boolean", defaultValue = "false", description = "Whether to throw io.github.resilience4j.circuitbreaker.CallNotPermittedException when the call is rejected because the circuit breaker is half open or open.", displayName = "Throw Exception When Half Open Or Open State"), @YamlProperty(name = "timeoutCancelRunningFuture", type = "boolean", defaultValue = "true", description = "Configures whether cancel is called on the running future. Defaults to true.", displayName = "Timeout Cancel Running Future"), @YamlProperty(name = "timeoutDuration", type = "number", defaultValue = "1000", description = "Configures the thread execution timeout. Default value is 1 second.", displayName = "Timeout Duration"), - @YamlProperty(name = "timeoutEnabled", type = "boolean", defaultValue = "false", description = "Whether timeout is enabled or not on the circuit breaker. Default is false.", displayName = "Timeout Enabled"), - @YamlProperty(name = "timeoutExecutorService", type = "string", description = "References to a custom thread pool to use when timeout is enabled (uses ForkJoinPool#commonPool() by default)", displayName = "Timeout Executor Service"), - @YamlProperty(name = "waitDurationInOpenState", type = "number", defaultValue = "60", description = "Configures the wait duration (in seconds) which specifies how long the CircuitBreaker should stay open, before it switches to half open. Default value is 60 seconds.", displayName = "Wait Duration In Open State"), - @YamlProperty(name = "writableStackTraceEnabled", type = "boolean", defaultValue = "true", description = "Enables writable stack traces. When set to false, Exception.getStackTrace returns a zero length array. This may be used to reduce log spam when the circuit breaker is open as the cause of the exceptions is already known (the circuit breaker is short-circuiting calls).", displayName = "Writable Stack Trace Enabled") + @YamlProperty(name = "timeoutEnabled", type = "boolean", defaultValue = "false", description = "Whether timeout is enabled or not on the circuit breaker.", displayName = "Timeout Enabled"), + @YamlProperty(name = "timeoutExecutorService", type = "string", description = "References to a custom thread pool to use when timeout is enabled (uses ForkJoinPool.commonPool() by default).", displayName = "Timeout Executor Service"), + @YamlProperty(name = "waitDurationInOpenState", type = "number", defaultValue = "60", description = "Configures the wait duration (in seconds) which specifies how long the CircuitBreaker should stay open, before it switches to half open.", displayName = "Wait Duration In Open State"), + @YamlProperty(name = "writableStackTraceEnabled", type = "boolean", defaultValue = "true", description = "Enables writable stack traces. When set to false, Exception.getStackTrace returns a zero length array. This may be used to reduce log spam when the circuit breaker is open.", displayName = "Writable Stack Trace Enabled") } ) public static class Resilience4jConfigurationDefinitionDeserializer extends YamlDeserializerBase { @@ -13931,17 +14058,17 @@ protected boolean setProperty(Resilience4jConfigurationDefinition target, types = org.apache.camel.model.rest.ResponseHeaderDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Response Header", - description = "To specify the rest operation response headers.", + description = "Defines a response header for a REST operation, used for API documentation and OpenAPI spec generation", deprecated = false, properties = { - @YamlProperty(name = "allowableValues", type = "array:org.apache.camel.model.ValueDefinition", description = "Sets the parameter list of allowable values.", displayName = "Allowable Values"), + @YamlProperty(name = "allowableValues", type = "array:org.apache.camel.model.ValueDefinition", description = "List of allowable values for the header (enum).", displayName = "Allowable Values"), @YamlProperty(name = "arrayType", type = "string", defaultValue = "string", description = "Sets the parameter array type. Required if data type is array. Describes the type of items in the array.", displayName = "Array Type"), @YamlProperty(name = "collectionFormat", type = "enum:csv,multi,pipes,ssv,tsv", defaultValue = "csv", description = "Sets the parameter collection format.", displayName = "Collection Format"), - @YamlProperty(name = "dataFormat", type = "string", description = "Sets the parameter data format.", displayName = "Data Format"), - @YamlProperty(name = "dataType", type = "string", defaultValue = "string", description = "Sets the header data type.", displayName = "Data Type"), - @YamlProperty(name = "description", type = "string", description = "Description of the parameter.", displayName = "Description"), - @YamlProperty(name = "example", type = "string", description = "Sets the example", displayName = "Example"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of the parameter. This option is mandatory.", displayName = "Name") + @YamlProperty(name = "dataFormat", type = "string", description = "The data format of the header such as binary, date, date-time, or password.", displayName = "Data Format"), + @YamlProperty(name = "dataType", type = "string", defaultValue = "string", description = "Sets the header data type such as string, integer, or boolean.", displayName = "Data Type"), + @YamlProperty(name = "description", type = "string", description = "Description of the response header.", displayName = "Description"), + @YamlProperty(name = "example", type = "string", description = "An example value of this response header.", displayName = "Example"), + @YamlProperty(name = "name", type = "string", required = true, description = "Name of the response header.", displayName = "Name") } ) public static class ResponseHeaderDefinitionDeserializer extends YamlDeserializerBase { @@ -14011,15 +14138,15 @@ protected boolean setProperty(ResponseHeaderDefinition target, String propertyKe types = org.apache.camel.model.rest.ResponseMessageDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Response Message", - description = "To specify the rest operation response messages.", + description = "Defines a response message for a REST operation, including HTTP status code and description for API documentation", deprecated = false, properties = { - @YamlProperty(name = "code", type = "string", defaultValue = "200", description = "The response code such as a HTTP status code", displayName = "Code"), - @YamlProperty(name = "contentType", type = "string", description = "The response content-type such as application/json.", displayName = "Content Type"), - @YamlProperty(name = "examples", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Examples of response messages", displayName = "Examples"), - @YamlProperty(name = "header", type = "array:org.apache.camel.model.rest.ResponseHeaderDefinition", description = "Adds a response header", displayName = "Header"), - @YamlProperty(name = "message", type = "string", required = true, description = "The response message (description)", displayName = "Message"), - @YamlProperty(name = "responseModel", type = "string", description = "The response model", displayName = "Response Model") + @YamlProperty(name = "code", type = "string", defaultValue = "200", description = "The response code such as a HTTP status code.", displayName = "Code"), + @YamlProperty(name = "contentType", type = "string", description = "The response content type such as application/json.", displayName = "Content Type"), + @YamlProperty(name = "examples", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Examples of response messages.", displayName = "Examples"), + @YamlProperty(name = "header", type = "array:org.apache.camel.model.rest.ResponseHeaderDefinition", description = "The response headers.", displayName = "Header"), + @YamlProperty(name = "message", type = "string", required = true, description = "The response message (description).", displayName = "Message"), + @YamlProperty(name = "responseModel", type = "string", description = "The response model (class name).", displayName = "Response Model") } ) public static class ResponseMessageDefinitionDeserializer extends YamlDeserializerBase { @@ -14080,23 +14207,23 @@ protected boolean setProperty(ResponseMessageDefinition target, String propertyK types = org.apache.camel.model.rest.RestBindingDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest Binding", - description = "To configure rest binding", + description = "Configures data binding for a REST service, controlling how request and response bodies are marshalled and unmarshalled", deprecated = false, properties = { - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. The default value is off", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), - @YamlProperty(name = "component", type = "string", description = "Sets the component name that this definition will apply to", displayName = "Component"), - @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json", displayName = "Consumes"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. The default value is false.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Out Type"), - @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json", displayName = "Produces"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML.", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), + @YamlProperty(name = "component", type = "string", description = "Sets the component name that this definition will apply to.", displayName = "Component"), + @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service accepts (consumes) as input, such as application/xml or application/json.", displayName = "Consumes"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "outType", type = "string", description = "Sets the class name to use for binding from POJO to output for the outgoing data.", displayName = "Out Type"), + @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json.", displayName = "Produces"), @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do.", displayName = "Skip Binding On Error Code"), - @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", displayName = "Type") + @YamlProperty(name = "type", type = "string", description = "Sets the class name to use for binding from input to POJO for the incoming data.", displayName = "Type") } ) public static class RestBindingDefinitionDeserializer extends YamlDeserializerBase { @@ -14198,40 +14325,40 @@ protected boolean setProperty(RestBindingDefinition target, String propertyKey, types = org.apache.camel.model.rest.RestConfigurationDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest Configuration", - description = "To configure rest", + description = "Configures global settings for the REST DSL, such as host, port, context path, binding mode, and the underlying HTTP component to use", deprecated = false, properties = { - @YamlProperty(name = "apiComponent", type = "enum:openapi,swagger", description = "The name of the Camel component to use as the REST API. If no API Component has been explicit configured, then Camel will lookup if there is a Camel component responsible for servicing and generating the REST API documentation, or if a org.apache.camel.spi.RestApiProcessorFactory is registered in the registry. If either one is found, then that is being used.", displayName = "Api Component"), - @YamlProperty(name = "apiContextPath", type = "string", description = "Sets a leading context-path the REST API will be using. This can be used when using components such as camel-servlet where the deployed web application is deployed using a context-path.", displayName = "Api Context Path"), + @YamlProperty(name = "apiComponent", type = "enum:openapi,swagger", description = "The name of the Camel component to use as the REST API (such as OpenApi).", displayName = "Api Component"), + @YamlProperty(name = "apiContextPath", type = "string", description = "Sets a leading context-path the REST API will be using.", displayName = "Api Context Path"), @YamlProperty(name = "apiContextRouteId", type = "string", description = "Sets the route id to use for the route that services the REST API. The route will by default use an auto assigned route id.", displayName = "Api Context Route Id"), - @YamlProperty(name = "apiHost", type = "string", description = "To use a specific hostname for the API documentation (such as swagger or openapi) This can be used to override the generated host with this configured hostname", displayName = "Api Host"), - @YamlProperty(name = "apiProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the api documentation. For example set property api.title to my cool stuff", displayName = "Api Property"), - @YamlProperty(name = "apiVendorExtension", type = "boolean", defaultValue = "false", description = "Whether vendor extension is enabled in the Rest APIs. If enabled then Camel will include additional information as vendor extension (eg keys starting with x-) such as route ids, class names etc. Not all 3rd party API gateways and tools supports vendor-extensions when importing your API docs.", displayName = "Api Vendor Extension"), - @YamlProperty(name = "bindingMode", type = "enum:auto,json,json_xml,off,xml", defaultValue = "off", description = "Sets the binding mode to use. The default value is off", displayName = "Binding Mode"), + @YamlProperty(name = "apiHost", type = "string", description = "To use a specific hostname for the API documentation (such as swagger or openapi). This can be used to override the generated host with this configured hostname.", displayName = "Api Host"), + @YamlProperty(name = "apiProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the api documentation.", displayName = "Api Property"), + @YamlProperty(name = "apiVendorExtension", type = "boolean", defaultValue = "false", description = "Whether vendor extension is enabled in the Rest APIs. If enabled then Camel will include additional information as vendor extension (eg keys starting with x-) such as route ids, class names etc.", displayName = "Api Vendor Extension"), + @YamlProperty(name = "bindingMode", type = "enum:auto,json,json_xml,off,xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML.", displayName = "Binding Mode"), @YamlProperty(name = "bindingPackageScan", type = "string", description = "Package name to use as base (offset) for classpath scanning of POJO classes are located when using binding mode is enabled for JSon or XML. Multiple package names can be separated by comma.", displayName = "Binding Package Scan"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), - @YamlProperty(name = "component", type = "enum:platform-http,servlet,jetty,undertow,netty-http,coap", description = "The Camel Rest component to use for the REST transport (consumer), such as netty-http, jetty, servlet, undertow. If no component has been explicit configured, then Camel will lookup if there is a Camel component that integrates with the Rest DSL, or if a org.apache.camel.spi.RestConsumerFactory is registered in the registry. If either one is found, then that is being used.", displayName = "Component"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), + @YamlProperty(name = "component", type = "enum:platform-http,servlet,jetty,undertow,netty-http,coap", description = "The Camel Rest component to use for the REST transport (consumer), such as netty-http, jetty, servlet, undertow.", displayName = "Component"), @YamlProperty(name = "componentProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the rest component in use.", displayName = "Component Property"), @YamlProperty(name = "consumerProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the rest consumer in use.", displayName = "Consumer Property"), - @YamlProperty(name = "contextPath", type = "string", description = "Sets a leading context-path the REST services will be using. This can be used when using components such as camel-servlet where the deployed web application is deployed using a context-path. Or for components such as camel-jetty or camel-netty-http that includes a HTTP server.", displayName = "Context Path"), + @YamlProperty(name = "contextPath", type = "string", description = "Sets a leading context-path the REST services will be using. This can be used when using components such as camel-servlet where the deployed web application is deployed using a context-path.", displayName = "Context Path"), @YamlProperty(name = "corsHeaders", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure custom CORS headers.", displayName = "Cors Headers"), - @YamlProperty(name = "dataFormatProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the data formats in use. For example set property prettyPrint to true to have json outputted in pretty mode. The properties can be prefixed to denote the option is only for either JSON or XML and for either the IN or the OUT. The prefixes are: json.in. json.out. xml.in. xml.out. For example a key with value xml.out.mustBeJAXBElement is only for the XML data format for the outgoing. A key without a prefix is a common key for all situations.", displayName = "Data Format Property"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. The default value is false.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), + @YamlProperty(name = "dataFormatProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the data formats in use. For example set property prettyPrint to true to have json outputted in pretty mode.", displayName = "Data Format Property"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), @YamlProperty(name = "endpointProperty", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure as many additional properties for the rest endpoint in use.", displayName = "Endpoint Property"), @YamlProperty(name = "host", type = "string", description = "The hostname to use for exposing the REST service.", displayName = "Host"), @YamlProperty(name = "hostNameResolver", type = "enum:allLocalIp,localHostName,localIp,none", defaultValue = "allLocalIp", description = "If no hostname has been explicit configured, then this resolver is used to compute the hostname the REST service will be using.", displayName = "Host Name Resolver"), - @YamlProperty(name = "inlineRoutes", type = "boolean", defaultValue = "true", description = "Inline routes in rest-dsl which are linked using direct endpoints. Each service in Rest DSL is an individual route, meaning that you would have at least two routes per service (rest-dsl, and the route linked from rest-dsl). By inlining (default) allows Camel to optimize and inline this as a single route, however this requires to use direct endpoints, which must be unique per service. If a route is not using direct endpoint then the rest-dsl is not inlined, and will become an individual route. This option is default true.", displayName = "Inline Routes"), - @YamlProperty(name = "jsonDataFormat", type = "enum:jackson,jsonb,fastjson,gson", defaultValue = "jackson", description = "Name of specific json data format to use. By default, jackson will be used. Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance.", displayName = "Json Data Format"), - @YamlProperty(name = "port", type = "string", description = "The port number to use for exposing the REST service. Notice if you use servlet component then the port number configured here does not apply, as the port number in use is the actual port number the servlet component is using. eg if using Apache Tomcat its the tomcat http port, if using Apache Karaf its the HTTP service in Karaf that uses port 8181 by default etc. Though in those situations setting the port number here, allows tooling and JMX to know the port number, so its recommended to set the port number to the number that the servlet engine uses.", displayName = "Port"), - @YamlProperty(name = "producerApiDoc", type = "string", description = "Sets the location of the api document the REST producer will use to validate the REST uri and query parameters are valid accordingly to the api document. The location of the api document is loaded from classpath by default, but you can use file: or http: to refer to resources to load from file or http url.", displayName = "Producer Api Doc"), - @YamlProperty(name = "producerComponent", type = "enum:vertx-http,http,undertow,netty-http", description = "Sets the name of the Camel component to use as the REST producer", displayName = "Producer Component"), - @YamlProperty(name = "scheme", type = "string", description = "The scheme to use for exposing the REST service. Usually http or https is supported. The default value is http", displayName = "Scheme"), + @YamlProperty(name = "inlineRoutes", type = "boolean", defaultValue = "true", description = "Inline routes in rest-dsl which are linked using direct endpoints. By inlining, Camel can optimize and inline this as a single route, however this requires to use direct endpoints, which must be unique per service.", displayName = "Inline Routes"), + @YamlProperty(name = "jsonDataFormat", type = "enum:jackson,jsonb,fastjson,gson", defaultValue = "jackson", description = "Name of specific json data format to use. By default jackson will be used. Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance.", displayName = "Json Data Format"), + @YamlProperty(name = "port", type = "string", description = "The port number to use for exposing the REST service.", displayName = "Port"), + @YamlProperty(name = "producerApiDoc", type = "string", description = "Sets the location of the api document the REST producer will use to validate the REST uri and query parameters are valid accordingly to the api document.", displayName = "Producer Api Doc"), + @YamlProperty(name = "producerComponent", type = "enum:vertx-http,http,undertow,netty-http", description = "Sets the name of the Camel component to use as the REST producer.", displayName = "Producer Component"), + @YamlProperty(name = "scheme", type = "string", description = "The scheme to use for exposing the REST service. Usually http or https is supported.", displayName = "Scheme"), @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do.", displayName = "Skip Binding On Error Code"), - @YamlProperty(name = "useXForwardHeaders", type = "boolean", defaultValue = "false", description = "Whether to use X-Forward headers to set host etc. for OpenApi. This may be needed in special cases involving reverse-proxy and networking going from HTTP to HTTPS etc. Then the proxy can send X-Forward headers (X-Forwarded-Proto) that influences the host names in the OpenAPI schema that camel-openapi-java generates from Rest DSL routes.", displayName = "Use XForward Headers"), + @YamlProperty(name = "useXForwardHeaders", type = "boolean", defaultValue = "false", description = "Whether to use X-Forward headers to set host etc. for OpenApi. This may be needed in special cases involving reverse-proxy and networking going from HTTP to HTTPS etc.", displayName = "Use XForward Headers"), @YamlProperty(name = "validationLevels", type = "array:org.apache.camel.model.rest.RestPropertyDefinition", description = "Allows to configure custom validation levels when using camel-openapi-validator with client request/response validator.", displayName = "Validation Levels"), - @YamlProperty(name = "xmlDataFormat", type = "enum:jaxb,jacksonXml", defaultValue = "jaxb", description = "Name of specific XML data format to use. By default jaxb will be used, but jacksonXml is also supported. Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance.", displayName = "Xml Data Format") + @YamlProperty(name = "xmlDataFormat", type = "enum:jaxb,jacksonXml", defaultValue = "jaxb", description = "Name of specific XML data format to use. By default jaxb will be used. Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance.", displayName = "Xml Data Format") } ) public static class RestConfigurationDefinitionDeserializer extends YamlDeserializerBase { @@ -14416,9 +14543,9 @@ protected boolean setProperty(RestConfigurationDefinition target, String propert types = org.apache.camel.model.RestContextRefDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest Context Ref", - description = "To refer to an XML file with rest services defined using the rest-dsl", + description = "References an external XML file containing REST service definitions for inclusion in the current context", deprecated = false, - properties = @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the rest-dsl", displayName = "Ref") + properties = @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the rest-dsl.", displayName = "Ref") ) public static class RestContextRefDefinitionDeserializer extends YamlDeserializerBase { public RestContextRefDefinitionDeserializer() { @@ -14459,32 +14586,32 @@ protected boolean setProperty(RestContextRefDefinition target, String propertyKe types = org.apache.camel.model.rest.RestDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest", - description = "Defines a rest service using the rest-dsl", + description = "Defines a REST service with HTTP operations (GET, POST, PUT, DELETE, etc.) using the Camel REST DSL", deprecated = false, properties = { - @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. This option will override what may be configured on a parent level. The default value is true.", displayName = "Api Docs"), - @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is auto", displayName = "Binding Mode"), - @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.", displayName = "Client Request Validation"), - @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to check what Camel is returning as response to the client: 1) Status-code and Content-Type matches Rest DSL response messages. 2) Check whether expected headers is included according to the Rest DSL repose message headers. 3) If the response body is JSon then check whether its valid JSon. Returns 500 if validation error detected.", displayName = "Client Response Validation"), - @YamlProperty(name = "consumes", type = "string", description = "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", displayName = "Consumes"), + @YamlProperty(name = "apiDocs", type = "boolean", defaultValue = "true", description = "Whether to include or exclude this rest operation in API documentation. This option will override what may be configured on a parent level.", displayName = "Api Docs"), + @YamlProperty(name = "bindingMode", type = "enum:off,auto,json,xml,json_xml", defaultValue = "off", description = "Sets the binding mode for automatic marshalling and unmarshalling of request and response bodies. off (default) disables binding. auto detects JSON or XML from the Content-Type header. json binds using a JSON data format only. xml binds using an XML data format only. json_xml supports both JSON and XML. This option will override what may be configured on a parent level.", displayName = "Binding Mode"), + @YamlProperty(name = "clientRequestValidation", type = "boolean", defaultValue = "false", description = "Whether to enable validation of the client request to check whether Content-Type/Accept headers, required parameters, and message body are valid.", displayName = "Client Request Validation"), + @YamlProperty(name = "clientResponseValidation", type = "boolean", defaultValue = "false", description = "Whether to validate what Camel is returning as response to the client, such as checking status-code, Content-Type, and headers match the Rest DSL response definition.", displayName = "Client Response Validation"), + @YamlProperty(name = "consumes", type = "string", description = "The content type the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Consumes"), @YamlProperty(name = "delete", type = "array:org.apache.camel.model.rest.DeleteDefinition"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", displayName = "Disabled"), - @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level The default value is false.", displayName = "Enable CORS"), - @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object. The default value is false.", displayName = "Enable No Content Response"), + @YamlProperty(name = "enableCORS", type = "boolean", defaultValue = "false", description = "Whether to enable CORS headers in the HTTP response. This option will override what may be configured on a parent level.", displayName = "Enable CORS"), + @YamlProperty(name = "enableNoContentResponse", type = "boolean", defaultValue = "false", description = "Whether to return HTTP 204 with an empty body when a response contains an empty JSON object or XML root object.", displayName = "Enable No Content Response"), @YamlProperty(name = "get", type = "array:org.apache.camel.model.rest.GetDefinition"), @YamlProperty(name = "head", type = "array:org.apache.camel.model.rest.HeadDefinition"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "openApi", type = "object:org.apache.camel.model.rest.OpenApiDefinition", description = "To use an existing OpenAPI specification as contract-first for Camel Rest DSL.", displayName = "Open Api"), @YamlProperty(name = "patch", type = "array:org.apache.camel.model.rest.PatchDefinition"), - @YamlProperty(name = "path", type = "string", description = "Path of the rest service, such as /foo", displayName = "Path"), + @YamlProperty(name = "path", type = "string", description = "Path of the rest service, such as /foo.", displayName = "Path"), @YamlProperty(name = "post", type = "array:org.apache.camel.model.rest.PostDefinition"), - @YamlProperty(name = "produces", type = "string", description = "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", displayName = "Produces"), + @YamlProperty(name = "produces", type = "string", description = "The content type the REST service produces (uses for output), such as application/xml or application/json. This option will override what may be configured on a parent level.", displayName = "Produces"), @YamlProperty(name = "put", type = "array:org.apache.camel.model.rest.PutDefinition"), @YamlProperty(name = "securityDefinitions", type = "object:org.apache.camel.model.rest.RestSecuritiesDefinition", description = "Sets the security definitions such as Basic, OAuth2 etc.", displayName = "Security Definitions"), @YamlProperty(name = "securityRequirements", type = "array:org.apache.camel.model.rest.SecurityDefinition", description = "Sets the security requirement(s) for all endpoints.", displayName = "Security Requirements"), - @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", displayName = "Skip Binding On Error Code"), + @YamlProperty(name = "skipBindingOnErrorCode", type = "boolean", defaultValue = "false", description = "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level.", displayName = "Skip Binding On Error Code"), @YamlProperty(name = "tag", type = "string", description = "To configure a special tag for the operations within this rest definition.", displayName = "Tag") } ) @@ -14666,11 +14793,11 @@ protected boolean setProperty(RestDefinition target, String propertyKey, types = org.apache.camel.model.rest.RestPropertyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest Property", - description = "A key value pair", + description = "Defines a key/value property for REST configuration, used to pass component-specific settings", deprecated = false, properties = { - @YamlProperty(name = "key", type = "string", required = true, description = "Property key", displayName = "Key"), - @YamlProperty(name = "value", type = "string", required = true, description = "Property value", displayName = "Value") + @YamlProperty(name = "key", type = "string", required = true, description = "Property key.", displayName = "Key"), + @YamlProperty(name = "value", type = "string", required = true, description = "Property value.", displayName = "Value") } ) public static class RestPropertyDefinitionDeserializer extends YamlDeserializerBase { @@ -14711,7 +14838,7 @@ protected boolean setProperty(RestPropertyDefinition target, String propertyKey, types = org.apache.camel.model.rest.RestSecuritiesDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest Security Definitions", - description = "To configure rest security definitions.", + description = "Container for security scheme definitions used by REST services", deprecated = false, properties = { @YamlProperty(name = "apiKey", type = "object:org.apache.camel.model.rest.ApiKeyDefinition"), @@ -14815,12 +14942,12 @@ protected boolean setProperty(RestSecuritiesDefinition target, String propertyKe types = org.apache.camel.model.rest.RestsDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rests", - description = "A series of rest services defined using the rest-dsl", + description = "Container for a collection of REST service definitions", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "rest", type = "array:org.apache.camel.model.rest.RestDefinition") } ) @@ -14872,16 +14999,16 @@ protected boolean setProperty(RestsDefinition target, String propertyKey, types = org.apache.camel.model.ResumableDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Resumable", - description = "Resume EIP to support resuming processing from last known offset.", + description = "Enables resuming processing from the last known offset after a restart, using a resume strategy to track and restore position", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "intermittent", type = "boolean", defaultValue = "false", description = "Sets whether the offsets will be intermittently present or whether they must be present in every exchange", displayName = "Intermittent"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "intermittent", type = "boolean", defaultValue = "false", description = "Whether the offsets will be intermittently present or whether they must be present in every exchange.", displayName = "Intermittent"), @YamlProperty(name = "loggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "The logging level to use in case of failures.", displayName = "Logging Level"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "resumeStrategy", type = "string", required = true, description = "Sets the resume strategy to use", displayName = "Resume Strategy") + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "resumeStrategy", type = "string", required = true, description = "The resume strategy to use for resuming processing from the last known offset.", displayName = "Resume Strategy") } ) public static class ResumableDefinitionDeserializer extends YamlDeserializerBase { @@ -14948,16 +15075,16 @@ protected boolean setProperty(ResumableDefinition target, String propertyKey, types = org.apache.camel.model.RollbackDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rollback", - description = "Forces a rollback by stopping routing the message", + description = "Forces a rollback of the current transaction and stops routing the message. Can set a custom message on the exception.", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "markRollbackOnly", type = "boolean", defaultValue = "false", description = "Mark the transaction for rollback only (cannot be overruled to commit)", displayName = "Mark Rollback Only"), - @YamlProperty(name = "markRollbackOnlyLast", type = "boolean", defaultValue = "false", description = "Mark only last sub transaction for rollback only. When using sub transactions (if the transaction manager support this)", displayName = "Mark Rollback Only Last"), - @YamlProperty(name = "message", type = "string", description = "Message to use in rollback exception", displayName = "Message"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "markRollbackOnly", type = "boolean", defaultValue = "false", description = "If enabled then only the current transaction is marked for rollback. No exception is thrown and the route continues to execute.", displayName = "Mark Rollback Only"), + @YamlProperty(name = "markRollbackOnlyLast", type = "boolean", defaultValue = "false", description = "If enabled then only the last sub-transaction (from the last transacted EIP) is marked for rollback. This allows partial rollbacks in nested transaction scenarios.", displayName = "Mark Rollback Only Last"), + @YamlProperty(name = "message", type = "string", description = "The message to set on the exception when rolling back.", displayName = "Message"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class RollbackDefinitionDeserializer extends YamlDeserializerBase { @@ -15028,7 +15155,7 @@ protected boolean setProperty(RollbackDefinition target, String propertyKey, types = org.apache.camel.model.loadbalancer.RoundRobinLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Round Robin Load Balancer", - description = "The destination endpoints are selected in a round-robin fashion. This is a well-known and classic policy, which spreads the load evenly.", + description = "Load balancer that cycles through destination endpoints in sequential order, distributing the load evenly", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -15066,11 +15193,11 @@ protected boolean setProperty(RoundRobinLoadBalancerDefinition target, String pr types = org.apache.camel.model.RouteBuilderDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Route Builder", - description = "To refer to a Java org.apache.camel.builder.RouteBuilder instance to use.", + description = "References a Java RouteBuilder class to include its routes in the current CamelContext", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the route builder instance", displayName = "Ref") + @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the RouteBuilder instance.", displayName = "Ref") } ) public static class RouteBuilderDefinitionDeserializer extends YamlDeserializerBase { @@ -15117,9 +15244,9 @@ protected boolean setProperty(RouteBuilderDefinition target, String propertyKey, types = org.apache.camel.model.RouteConfigurationContextRefDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Route Configuration Context Ref", - description = "To refer to an XML file with route configuration defined using the xml-dsl", + description = "References an external XML file containing route configuration definitions for inclusion in the current context", deprecated = false, - properties = @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the route templates in the xml dsl", displayName = "Ref") + properties = @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the route configuration in the xml-dsl.", displayName = "Ref") ) public static class RouteConfigurationContextRefDefinitionDeserializer extends YamlDeserializerBase { public RouteConfigurationContextRefDefinitionDeserializer() { @@ -15160,9 +15287,9 @@ protected boolean setProperty(RouteConfigurationContextRefDefinition target, types = org.apache.camel.model.RouteContextRefDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Route Context Ref", - description = "To refer to an XML file with routes defined using the xml-dsl", + description = "References an external XML file containing route definitions for inclusion in the current context", deprecated = false, - properties = @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the routes in the xml dsl", displayName = "Ref") + properties = @YamlProperty(name = "ref", type = "string", required = true, description = "Reference to the routes in the xml-dsl.", displayName = "Ref") ) public static class RouteContextRefDefinitionDeserializer extends YamlDeserializerBase { public RouteContextRefDefinitionDeserializer() { @@ -15203,13 +15330,13 @@ protected boolean setProperty(RouteContextRefDefinition target, String propertyK types = org.apache.camel.model.RouteDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Route", - description = "A Camel route", + description = "Defines a Camel route that specifies the processing steps a message goes through from a consumer endpoint to one or more producer endpoints", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -15270,13 +15397,13 @@ protected boolean setProperty(RouteDefinition target, String propertyKey, types = org.apache.camel.model.RouteTemplateParameterDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Template Parameter", - description = "A route template parameter", + description = "Defines a parameter for a route template, with an optional default value and description", deprecated = false, properties = { - @YamlProperty(name = "defaultValue", type = "string", description = "Default value of the parameter. If a default value is provided then the parameter is implied not to be required.", displayName = "Default Value"), - @YamlProperty(name = "description", type = "string", description = "Description of the parameter", displayName = "Description"), - @YamlProperty(name = "name", type = "string", required = true, description = "The name of the parameter", displayName = "Name"), - @YamlProperty(name = "required", type = "boolean", defaultValue = "false", description = "Whether the parameter is required or not. A parameter is required unless this option is set to false or a default value has been configured.", displayName = "Required") + @YamlProperty(name = "defaultValue", type = "string", description = "The default value of the template parameter. Used when no explicit value is provided when creating a route from the template.", displayName = "Default Value"), + @YamlProperty(name = "description", type = "string", description = "Description of the template parameter for documentation purposes.", displayName = "Description"), + @YamlProperty(name = "name", type = "string", required = true, description = "The name of the template parameter.", displayName = "Name"), + @YamlProperty(name = "required", type = "boolean", defaultValue = "false", description = "Whether this template parameter is required. A required parameter must have a value provided when creating a route from the template.", displayName = "Required") } ) public static class RouteTemplateParameterDefinitionDeserializer extends YamlDeserializerBase { @@ -15328,18 +15455,18 @@ protected boolean setProperty(RouteTemplateParameterDefinition target, String pr types = org.apache.camel.model.RoutingSlipDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Routing Slip", - description = "Routes a message through a series of steps that are pre-determined (the slip)", + description = "Routes a message through a pre-determined sequence of endpoints defined in a header or expression (the routing slip). The list of endpoints is evaluated once upfront.", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this routing slip, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise producers/endpoints are stored in memory in the caches. However if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both producers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non frequent used producers.", displayName = "Cache Size"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to define the routing slip, which defines which endpoints to route the message in a pipeline style. Notice the expression is evaluated once, if you want a more dynamic style, then the dynamic router eip is a better choice.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreInvalidEndpoints", type = "boolean", defaultValue = "false", description = "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", displayName = "Ignore Invalid Endpoints"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "uriDelimiter", type = "string", defaultValue = ",", description = "Sets the uri delimiter to use", displayName = "Uri Delimiter") + @YamlProperty(name = "cacheSize", type = "number", 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.", displayName = "Cache Size"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", 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.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "ignoreInvalidEndpoints", type = "boolean", defaultValue = "false", description = "If enabled then invalid endpoint URIs are ignored and logged instead of throwing an exception.", displayName = "Ignore Invalid Endpoints"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "uriDelimiter", type = "string", defaultValue = ",", description = "The delimiter used to separate endpoint URIs in the routing slip expression. Default is comma.", displayName = "Uri Delimiter") } ) public static class RoutingSlipDefinitionDeserializer extends YamlDeserializerBase { @@ -15424,7 +15551,7 @@ protected boolean setProperty(RoutingSlipDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.RssDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "RSS", - description = "Transform from ROME SyndFeed Java Objects to XML and vice-versa.", + description = "Transform from ROME SyndFeed Java Objects to XML and vice-versa", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -15648,19 +15775,19 @@ protected boolean setProperty(SSLContextParametersDefinition target, String prop types = org.apache.camel.model.SagaDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Saga", - description = "Enables Sagas on the route", + description = "Defines a Saga (long-running action) that coordinates distributed services toward a consistent outcome. Unlike XA transactions, Sagas use compensating actions for rollback and work across heterogeneous services.", deprecated = false, properties = { - @YamlProperty(name = "compensation", type = "string", description = "The compensation endpoint URI that must be called to compensate all changes done in the route. The route corresponding to the compensation URI must perform compensation and complete without error. If errors occur during compensation, the saga service may call again the compensation URI to retry.", displayName = "Compensation"), - @YamlProperty(name = "completion", type = "string", description = "The completion endpoint URI that will be called when the Saga is completed successfully. The route corresponding to the completion URI must perform completion tasks and terminate without error. If errors occur during completion, the saga service may call again the completion URI to retry.", displayName = "Completion"), - @YamlProperty(name = "completionMode", type = "enum:AUTO,MANUAL", defaultValue = "AUTO", description = "Determine how the saga should be considered complete. When set to AUTO, the saga is completed when the exchange that initiates the saga is processed successfully, or compensated when it completes exceptionally. When set to MANUAL, the user must complete or compensate the saga using the saga:complete or saga:compensate endpoints.", displayName = "Completion Mode"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "option", type = "array:org.apache.camel.model.PropertyExpressionDefinition", description = "Allows to save properties of the current exchange in order to re-use them in a compensation/completion callback route. Options are usually helpful e.g. to store and retrieve identifiers of objects that should be deleted in compensating actions. Option values will be transformed into input headers of the compensation/completion exchange.", displayName = "Option"), - @YamlProperty(name = "propagation", type = "enum:REQUIRED,REQUIRES_NEW,MANDATORY,SUPPORTS,NOT_SUPPORTED,NEVER", defaultValue = "REQUIRED", description = "Set the Saga propagation mode (REQUIRED, REQUIRES_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER).", displayName = "Propagation"), - @YamlProperty(name = "sagaService", type = "string", description = "Refers to the id to lookup in the registry for the specific CamelSagaService to use.", displayName = "Saga Service"), + @YamlProperty(name = "compensation", type = "string", description = "The compensation endpoint URI that must be called to compensate all changes done in the route. The route corresponding to the compensation URI must perform compensation and complete without error.", displayName = "Compensation"), + @YamlProperty(name = "completion", type = "string", description = "The completion endpoint URI that will be called when the Saga is completed successfully. The route corresponding to the completion URI must perform completion tasks and terminate without error.", displayName = "Completion"), + @YamlProperty(name = "completionMode", type = "enum:AUTO,MANUAL", defaultValue = "AUTO", description = "Determine how the saga should be considered complete. When set to AUTO, the saga is completed when the exchange is processed successfully, or compensated when it completes exceptionally. When set to MANUAL, the user must complete or compensate the saga using the saga:complete or saga:compensate endpoints.", displayName = "Completion Mode"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "option", type = "array:org.apache.camel.model.PropertyExpressionDefinition", description = "Allows to save properties of the current exchange in order to re-use them in a compensation/completion callback route. Option values will be transformed into input headers of the compensation/completion exchange.", displayName = "Option"), + @YamlProperty(name = "propagation", type = "enum:REQUIRED,REQUIRES_NEW,MANDATORY,SUPPORTS,NOT_SUPPORTED,NEVER", defaultValue = "REQUIRED", description = "Set the Saga propagation mode. REQUIRED joins an existing saga or starts a new one. REQUIRES_NEW always starts a new saga, suspending any existing one. MANDATORY requires an existing saga and fails if none is active. SUPPORTS joins an existing saga if present but does not start a new one. NOT_SUPPORTED executes outside any saga, suspending an existing one. NEVER fails if a saga is already active.", displayName = "Propagation"), + @YamlProperty(name = "sagaService", type = "string", description = "Refers to the id to lookup in the registry for the specific CamelSagaService to use", displayName = "Saga Service"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), @YamlProperty(name = "timeout", type = "string", description = "Set the maximum amount of time for the Saga. After the timeout is expired, the saga will be compensated automatically (unless a different decision has been taken in the meantime).", displayName = "Timeout") } @@ -15753,15 +15880,15 @@ protected boolean setProperty(SagaDefinition target, String propertyKey, types = org.apache.camel.model.SamplingDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Sample", - description = "Extract a sample of the messages passing through a route", + description = "Samples a subset of messages passing through the route, either by frequency count or time interval, and discards the rest", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "messageFrequency", type = "number", description = "Sets the sample message count which only a single Exchange will pass through after this many received.", displayName = "Message Frequency"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "samplePeriod", type = "string", defaultValue = "1000", description = "Sets the sample period during which only a single Exchange will pass through.", displayName = "Sample Period") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "messageFrequency", type = "number", description = "The frequency of samples as a message count, using a message-frequency approach. For example, a value of 5 means every 5th message is sampled.", displayName = "Message Frequency"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "samplePeriod", type = "string", defaultValue = "1000", description = "The period between samples, using a time-based approach. Default is 1 second.", displayName = "Sample Period") } ) public static class SamplingDefinitionDeserializer extends YamlDeserializerBase { @@ -15827,15 +15954,15 @@ protected boolean setProperty(SamplingDefinition target, String propertyKey, types = org.apache.camel.model.ScriptDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Script", - description = "Executes a script from a language which does not change the message body.", + description = "Executes an expression or script in a chosen language for side effects without modifying the message body", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Script to be executed.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression to evaluate as a script. The script result does not change the message body (use transform instead if that is desired).", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class ScriptDefinitionDeserializer extends YamlDeserializerBase { @@ -15900,11 +16027,11 @@ protected boolean setProperty(ScriptDefinition target, String propertyKey, types = org.apache.camel.model.rest.SecurityDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Rest Security", - description = "Rest security definition", + description = "Applies a security requirement to a REST operation, referencing a security scheme defined at the service level", deprecated = false, properties = { - @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition", displayName = "Key"), - @YamlProperty(name = "scopes", type = "string", description = "The scopes to allow (separate multiple scopes by comma)", displayName = "Scopes") + @YamlProperty(name = "key", type = "string", required = true, description = "Key used to refer to this security definition.", displayName = "Key"), + @YamlProperty(name = "scopes", type = "string", description = "The scopes to allow (separate multiple scopes by comma).", displayName = "Scopes") } ) public static class SecurityDefinitionDeserializer extends YamlDeserializerBase { @@ -15945,15 +16072,15 @@ protected boolean setProperty(SecurityDefinition target, String propertyKey, types = org.apache.camel.model.SetBodyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Body", - description = "Sets the contents of the message body", + description = "Sets the message body to a value computed by an expression", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression that returns the new body to use", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression whose result is used as the new message body.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class SetBodyDefinitionDeserializer extends YamlDeserializerBase { @@ -16019,14 +16146,14 @@ protected boolean setProperty(SetBodyDefinition target, String propertyKey, types = org.apache.camel.model.SetExchangePatternDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Exchange Pattern", - description = "Sets the exchange pattern on the message exchange", + description = "Sets the message exchange pattern (MEP) on the exchange, such as InOnly for one-way or InOut for request-reply", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "pattern", type = "enum:InOnly,InOut", description = "Sets the new exchange pattern of the Exchange to be used from this point forward", displayName = "Pattern") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "pattern", type = "enum:InOnly,InOut", description = "The new exchange pattern to use from this point forward.", displayName = "Pattern") } ) public static class SetExchangePatternDefinitionDeserializer extends YamlDeserializerBase { @@ -16087,16 +16214,16 @@ protected boolean setProperty(SetExchangePatternDefinition target, String proper types = org.apache.camel.model.SetHeaderDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Header", - description = "Sets the value of a message header", + description = "Sets a message header to a value computed by an expression", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to return the value of the header", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of message header to set a new value The simple language can be used to define a dynamic evaluated header name to be used. Otherwise a constant name will be used.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression whose result is used as the header value.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "name", type = "string", required = true, 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.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class SetHeaderDefinitionDeserializer extends YamlDeserializerBase { @@ -16166,14 +16293,14 @@ protected boolean setProperty(SetHeaderDefinition target, String propertyKey, types = org.apache.camel.model.SetHeadersDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Headers", - description = "Allows setting multiple headers on the message at the same time.", + description = "Sets multiple message headers at once, each computed by its own expression", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), @YamlProperty(name = "headers", type = "array:org.apache.camel.model.SetHeaderDefinition", description = "Contains the headers to be set", displayName = "Headers"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class SetHeadersDefinitionDeserializer extends YamlDeserializerBase { @@ -16229,16 +16356,16 @@ protected boolean setProperty(SetHeadersDefinition target, String propertyKey, types = org.apache.camel.model.SetPropertyDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Property", - description = "Sets a named property on the message exchange", + description = "Sets an exchange property to a value computed by an expression", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to return the value of the message exchange property", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of exchange property to set a new value. The simple language can be used to define a dynamic evaluated exchange property name to be used. Otherwise a constant name will be used.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression whose result is used as the exchange property value.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "name", type = "string", required = true, 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.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class SetPropertyDefinitionDeserializer extends YamlDeserializerBase { @@ -16308,16 +16435,16 @@ protected boolean setProperty(SetPropertyDefinition target, String propertyKey, types = org.apache.camel.model.SetVariableDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Variable", - description = "Sets the value of a variable", + description = "Sets a variable to a value computed by an expression", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to return the value of the variable", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "name", type = "string", required = true, description = "Name of variable to set a new value The simple language can be used to define a dynamic evaluated variable name to be used. Otherwise a constant name will be used.", displayName = "Name"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression whose result is used as the variable value.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "name", type = "string", required = true, 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.", displayName = "Name"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class SetVariableDefinitionDeserializer extends YamlDeserializerBase { @@ -16387,13 +16514,13 @@ protected boolean setProperty(SetVariableDefinition target, String propertyKey, types = org.apache.camel.model.SetVariablesDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Set Variables", - description = "Allows setting multiple variables at the same time.", + description = "Sets multiple variables at once, each computed by its own expression", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "variables", type = "array:org.apache.camel.model.SetVariableDefinition", description = "Contains the variables to be set", displayName = "Variables") } ) @@ -16451,16 +16578,16 @@ protected boolean setProperty(SetVariablesDefinition target, String propertyKey, types = org.apache.camel.model.language.SimpleExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Simple", - description = "Evaluates a Camel simple expression.", + description = "Evaluates a Camel simple expression", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "nested", type = "boolean", defaultValue = "false", description = "If the result is a nested simple expression should this expression be evaluated as well", displayName = "Nested"), - @YamlProperty(name = "pretty", type = "boolean", defaultValue = "false", description = "To pretty format the output (only JSon or XML supported)", displayName = "Pretty"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim"), - @YamlProperty(name = "trimResult", type = "boolean", defaultValue = "false", description = "Whether to trim the returned values when this language are in use. For example the output result may contain unwanted line breaks at the beginning and end such as when using Java DSL with multi-line blocks. Is default false to be backwards compatible with existing behavior.", displayName = "Trim Result") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "nested", type = "boolean", defaultValue = "false", description = "If the result is a nested simple expression should this expression be evaluated as well.", displayName = "Nested"), + @YamlProperty(name = "pretty", type = "boolean", defaultValue = "false", description = "To pretty format the output (only JSon or XML supported).", displayName = "Pretty"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim"), + @YamlProperty(name = "trimResult", type = "boolean", defaultValue = "false", description = "Whether to trim the returned values when this language is in use.", displayName = "Trim Result") } ) public static class SimpleExpressionDeserializer extends YamlDeserializerBase { @@ -16540,7 +16667,7 @@ protected boolean setProperty(SimpleExpression target, String propertyKey, types = org.apache.camel.model.dataformat.SmooksDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Smooks", - description = "Transform and bind XML as well as non-XML data, including EDI, CSV, JSON, and YAML using Smooks.", + description = "Transform and bind XML as well as non-XML data, including EDI, CSV, JSON, and YAML using Smooks", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @@ -16586,17 +16713,17 @@ protected boolean setProperty(SmooksDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.SoapDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "SOAP", - description = "Marshal Java objects to SOAP messages and back.", + description = "Marshal Java objects to SOAP messages and back", deprecated = false, properties = { @YamlProperty(name = "contextPath", type = "string", required = true, description = "Package name where your JAXB classes are located.", displayName = "Context Path"), - @YamlProperty(name = "elementNameStrategy", type = "string", description = "Refers to an element strategy to lookup from the registry. An element name strategy is used for two purposes. The first is to find a xml element name for a given object and soap action when marshaling the object into a SOAP message. The second is to find an Exception class for a given soap fault name. The following three element strategy class name is provided out of the box. QNameStrategy - Uses a fixed qName that is configured on instantiation. Exception lookup is not supported TypeNameStrategy - Uses the name and namespace from the XMLType annotation of the given type. If no namespace is set then package-info is used. Exception lookup is not supported ServiceInterfaceStrategy - Uses information from a webservice interface to determine the type name and to find the exception class for a SOAP fault All three classes is located in the package name org.apache.camel.dataformat.soap.name If you have generated the web service stub code with cxf-codegen or a similar tool then you probably will want to use the ServiceInterfaceStrategy. In the case you have no annotated service interface you should use QNameStrategy or TypeNameStrategy.", displayName = "Element Name Strategy"), - @YamlProperty(name = "encoding", type = "string", description = "To overrule and use a specific encoding", displayName = "Encoding"), + @YamlProperty(name = "elementNameStrategy", type = "string", description = "Refers to an element strategy to lookup from the registry.", displayName = "Element Name Strategy"), + @YamlProperty(name = "encoding", type = "string", description = "To overrule and use a specific encoding.", displayName = "Encoding"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreUnmarshalledHeaders", type = "boolean", defaultValue = "false", description = "Whether to ignore headers that was not unmarshalled. By default, headers which could not be unmarshalled is recorded in the org.apache.camel.dataformat.soap.UNMARSHALLED_HEADER_LIST header which allows to inspect any problematic header.", displayName = "Ignore Unmarshalled Headers"), - @YamlProperty(name = "namespacePrefix", type = "string", description = "When marshalling using JAXB or SOAP then the JAXB implementation will automatic assign namespace prefixes, such as ns2, ns3, ns4 etc. To control this mapping, Camel allows you to refer to a map which contains the desired mapping.", displayName = "Namespace Prefix"), - @YamlProperty(name = "schema", type = "string", description = "To validate against an existing schema. Your can use the prefix classpath:, file: or http: to specify how the resource should be resolved. You can separate multiple schema files by using the ',' character.", displayName = "Schema"), - @YamlProperty(name = "version", type = "enum:1.1,1.2", defaultValue = "1.1", description = "SOAP version should either be 1.1 or 1.2. Is by default 1.1", displayName = "Version") + @YamlProperty(name = "ignoreUnmarshalledHeaders", type = "boolean", defaultValue = "false", description = "Whether to ignore headers that were not unmarshalled.", displayName = "Ignore Unmarshalled Headers"), + @YamlProperty(name = "namespacePrefix", type = "string", description = "When marshalling using JAXB or SOAP then the JAXB implementation will automatic assign namespace prefixes. To control this mapping, Camel allows you to refer to a map which contains the desired mapping.", displayName = "Namespace Prefix"), + @YamlProperty(name = "schema", type = "string", description = "To validate against an existing schema. You can use the prefix classpath:, file: or http: to specify how the resource should be resolved. You can separate multiple schema files by using the ',' character.", displayName = "Schema"), + @YamlProperty(name = "version", type = "enum:1.1,1.2", defaultValue = "1.1", description = "SOAP version should either be 1.1 or 1.2. Is by default 1.1.", displayName = "Version") } ) public static class SoapDataFormatDeserializer extends YamlDeserializerBase { @@ -16672,16 +16799,16 @@ protected boolean setProperty(SoapDataFormat target, String propertyKey, types = org.apache.camel.model.SortDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Sort", - description = "Sorts the contents of the message", + description = "Sorts the items in a message body that is a List, using a specified comparator or the default ordering", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "comparator", type = "string", description = "Sets the comparator to use for sorting", displayName = "Comparator"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Optional expression to sort by something else than the message body", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "comparator", type = "string", description = "Sets a reference to lookup for the comparator to use for sorting.", displayName = "Comparator"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", 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.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class SortDefinitionDeserializer extends YamlDeserializerBase { @@ -16752,13 +16879,13 @@ protected boolean setProperty(SortDefinition target, String propertyKey, types = org.apache.camel.model.language.SpELExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "SpEL", - description = "Evaluates a Spring expression (SpEL).", + description = "Evaluates a Spring expression (SpEL)", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class SpELExpressionDeserializer extends YamlDeserializerBase { @@ -16823,34 +16950,34 @@ protected boolean setProperty(SpELExpression target, String propertyKey, types = org.apache.camel.model.SplitDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Split", - description = "Splits a single message into many sub-messages.", + description = "Splits a message into multiple sub-messages using an expression, and processes each one individually. Supports parallel processing and result aggregation.", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "aggregationStrategy", type = "string", description = "Sets a reference to the AggregationStrategy to be used to assemble the replies from the split messages, into a single outgoing message from the Splitter. By default Camel will use the original incoming message to the splitter (leave it unchanged). You can also use a POJO as the AggregationStrategy", displayName = "Aggregation Strategy"), - @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy", displayName = "Aggregation Strategy Method Allow Null"), - @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), - @YamlProperty(name = "delimiter", type = "string", 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, this can be needed in some special situations. The default value is comma.", displayName = "Delimiter"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "errorThreshold", type = "number", description = "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation.", displayName = "Error Threshold"), - @YamlProperty(name = "executorService", type = "string", description = "To use a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatically implied, and you do not have to enable that option as well.", displayName = "Executor Service"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression of how to split the message body, such as as-is, using a tokenizer, or using a xpath.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "aggregationStrategy", type = "string", 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.", displayName = "Aggregation Strategy"), + @YamlProperty(name = "aggregationStrategyMethodAllowNull", type = "boolean", defaultValue = "false", description = "If true then null is used as the oldExchange when there is no data to aggregate, when using POJOs as the AggregationStrategy.", displayName = "Aggregation Strategy Method Allow Null"), + @YamlProperty(name = "aggregationStrategyMethodName", type = "string", description = "The method name to use when using a POJO as the AggregationStrategy.", displayName = "Aggregation Strategy Method Name"), + @YamlProperty(name = "delimiter", type = "string", 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.", displayName = "Delimiter"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "errorThreshold", type = "number", description = "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation. For example, 0.1 means abort if more than 10% of items fail. When the threshold is exceeded, a org.apache.camel.CamelExchangeException is thrown. This option is mutually exclusive with stopOnException . When set, individual item failures are tracked but processing continues until the threshold is exceeded. Note: When combined with parallelProcessing , the failure ratio may vary between runs because parallel items complete in non-deterministic order. For deterministic abort behavior with parallel processing, prefer maxFailedRecords (absolute count) over errorThreshold (ratio).", displayName = "Error Threshold"), + @YamlProperty(name = "executorService", type = "string", description = "Reference to a custom thread pool to use for parallel processing. Setting this option implies parallel processing.", displayName = "Executor Service"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", 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.", displayName = "Expression", oneOf = "expression"), @YamlProperty(name = "group", type = "number", description = "Groups N split messages into a single message with a java.util.List body. This allows processing items in chunks instead of one at a time.", displayName = "Group"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "maxFailedRecords", type = "number", description = "Sets the maximum number of failed records before aborting the split operation.", displayName = "Max Failed Records"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the org.apache.camel.Exchange to be sent. This can be used to deep-clone messages that should be sent, or any custom logic needed before the exchange is sent.", displayName = "On Prepare"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "maxFailedRecords", type = "number", description = "Sets the maximum number of failed records before aborting the split operation. When the count is exceeded, a org.apache.camel.CamelExchangeException is thrown. This option is mutually exclusive with stopOnException . Can be combined with errorThreshold processing aborts when either threshold is exceeded.", displayName = "Max Failed Records"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "onPrepare", type = "string", description = "Reference to a processor for preparing the exchange to be sent. Can be used to deep-clone messages that should be sent.", displayName = "On Prepare"), @YamlProperty(name = "parallelAggregate", type = "boolean", deprecated = true, defaultValue = "false", description = "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe.", displayName = "Parallel Aggregate"), - @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then processing each split messages occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. It's only processing the sub messages from the splitter which happens concurrently. When parallel processing is enabled, then the Camel routing engin will continue processing using last used thread from the parallel thread pool. However, if you want to use the original thread that called the splitter, then make sure to enable the synchronous option as well. In parallel processing mode, you may want to also synchronous = true to force this EIP to process the sub-tasks using the upper bounds of the thread-pool. If using synchronous = false then Camel will allow its reactive routing engine to use as many threads as possible, which may be available due to sub-tasks using other thread-pools such as CompletableFuture.runAsync or others.", displayName = "Parallel Processing"), - @YamlProperty(name = "resumeStrategy", type = "string", description = "Sets a reference to a ResumeStrategy in the registry for resume-from-last-position support.", displayName = "Resume Strategy"), - @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Splitter will by default not share unit of work between the parent exchange and each split exchange. This means each split exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), + @YamlProperty(name = "parallelProcessing", type = "boolean", defaultValue = "false", description = "If enabled then processing each split message occurs concurrently. The caller thread still waits until all messages are fully processed before it continues.", displayName = "Parallel Processing"), + @YamlProperty(name = "resumeStrategy", type = "string", description = "Sets a ResumeStrategy for resume-from-last-position support. The watermark key must also be configured via watermarkKey(String) .", displayName = "Resume Strategy"), + @YamlProperty(name = "shareUnitOfWork", type = "boolean", defaultValue = "false", description = "Shares the unit of work with the parent and each of the split messages. By default each split exchange has its own individual unit of work.", displayName = "Share Unit Of Work"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition"), - @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the splitter will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The default behavior is to not stop but continue processing till the end", displayName = "Stop On Exception"), - @YamlProperty(name = "streaming", type = "boolean", defaultValue = "false", description = "When in streaming mode, then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter do not split all the messages first, but then we do not know the total size, and therefore the org.apache.camel.Exchange#SPLIT_SIZE is empty. In non-streaming mode (default) the splitter will split each message first, to know the total size, and then process each message one by one. This requires to keep all the split messages in memory and therefore requires more memory. The total size is provided in the org.apache.camel.Exchange#SPLIT_SIZE header. The streaming mode also affects the aggregation behavior. If enabled then Camel will process replies out-of-order, e.g. in the order they come back. If disabled, Camel will process replies in the same order as the messages was split.", displayName = "Streaming"), - @YamlProperty(name = "synchronous", type = "boolean", defaultValue = "false", description = "Sets whether synchronous processing should be strictly used. When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled.", displayName = "Synchronous"), - @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Sets a total timeout specified in millis, when using parallel processing. If the Splitter hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Splitter breaks out and continues. The timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care.", displayName = "Timeout"), - @YamlProperty(name = "watermarkExpression", type = "string", description = "Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value.", displayName = "Watermark Expression"), + @YamlProperty(name = "stopOnException", type = "boolean", defaultValue = "false", description = "If enabled then stops further split processing if an exception or failure occurred during processing of a split message, and the caused exception will be thrown. The default behavior is to not stop but continue processing till the end.", displayName = "Stop On Exception"), + @YamlProperty(name = "streaming", type = "boolean", defaultValue = "false", description = "When enabled then the splitter splits the original message on-demand, and each split message is processed one by one. This reduces memory usage as the splitter does not split all messages first.", displayName = "Streaming"), + @YamlProperty(name = "synchronous", type = "boolean", defaultValue = "false", description = "When enabled then the same thread is used to continue routing after the split is complete, even if parallel processing is enabled.", displayName = "Synchronous"), + @YamlProperty(name = "timeout", type = "string", defaultValue = "0", description = "Total timeout in millis when using parallel processing. If the splitter has not been able to process all replies within the given timeframe, then the timeout triggers and the splitter breaks out and continues.", displayName = "Timeout"), + @YamlProperty(name = "watermarkExpression", type = "string", description = "Sets a Simple expression to evaluate on each completed sub-exchange to determine the new watermark value. When set, enables value-based watermarking instead of index-based. The expression is evaluated using the Simple language.", displayName = "Watermark Expression"), @YamlProperty(name = "watermarkKey", type = "string", description = "Sets the key to use in the watermark store.", displayName = "Watermark Key") } ) @@ -17015,24 +17142,24 @@ protected boolean setProperty(SplitDefinition target, String propertyKey, types = org.apache.camel.model.errorhandler.SpringTransactionErrorHandlerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Spring Transaction Error Handler", - description = "Spring based transactional error handler (requires camel-spring).", + description = "Transactional error handler using Spring Transaction Manager that marks the transaction for rollback on failure", deprecated = false, properties = { - @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used by the error handler", displayName = "Executor Service Ref"), + @YamlProperty(name = "executorServiceRef", type = "string", description = "Sets a reference to a thread pool to be used for asynchronous redelivery.", displayName = "Executor Service Ref"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "Logging level to use by error handler", displayName = "Level"), - @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler", displayName = "Log Name"), - @YamlProperty(name = "loggerRef", type = "string", description = "References to a logger to use as logger for the error handler", displayName = "Logger Ref"), - @YamlProperty(name = "onExceptionOccurredRef", type = "string", description = "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", displayName = "On Exception Occurred Ref"), - @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor / dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), - @YamlProperty(name = "onRedeliveryRef", type = "string", description = "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", displayName = "On Redelivery Ref"), - @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "Sets the redelivery settings", displayName = "Redelivery Policy"), - @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", displayName = "Redelivery Policy Ref"), - @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false.", displayName = "Retry While Ref"), - @YamlProperty(name = "rollbackLoggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "WARN", description = "Sets the logging level to use for logging transactional rollback. This option is default WARN.", displayName = "Rollback Logging Level"), + @YamlProperty(name = "level", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "ERROR", description = "The logging level to use when logging caught exceptions.", displayName = "Level"), + @YamlProperty(name = "logName", type = "string", description = "Name of the logger to use by the error handler.", displayName = "Log Name"), + @YamlProperty(name = "loggerRef", type = "string", description = "Sets a reference to a logger to use for logging error handler activity.", displayName = "Logger Ref"), + @YamlProperty(name = "onExceptionOccurredRef", type = "string", 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.", displayName = "On Exception Occurred Ref"), + @YamlProperty(name = "onPrepareFailureRef", type = "string", description = "Sets a reference to a processor to prepare the exchange before handled by the failure processor or dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", displayName = "On Prepare Failure Ref"), + @YamlProperty(name = "onRedeliveryRef", type = "string", 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.", displayName = "On Redelivery Ref"), + @YamlProperty(name = "redeliveryPolicy", type = "object:org.apache.camel.model.RedeliveryPolicyDefinition", description = "The redelivery settings for configuring retry attempts and delays when message processing fails.", displayName = "Redelivery Policy"), + @YamlProperty(name = "redeliveryPolicyRef", type = "string", description = "Sets a reference to a redelivery policy to lookup in the registry to be used.", displayName = "Redelivery Policy Ref"), + @YamlProperty(name = "retryWhileRef", type = "string", description = "Sets a reference to a retry while predicate. Redelivery continues as long as the predicate evaluates to true.", displayName = "Retry While Ref"), + @YamlProperty(name = "rollbackLoggingLevel", type = "enum:TRACE,DEBUG,INFO,WARN,ERROR,OFF", defaultValue = "WARN", description = "The logging level to use for logging transactional rollback. Default is WARN.", displayName = "Rollback Logging Level"), @YamlProperty(name = "transactedPolicyRef", type = "string", description = "The transacted policy to use that is configured for either Spring or JTA based transactions. If no policy has been configured then Camel will attempt to auto-discover.", displayName = "Transacted Policy Ref"), - @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Body"), - @YamlProperty(name = "useOriginalMessage", type = "boolean", defaultValue = "false", description = "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With the original exchange store in the dead letter queue it might be easier to manually re submit the org.apache.camel.Exchange again as the IN message is the same as when Camel received it. So you should be able to send the org.apache.camel.Exchange to the same input. The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body and headers, where as the latter only includes the original body. You can use the latter to enrich the message with custom headers and include the original message body. The former wont let you do this, as its using the original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody. The original input message is defensively copied, and the copied message body is converted to org.apache.camel.StreamCache if possible (stream caching is enabled, can be disabled globally or on the original route), to ensure the body can be read when the original message is being used later. If the body is converted to org.apache.camel.StreamCache then the message body on the current org.apache.camel.Exchange is replaced with the org.apache.camel.StreamCache body. If the body is not converted to org.apache.camel.StreamCache then the body will not be able to re-read when accessed later. Important: The original input means the input message that are bounded by the current org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or multiple routes if they are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary for the messages in their sub-route (eg the splitted message); however these EIPs have an option named shareUnitOfWork which allows to combine with the parent unit of work in regard to error handling and therefore use the parent original message. By default this feature is off.", displayName = "Use Original Message") + @YamlProperty(name = "useOriginalBody", type = "boolean", defaultValue = "false", description = "If enabled, uses the original input message body (but not headers) when the exchange is moved to the dead letter queue after all redelivery attempts have been exhausted. This allows enriching the message with custom headers while keeping the original body. Cannot be used together with useOriginalMessage.", displayName = "Use Original Body"), + @YamlProperty(name = "useOriginalMessage", type = "boolean", 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.", displayName = "Use Original Message") } ) public static class SpringTransactionErrorHandlerDefinitionDeserializer extends YamlDeserializerBase { @@ -17138,13 +17265,13 @@ protected boolean setProperty(SpringTransactionErrorHandlerDefinition target, types = org.apache.camel.model.StepDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Step", - description = "Routes the message to a sequence of processors which is grouped together as one logical name", + description = "Groups a sequence of processing steps under a single logical name for improved monitoring, management, and tracing visibility", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -17200,10 +17327,10 @@ protected boolean setProperty(StepDefinition target, String propertyKey, types = org.apache.camel.model.loadbalancer.StickyLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Sticky Load Balancer", - description = "Sticky load balancing using an expression to calculate a correlation key to perform the sticky load balancing.", + description = "Load balancer that routes messages to the same endpoint based on a correlation expression, ensuring session affinity", deprecated = false, properties = { - @YamlProperty(name = "correlationExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "The correlation expression to use to calculate the correlation key", displayName = "Correlation Expression"), + @YamlProperty(name = "correlationExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "The correlation expression to use to calculate the correlation key.", displayName = "Correlation Expression"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") } ) @@ -17245,13 +17372,13 @@ protected boolean setProperty(StickyLoadBalancerDefinition target, String proper types = org.apache.camel.model.StopDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Stop", - description = "Stops the processing of the current message", + description = "Stops processing of the current message and marks the exchange as completed without sending it to any further steps", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class StopDefinitionDeserializer extends YamlDeserializerBase { @@ -17302,15 +17429,15 @@ protected boolean setProperty(StopDefinition target, String propertyKey, types = org.apache.camel.model.config.StreamResequencerConfig.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Stream Config", - description = "Configures stream-processing resequence eip.", + description = "Configures the stream-processing mode of the Resequence EIP, which continuously reorders messages as they arrive using a timeout", deprecated = false, properties = { @YamlProperty(name = "capacity", type = "number", defaultValue = "1000", description = "Sets the capacity of the resequencer inbound queue.", displayName = "Capacity"), - @YamlProperty(name = "comparator", type = "string", description = "To use a custom comparator as a org.apache.camel.processor.resequencer.ExpressionResultComparator type.", displayName = "Comparator"), - @YamlProperty(name = "deliveryAttemptInterval", type = "string", defaultValue = "1000", description = "Sets the interval in milliseconds the stream resequencer will at most wait while waiting for condition of being able to deliver.", displayName = "Delivery Attempt Interval"), - @YamlProperty(name = "ignoreInvalidExchanges", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid exchanges", displayName = "Ignore Invalid Exchanges"), - @YamlProperty(name = "rejectOld", type = "boolean", defaultValue = "false", description = "If true, throws an exception when messages older than the last delivered message are processed", displayName = "Reject Old"), - @YamlProperty(name = "timeout", type = "string", defaultValue = "1000", description = "Sets minimum time (milliseconds) to wait for missing elements (messages).", displayName = "Timeout") + @YamlProperty(name = "comparator", type = "string", description = "To use a custom comparator for ordering the sequence of messages.", displayName = "Comparator"), + @YamlProperty(name = "deliveryAttemptInterval", type = "string", defaultValue = "1000", description = "Sets the interval in milliseconds the stream resequencer will at most wait while waiting for the condition of being able to deliver.", displayName = "Delivery Attempt Interval"), + @YamlProperty(name = "ignoreInvalidExchanges", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid exchanges.", displayName = "Ignore Invalid Exchanges"), + @YamlProperty(name = "rejectOld", type = "boolean", defaultValue = "false", description = "If true, throws an exception when messages older than the last delivered message are processed.", displayName = "Reject Old"), + @YamlProperty(name = "timeout", type = "string", defaultValue = "1000", description = "Sets the minimum time (milliseconds) to wait for missing elements (messages).", displayName = "Timeout") } ) public static class StreamResequencerConfigDeserializer extends YamlDeserializerBase { @@ -17372,11 +17499,11 @@ protected boolean setProperty(StreamResequencerConfig target, String propertyKey types = org.apache.camel.model.dataformat.SwiftMtDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "SWIFT MT", - description = "Encode and decode SWIFT MT messages.", + description = "Encode and decode SWIFT MT messages", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "writeInJson", type = "boolean", defaultValue = "false", description = "The flag indicating that messages must be marshalled in a JSON format.", displayName = "Write In Json") + @YamlProperty(name = "writeInJson", type = "boolean", defaultValue = "false", description = "Whether to marshal messages in JSON format.", displayName = "Write In Json") } ) public static class SwiftMtDataFormatDeserializer extends YamlDeserializerBase { @@ -17422,14 +17549,14 @@ protected boolean setProperty(SwiftMtDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.SwiftMxDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "SWIFT MX", - description = "Encode and decode SWIFT MX messages.", + description = "Encode and decode SWIFT MX messages", deprecated = false, properties = { @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "readConfig", type = "string", description = "Refers to a specific configuration to use when unmarshalling an input stream to lookup from the registry.", displayName = "Read Config"), @YamlProperty(name = "readMessageId", type = "string", description = "The type of MX message to produce when unmarshalling an input stream. If not set, it will be automatically detected from the namespace used.", displayName = "Read Message Id"), @YamlProperty(name = "writeConfig", type = "string", description = "Refers to a specific configuration to use when marshalling a message to lookup from the registry.", displayName = "Write Config"), - @YamlProperty(name = "writeInJson", type = "boolean", defaultValue = "false", description = "The flag indicating that messages must be marshalled in a JSON format.", displayName = "Write In Json") + @YamlProperty(name = "writeInJson", type = "boolean", defaultValue = "false", description = "Whether to marshal messages in JSON format.", displayName = "Write In Json") } ) public static class SwiftMxDataFormatDeserializer extends YamlDeserializerBase { @@ -17485,7 +17612,7 @@ protected boolean setProperty(SwiftMxDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.SyslogDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Syslog", - description = "Marshall SyslogMessages to RFC3164 and RFC5424 messages and back.", + description = "Marshall SyslogMessages to RFC3164 and RFC5424 messages and back", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -17522,14 +17649,14 @@ protected boolean setProperty(SyslogDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.TarFileDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Tar File", - description = "Archive files into tarballs or extract files from tarballs.", + description = "Archive files into tarballs or extract files from tarballs", deprecated = false, properties = { - @YamlProperty(name = "allowEmptyDirectory", type = "boolean", defaultValue = "false", description = "If the tar file has more than one entry, setting this option to true, allows to get the iterator even if the directory is empty", displayName = "Allow Empty Directory"), + @YamlProperty(name = "allowEmptyDirectory", type = "boolean", defaultValue = "false", description = "Whether to allow getting the iterator even if the directory is empty, when the tar file has more than one entry.", displayName = "Allow Empty Directory"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxDecompressedSize", type = "number", defaultValue = "1073741824", description = "Set the maximum decompressed size of a tar file (in bytes). The default value if not specified corresponds to 1 gigabyte. An IOException will be thrown if the decompressed size exceeds this amount. Set to -1 to disable setting a maximum decompressed size.", displayName = "Max Decompressed Size"), - @YamlProperty(name = "preservePathElements", type = "boolean", defaultValue = "false", description = "If the file name contains path elements, setting this option to true, allows the path to be maintained in the tar file.", displayName = "Preserve Path Elements"), - @YamlProperty(name = "usingIterator", type = "boolean", defaultValue = "false", description = "If the tar file has more than one entry, the setting this option to true, allows working with the splitter EIP, to split the data using an iterator in a streaming mode.", displayName = "Using Iterator") + @YamlProperty(name = "maxDecompressedSize", type = "number", defaultValue = "1073741824", description = "The maximum decompressed size of a tar file (in bytes). An IOException is thrown if the decompressed size exceeds this amount. Set to -1 to disable.", displayName = "Max Decompressed Size"), + @YamlProperty(name = "preservePathElements", type = "boolean", defaultValue = "false", description = "Whether to preserve path elements when the file name contains path elements in the tar file.", displayName = "Preserve Path Elements"), + @YamlProperty(name = "usingIterator", type = "boolean", defaultValue = "false", description = "Whether to use an iterator to split tar entries when the tar file has more than one entry, for use with the splitter EIP in streaming mode.", displayName = "Using Iterator") } ) public static class TarFileDataFormatDeserializer extends YamlDeserializerBase { @@ -17585,10 +17712,10 @@ protected boolean setProperty(TarFileDataFormat target, String propertyKey, types = org.apache.camel.model.TemplatedRouteParameterDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Templated Route Parameter", - description = "An input parameter of a route template.", + description = "Provides a parameter value for a templated route, binding a value to a route template parameter", deprecated = false, properties = { - @YamlProperty(name = "name", type = "string", required = true, description = "The name of the parameter", displayName = "Name"), + @YamlProperty(name = "name", type = "string", required = true, description = "The name of the parameter.", displayName = "Name"), @YamlProperty(name = "value", type = "string", required = true, description = "The value of the parameter.", displayName = "Value") } ) @@ -17630,20 +17757,20 @@ protected boolean setProperty(TemplatedRouteParameterDefinition target, String p types = org.apache.camel.model.ThreadPoolProfileDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Thread Pool Profile", - description = "To configure thread pools", + description = "Defines a named thread pool profile with pool size, queue size, and thread keep-alive settings for use by EIPs and components", deprecated = false, properties = { - @YamlProperty(name = "allowCoreThreadTimeOut", type = "boolean", defaultValue = "false", description = "Whether idle core threads is allowed to timeout and therefore can shrink the pool size below the core pool size Is by default true", displayName = "Allow Core Thread Time Out"), + @YamlProperty(name = "allowCoreThreadTimeOut", type = "boolean", defaultValue = "false", description = "Whether idle core threads are allowed to timeout and therefore can shrink the pool size below the core pool size", displayName = "Allow Core Thread Time Out"), @YamlProperty(name = "defaultProfile", type = "boolean", defaultValue = "false", description = "Whether this profile is the default thread pool profile", displayName = "Default Profile"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "keepAliveTime", type = "number", description = "Sets the keep alive time for idle threads in the pool", displayName = "Keep Alive Time"), - @YamlProperty(name = "maxPoolSize", type = "number", description = "Sets the maximum pool size", displayName = "Max Pool Size"), - @YamlProperty(name = "maxQueueSize", type = "number", description = "Sets the maximum number of tasks in the work queue. Use -1 or Integer.MAX_VALUE for an unbounded queue", displayName = "Max Queue Size"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "poolSize", type = "number", description = "Sets the core pool size", displayName = "Pool Size"), - @YamlProperty(name = "rejectedPolicy", type = "enum:Abort,CallerRuns", description = "Sets the handler for tasks which cannot be executed by the thread pool.", displayName = "Rejected Policy"), - @YamlProperty(name = "timeUnit", type = "enum:NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS", description = "Sets the time unit to use for keep alive time By default SECONDS is used.", displayName = "Time Unit") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "keepAliveTime", type = "number", description = "Sets the keep alive time for idle threads before they are terminated. Only applies to threads above the core pool size.", displayName = "Keep Alive Time"), + @YamlProperty(name = "maxPoolSize", type = "number", description = "Sets the maximum pool size (the upper bound of threads in the pool).", displayName = "Max Pool Size"), + @YamlProperty(name = "maxQueueSize", type = "number", description = "Sets the maximum number of tasks in the work queue. Use -1 or Integer.MAX_VALUE for an unbounded queue.", displayName = "Max Queue Size"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "poolSize", type = "number", description = "Sets the core pool size (number of threads to keep in the pool, even if idle).", displayName = "Pool Size"), + @YamlProperty(name = "rejectedPolicy", type = "enum:Abort,CallerRuns,Block", description = "Sets the handler for tasks which cannot be executed by the thread pool", displayName = "Rejected Policy"), + @YamlProperty(name = "timeUnit", type = "enum:NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS", description = "Sets the time unit to use for keep alive time. By default SECONDS is used.", displayName = "Time Unit") } ) public static class ThreadPoolProfileDefinitionDeserializer extends YamlDeserializerBase { @@ -17729,23 +17856,23 @@ protected boolean setProperty(ThreadPoolProfileDefinition target, String propert types = org.apache.camel.model.ThreadsDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Threads", - description = "Specifies that all steps after this node are processed asynchronously", + description = "Offloads processing of subsequent steps in the route to a thread pool, enabling asynchronous and concurrent message handling", deprecated = false, properties = { - @YamlProperty(name = "allowCoreThreadTimeOut", type = "boolean", defaultValue = "false", description = "Whether idle core threads are allowed to timeout and therefore can shrink the pool size below the core pool size Is by default false", displayName = "Allow Core Thread Time Out"), - @YamlProperty(name = "callerRunsWhenRejected", type = "boolean", defaultValue = "true", description = "Whether or not to use as caller runs as fallback when a task is rejected being added to the thread pool (when its full). This is only used as fallback if no rejectedPolicy has been configured, or the thread pool has no configured rejection handler. Is by default true", displayName = "Caller Runs When Rejected"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "executorService", type = "string", description = "To use a custom thread pool", displayName = "Executor Service"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "keepAliveTime", type = "number", description = "Sets the keep alive time for idle threads", displayName = "Keep Alive Time"), - @YamlProperty(name = "maxPoolSize", type = "number", description = "Sets the maximum pool size", displayName = "Max Pool Size"), - @YamlProperty(name = "maxQueueSize", type = "number", description = "Sets the maximum number of tasks in the work queue. Use -1 or Integer.MAX_VALUE for an unbounded queue", displayName = "Max Queue Size"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "poolSize", type = "number", description = "Sets the core pool size", displayName = "Pool Size"), - @YamlProperty(name = "rejectedPolicy", type = "enum:Abort,CallerRuns", description = "Sets the handler for tasks which cannot be executed by the thread pool.", displayName = "Rejected Policy"), - @YamlProperty(name = "threadName", type = "string", defaultValue = "Threads", description = "Sets the thread name to use.", displayName = "Thread Name"), - @YamlProperty(name = "timeUnit", type = "enum:NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS", description = "Sets the keep alive time unit. By default SECONDS is used.", displayName = "Time Unit") + @YamlProperty(name = "allowCoreThreadTimeOut", type = "boolean", defaultValue = "false", description = "Whether idle core threads are allowed to timeout and therefore can shrink the pool size below the core pool size", displayName = "Allow Core Thread Time Out"), + @YamlProperty(name = "callerRunsWhenRejected", type = "boolean", defaultValue = "true", description = "Whether to use the caller thread as fallback when a task is rejected being added to the thread pool (when its full). This is only used as fallback if no rejectedPolicy has been configured, or the thread pool has no configured rejection handler.", displayName = "Caller Runs When Rejected"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "executorService", type = "string", description = "To refer to a custom thread pool or use a thread pool profile (as overlay)", displayName = "Executor Service"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "keepAliveTime", type = "number", description = "Sets the keep alive time for idle threads before they are terminated. Only applies to threads above the core pool size.", displayName = "Keep Alive Time"), + @YamlProperty(name = "maxPoolSize", type = "number", description = "Sets the maximum pool size (the upper bound of threads in the pool).", displayName = "Max Pool Size"), + @YamlProperty(name = "maxQueueSize", type = "number", description = "Sets the maximum number of tasks in the work queue. Use -1 or Integer.MAX_VALUE for an unbounded queue.", displayName = "Max Queue Size"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "poolSize", type = "number", description = "Sets the core pool size (number of threads to keep in the pool, even if idle).", displayName = "Pool Size"), + @YamlProperty(name = "rejectedPolicy", type = "enum:Abort,CallerRuns,Block", description = "Sets the handler for tasks which cannot be executed by the thread pool", displayName = "Rejected Policy"), + @YamlProperty(name = "threadName", type = "string", defaultValue = "Threads", description = "Sets the thread name pattern to use for naming threads created by this thread pool.", displayName = "Thread Name"), + @YamlProperty(name = "timeUnit", type = "enum:NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS", description = "Sets the time unit for the keep alive time. By default SECONDS is used.", displayName = "Time Unit") } ) public static class ThreadsDefinitionDeserializer extends YamlDeserializerBase { @@ -17847,13 +17974,13 @@ protected boolean setProperty(ThreadsDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.ThriftDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Thrift", - description = "Serialize and deserialize messages using Apache Thrift binary data format.", + description = "Serialize and deserialize messages using Apache Thrift binary data format", deprecated = false, properties = { - @YamlProperty(name = "contentTypeFormat", type = "enum:binary,json,sjson", defaultValue = "binary", description = "Defines a content type format in which thrift message will be serialized/deserialized from(to) the Java been. The format can either be native or json for either native binary thrift, json or simple json fields representation. The default value is binary.", displayName = "Content Type Format"), + @YamlProperty(name = "contentTypeFormat", type = "enum:binary,json,sjson", defaultValue = "binary", description = "The content type format in which thrift message will be serialized/deserialized. The format can be native binary, json, or simple json.", displayName = "Content Type Format"), @YamlProperty(name = "contentTypeHeader", type = "boolean", defaultValue = "true", description = "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", displayName = "Content Type Header"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "instanceClass", type = "string", description = "Name of class to use when unmarshalling", displayName = "Instance Class") + @YamlProperty(name = "instanceClass", type = "string", description = "Name of class to use when unmarshalling.", displayName = "Instance Class") } ) public static class ThriftDataFormatDeserializer extends YamlDeserializerBase { @@ -17909,22 +18036,22 @@ protected boolean setProperty(ThriftDataFormat target, String propertyKey, types = org.apache.camel.model.ThrottleDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Throttle", - description = "Controls the rate at which messages are passed to the next node in the route", + description = "Limits the message throughput to a maximum number of messages per time period to avoid overloading downstream systems", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), @YamlProperty(name = "asyncDelayed", type = "boolean", defaultValue = "false", description = "Enables asynchronous delay which means the thread will not block while delaying.", displayName = "Async Delayed"), - @YamlProperty(name = "callerRunsWhenRejected", type = "boolean", defaultValue = "true", description = "Whether or not the caller should run the task when it was rejected by the thread pool. Is by default true", displayName = "Caller Runs When Rejected"), - @YamlProperty(name = "correlationExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "The expression used to calculate the correlation key to use for throttle grouping. The Exchange which has the same correlation key is throttled together.", displayName = "Correlation Expression"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "callerRunsWhenRejected", type = "boolean", defaultValue = "true", description = "Whether or not the caller should run the task when it was rejected by the thread pool.", displayName = "Caller Runs When Rejected"), + @YamlProperty(name = "correlationExpression", type = "object:org.apache.camel.model.ExpressionSubElementDefinition", description = "The correlation expression to use for throttle grouping. Exchanges with the same correlation key are throttled together.", displayName = "Correlation Expression"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), @YamlProperty(name = "executorService", type = "string", description = "To use a custom thread pool (ScheduledExecutorService) by the throttler.", displayName = "Executor Service"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to configure the maximum number of messages to throttle per request", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "mode", type = "enum:TotalRequests,ConcurrentRequests", defaultValue = "TotalRequests", description = "Sets the throttling mode to one of the available modes enumerated in ThrottlingMode", displayName = "Mode"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "rejectExecution", type = "boolean", defaultValue = "false", description = "Whether or not throttler throws the ThrottlerRejectedExecutionException when the exchange exceeds the request limit Is by default false", displayName = "Reject Execution"), - @YamlProperty(name = "timePeriodMillis", type = "string", defaultValue = "1000", description = "Sets the time period during which the maximum request count is valid for", displayName = "Time Period Millis") + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression to set the maximum request count (for TotalRequests mode) or the maximum number of concurrent requests (for ConcurrentRequests mode).", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "mode", type = "enum:TotalRequests,ConcurrentRequests", 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.", displayName = "Mode"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "rejectExecution", type = "boolean", defaultValue = "false", description = "Whether or not throttler throws the ThrottlerRejectedExecutionException when the exchange exceeds the request limit.", displayName = "Reject Execution"), + @YamlProperty(name = "timePeriodMillis", type = "string", defaultValue = "1000", description = "Sets the time period during which the maximum request count is valid for.", displayName = "Time Period Millis") } ) public static class ThrottleDefinitionDeserializer extends YamlDeserializerBase { @@ -18024,16 +18151,16 @@ protected boolean setProperty(ThrottleDefinition target, String propertyKey, types = org.apache.camel.model.ThrowExceptionDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Throw Exception", - description = "Throws an exception", + description = "Throws an exception during route processing, either creating a new exception instance or re-throwing an existing one", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "exceptionType", type = "string", description = "The class of the exception to create using the message.", displayName = "Exception Type"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "message", type = "string", description = "To create a new exception instance and use the given message as caused message (supports simple language)", displayName = "Message"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "ref", type = "string", description = "Reference to the exception instance to lookup from the registry to throw", displayName = "Ref") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "exceptionType", type = "string", description = "The fully qualified class name of the exception to throw. Used together with message.", displayName = "Exception Type"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "message", type = "string", description = "The message text for the exception to be thrown. Supports simple language expressions.", displayName = "Message"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "ref", type = "string", description = "Reference to an existing exception instance to lookup from the registry and throw.", displayName = "Ref") } ) public static class ThrowExceptionDefinitionDeserializer extends YamlDeserializerBase { @@ -18100,18 +18227,18 @@ protected boolean setProperty(ThrowExceptionDefinition target, String propertyKe types = org.apache.camel.model.ToDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "To", - description = "Sends the message to a static endpoint", + description = "Sends the message to a fixed endpoint URI", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "parameters", type = "object"), - @YamlProperty(name = "pattern", type = "enum:InOnly,InOut", description = "Sets the optional ExchangePattern used to invoke this endpoint", displayName = "Pattern"), - @YamlProperty(name = "uri", type = "string", required = true, description = "Sets the uri of the endpoint to send to.", displayName = "Uri"), - @YamlProperty(name = "variableReceive", type = "string", 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. Important: When using receive variable then the received body is stored only in this variable and not on the current message.", displayName = "Variable Receive"), - @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Send") + @YamlProperty(name = "pattern", type = "enum:InOnly,InOut", description = "Sets the optional ExchangePattern to use. If not specified the default exchange pattern is used.", displayName = "Pattern"), + @YamlProperty(name = "uri", type = "string", required = true, description = "The uri of the endpoint to send to.", displayName = "Uri"), + @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive"), + @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving.", displayName = "Variable Send") } ) public static class ToDefinitionDeserializer extends YamlDeserializerEndpointAwareBase { @@ -18194,22 +18321,22 @@ protected boolean setProperty(ToDefinition target, String propertyKey, String pr types = org.apache.camel.model.ToDynamicDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "To D", - description = "Sends the message to a dynamic endpoint", + description = "Sends the message to an endpoint URI computed dynamically from an expression, allowing the destination to vary per message", deprecated = false, properties = { - @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise toD if they are org.apache.camel.spi.SendDynamicAware .", displayName = "Allow Optimised Components"), + @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise toD if they are SendDynamicAware.", displayName = "Allow Optimised Components"), @YamlProperty(name = "autoStartComponents", type = "boolean", defaultValue = "true", description = "Whether to auto startup components when toD is starting up.", displayName = "Auto Start Components"), - @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise producers/endpoints are stored in memory in the caches. However if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both producers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non frequent used producers.", displayName = "Cache Size"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the ProducerCache which is used to cache and reuse producers when uris are reused. Use 0 for default cache size, or -1 to turn cache off.", displayName = "Cache Size"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "ignoreInvalidEndpoint", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid endpoint URIs and skip sending the message.", displayName = "Ignore Invalid Endpoint"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "parameters", type = "object"), - @YamlProperty(name = "pattern", type = "enum:InOnly,InOut", description = "Sets the optional ExchangePattern used to invoke this endpoint", displayName = "Pattern"), - @YamlProperty(name = "uri", type = "string", required = true, description = "The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression.", displayName = "Uri"), - @YamlProperty(name = "variableReceive", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Receive"), - @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Send") + @YamlProperty(name = "pattern", type = "enum:InOnly,InOut", description = "Sets the optional ExchangePattern used to invoke this endpoint.", displayName = "Pattern"), + @YamlProperty(name = "uri", type = "string", required = true, description = "The uri of the endpoint to send to. The uri can be dynamic computed using the simple language.", displayName = "Uri"), + @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive"), + @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving.", displayName = "Variable Send") } ) public static class ToDynamicDefinitionDeserializer extends YamlDeserializerEndpointAwareBase { @@ -18311,18 +18438,18 @@ protected boolean setProperty(ToDynamicDefinition target, String propertyKey, types = org.apache.camel.model.TokenizerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Specialized tokenizer for AI applications", - description = "Represents a Camel tokenizer for AI.", + description = "Tokenizes the message body for AI processing, splitting text into chunks suitable for embedding or LLM input", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "langChain4jCharacterTokenizer", type = "object:org.apache.camel.model.tokenizer.LangChain4jCharacterTokenizerDefinition", oneOf = "tokenizerImplementation"), @YamlProperty(name = "langChain4jLineTokenizer", type = "object:org.apache.camel.model.tokenizer.LangChain4jLineTokenizerDefinition", oneOf = "tokenizerImplementation"), @YamlProperty(name = "langChain4jParagraphTokenizer", type = "object:org.apache.camel.model.tokenizer.LangChain4jParagraphTokenizerDefinition", oneOf = "tokenizerImplementation"), @YamlProperty(name = "langChain4jSentenceTokenizer", type = "object:org.apache.camel.model.tokenizer.LangChain4jSentenceTokenizerDefinition", oneOf = "tokenizerImplementation"), @YamlProperty(name = "langChain4jWordTokenizer", type = "object:org.apache.camel.model.tokenizer.LangChain4jWordTokenizerDefinition", oneOf = "tokenizerImplementation"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class TokenizerDefinitionDeserializer extends YamlDeserializerBase { @@ -18404,21 +18531,21 @@ protected boolean setProperty(TokenizerDefinition target, String propertyKey, types = org.apache.camel.model.language.TokenizerExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Tokenize", - description = "Tokenize text payloads using delimiter patterns.", + description = "Tokenize text payloads using delimiter patterns", deprecated = false, properties = { @YamlProperty(name = "endToken", type = "string", description = "The end token to use as tokenizer if using start/end token pairs. You can use simple language as the token to support dynamic tokens.", displayName = "End Token"), @YamlProperty(name = "group", type = "string", description = "To group N parts together, for example to split big files into chunks of 1000 lines. You can use simple language as the group to support dynamic group sizes.", displayName = "Group"), @YamlProperty(name = "groupDelimiter", type = "string", description = "Sets the delimiter to use when grouping. If this has not been set then token will be used as the delimiter.", displayName = "Group Delimiter"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "includeTokens", type = "boolean", defaultValue = "false", description = "Whether to include the tokens in the parts when using pairs. When including tokens then the endToken property must also be configured (to use pair mode). The default value is false", displayName = "Include Tokens"), - @YamlProperty(name = "inheritNamespaceTagName", type = "string", description = "To inherit namespaces from a root/parent tag name when using XML You can use simple language as the tag name to support dynamic names.", displayName = "Inherit Namespace Tag Name"), - @YamlProperty(name = "regex", type = "boolean", defaultValue = "false", description = "If the token is a regular expression pattern. The default value is false", displayName = "Regex"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), - @YamlProperty(name = "skipFirst", type = "boolean", defaultValue = "false", description = "To skip the very first element", displayName = "Skip First"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "includeTokens", type = "boolean", defaultValue = "false", description = "Whether to include the tokens in the parts when using pairs. When including tokens then the endToken property must also be configured (to use pair mode).", displayName = "Include Tokens"), + @YamlProperty(name = "inheritNamespaceTagName", type = "string", description = "To inherit namespaces from a root/parent tag name when using XML. You can use simple language as the tag name to support dynamic names.", displayName = "Inherit Namespace Tag Name"), + @YamlProperty(name = "regex", type = "boolean", defaultValue = "false", description = "If the token is a regular expression pattern.", displayName = "Regex"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "skipFirst", type = "boolean", defaultValue = "false", description = "To skip the very first element.", displayName = "Skip First"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), @YamlProperty(name = "token", type = "string", required = true, description = "The (start) token to use as tokenizer, for example you can use the new line token. You can use simple language as the token to support dynamic tokens.", displayName = "Token"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim"), @YamlProperty(name = "xml", type = "boolean", defaultValue = "false", description = "Whether the input is XML messages. This option must be set to true if working with XML payloads.", displayName = "Xml") } ) @@ -18562,7 +18689,7 @@ protected boolean setProperty(TokenizerImplementationDefinition target, String p types = org.apache.camel.model.loadbalancer.TopicLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Topic Load Balancer", - description = "Topic which sends to all destinations.", + description = "Load balancer that sends every message to all destination endpoints, similar to a publish-subscribe pattern", deprecated = false, properties = @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") ) @@ -18599,14 +18726,14 @@ protected boolean setProperty(TopicLoadBalancerDefinition target, String propert types = org.apache.camel.model.TransactedDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Transacted", - description = "Enables transaction on the route", + description = "Wraps the route in a transaction, ensuring that all steps within the transacted block either complete together or roll back on failure", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "ref", type = "string", description = "Sets a reference to use for lookup the policy in the registry.", displayName = "Ref"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "ref", type = "string", description = "Reference to lookup a transacted policy in the registry.", displayName = "Ref"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -18667,15 +18794,15 @@ protected boolean setProperty(TransactedDefinition target, String propertyKey, types = org.apache.camel.model.TransformDataTypeDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Transform Data Type", - description = "Transforms the message body based on known data type transformers.", + description = "Transforms the message body between known data types (such as XML, JSON, Java objects) using registered data type transformers", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "fromType", type = "string", description = "From type used in data type transformation.", displayName = "From Type"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "toType", type = "string", required = true, description = "To type used as a target data type in the transformation.", displayName = "To Type") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "fromType", type = "string", description = "The source data type URN in the format 'scheme:name' (e.g. 'java:com.example.MyClass'). If not specified, the current message body type is used.", displayName = "From Type"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "toType", type = "string", required = true, description = "The target data type URN in the format 'scheme:name' (e.g. 'json:JsonOrder') that the message body should be transformed into.", displayName = "To Type") } ) public static class TransformDataTypeDefinitionDeserializer extends YamlDeserializerBase { @@ -18736,15 +18863,15 @@ protected boolean setProperty(TransformDataTypeDefinition target, String propert types = org.apache.camel.model.TransformDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Transform", - description = "Transforms the message body based on an expression", + description = "Sets the message body using an expression. Unlike setBody, transform also sets the OUT message body in InOut exchanges", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to return the transformed message body (the new message body to use)", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The expression whose result replaces the message body.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note") } ) public static class TransformDefinitionDeserializer extends YamlDeserializerBase { @@ -18810,7 +18937,7 @@ protected boolean setProperty(TransformDefinition target, String propertyKey, types = org.apache.camel.model.transformer.TransformersDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Transformations", - description = "To configure transformers.", + description = "Container for defining data type transformer definitions", deprecated = false, properties = { @YamlProperty(name = "customTransformer", type = "object:org.apache.camel.model.transformer.CustomTransformerDefinition"), @@ -18892,15 +19019,15 @@ protected boolean setProperty(TransformersDefinition target, String propertyKey, types = org.apache.camel.model.TryDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Do Try", - description = "Marks the beginning of a try, catch, finally block", + description = "Wraps route steps in a try-catch-finally block for fine-grained exception handling within the route", deprecated = false, properties = { - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), @YamlProperty(name = "doCatch", type = "array:org.apache.camel.model.CatchDefinition", description = "Catches exceptions as part of a try, catch, finally block", displayName = "Do Catch"), @YamlProperty(name = "doFinally", type = "object:org.apache.camel.model.FinallyDefinition", description = "Path traversed when a try, catch, finally block exits", displayName = "Do Finally"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -18966,27 +19093,27 @@ protected boolean setProperty(TryDefinition target, String propertyKey, String p types = org.apache.camel.model.dataformat.UniVocityCsvDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "uniVocity CSV", - description = "Marshal and unmarshal Java objects from and to CSV (Comma Separated Values) using UniVocity Parsers.", + description = "Marshal and unmarshal Java objects from and to CSV (Comma Separated Values) using UniVocity Parsers", deprecated = false, properties = { - @YamlProperty(name = "asMap", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected). The default value is false", displayName = "As Map"), - @YamlProperty(name = "comment", type = "string", defaultValue = "#", description = "The comment symbol. The default value is #", displayName = "Comment"), - @YamlProperty(name = "delimiter", type = "string", defaultValue = ",", description = "The delimiter of values", displayName = "Delimiter"), + @YamlProperty(name = "asMap", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected).", displayName = "As Map"), + @YamlProperty(name = "comment", type = "string", defaultValue = "#", description = "The comment symbol.", displayName = "Comment"), + @YamlProperty(name = "delimiter", type = "string", defaultValue = ",", description = "The delimiter of values.", displayName = "Delimiter"), @YamlProperty(name = "emptyValue", type = "string", description = "The String representation of an empty value.", displayName = "Empty Value"), - @YamlProperty(name = "headerExtractionEnabled", type = "boolean", defaultValue = "false", description = "Whether or not the header must be read in the first line of the test document. The default value is false", displayName = "Header Extraction Enabled"), - @YamlProperty(name = "headersDisabled", type = "boolean", defaultValue = "false", description = "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header. The default value is false", displayName = "Headers Disabled"), + @YamlProperty(name = "headerExtractionEnabled", type = "boolean", defaultValue = "false", description = "Whether or not the header must be read in the first line of the test document.", displayName = "Header Extraction Enabled"), + @YamlProperty(name = "headersDisabled", type = "boolean", defaultValue = "false", description = "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header.", displayName = "Headers Disabled"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreLeadingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the leading white spaces must be ignored. The default value is true", displayName = "Ignore Leading Whitespaces"), - @YamlProperty(name = "ignoreTrailingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the trailing white spaces must be ignored. The default value is true", displayName = "Ignore Trailing Whitespaces"), - @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once. The default value is false", displayName = "Lazy Load"), - @YamlProperty(name = "lineSeparator", type = "string", description = "The line separator of the files. The default value is to use the JVM platform line separator", displayName = "Line Separator"), + @YamlProperty(name = "ignoreLeadingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the leading white spaces must be ignored.", displayName = "Ignore Leading Whitespaces"), + @YamlProperty(name = "ignoreTrailingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the trailing white spaces must be ignored.", displayName = "Ignore Trailing Whitespaces"), + @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once.", displayName = "Lazy Load"), + @YamlProperty(name = "lineSeparator", type = "string", description = "The line separator of the files. The default value is to use the JVM platform line separator.", displayName = "Line Separator"), @YamlProperty(name = "normalizedLineSeparator", type = "string", description = "The normalized line separator of the files. The default value is a new line character.", displayName = "Normalized Line Separator"), - @YamlProperty(name = "nullValue", type = "string", description = "The string representation of a null value. The default value is null", displayName = "Null Value"), + @YamlProperty(name = "nullValue", type = "string", description = "The string representation of a null value.", displayName = "Null Value"), @YamlProperty(name = "numberOfRecordsToRead", type = "number", description = "The maximum number of record to read.", displayName = "Number Of Records To Read"), @YamlProperty(name = "quote", type = "string", defaultValue = "\"", description = "The quote symbol.", displayName = "Quote"), @YamlProperty(name = "quoteAllFields", type = "boolean", defaultValue = "false", description = "Whether or not all values must be quoted when writing them.", displayName = "Quote All Fields"), - @YamlProperty(name = "quoteEscape", type = "string", defaultValue = "\"", description = "The quote escape symbol", displayName = "Quote Escape"), - @YamlProperty(name = "skipEmptyLines", type = "boolean", defaultValue = "true", description = "Whether or not the empty lines must be ignored. The default value is true", displayName = "Skip Empty Lines"), + @YamlProperty(name = "quoteEscape", type = "string", defaultValue = "\"", description = "The quote escape symbol.", displayName = "Quote Escape"), + @YamlProperty(name = "skipEmptyLines", type = "boolean", defaultValue = "true", description = "Whether or not the empty lines must be ignored.", displayName = "Skip Empty Lines"), @YamlProperty(name = "univocityHeader", type = "array:org.apache.camel.model.dataformat.UniVocityHeader") } ) @@ -19113,26 +19240,26 @@ protected boolean setProperty(UniVocityCsvDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.UniVocityFixedDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "uniVocity Fixed Length", - description = "Marshal and unmarshal Java objects from and to fixed length records using UniVocity Parsers.", + description = "Marshal and unmarshal Java objects from and to fixed length records using UniVocity Parsers", deprecated = false, properties = { - @YamlProperty(name = "asMap", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected). The default value is false", displayName = "As Map"), - @YamlProperty(name = "comment", type = "string", defaultValue = "#", description = "The comment symbol. The default value is #", displayName = "Comment"), + @YamlProperty(name = "asMap", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected).", displayName = "As Map"), + @YamlProperty(name = "comment", type = "string", defaultValue = "#", description = "The comment symbol.", displayName = "Comment"), @YamlProperty(name = "emptyValue", type = "string", description = "The String representation of an empty value.", displayName = "Empty Value"), - @YamlProperty(name = "headerExtractionEnabled", type = "boolean", defaultValue = "false", description = "Whether or not the header must be read in the first line of the test document. The default value is false", displayName = "Header Extraction Enabled"), - @YamlProperty(name = "headersDisabled", type = "boolean", defaultValue = "false", description = "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header. The default value is false", displayName = "Headers Disabled"), + @YamlProperty(name = "headerExtractionEnabled", type = "boolean", defaultValue = "false", description = "Whether or not the header must be read in the first line of the test document.", displayName = "Header Extraction Enabled"), + @YamlProperty(name = "headersDisabled", type = "boolean", defaultValue = "false", description = "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header.", displayName = "Headers Disabled"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreLeadingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the leading white spaces must be ignored. The default value is true", displayName = "Ignore Leading Whitespaces"), - @YamlProperty(name = "ignoreTrailingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the trailing white spaces must be ignored. The default value is true", displayName = "Ignore Trailing Whitespaces"), - @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once. The default value is false", displayName = "Lazy Load"), - @YamlProperty(name = "lineSeparator", type = "string", description = "The line separator of the files. The default value is to use the JVM platform line separator", displayName = "Line Separator"), + @YamlProperty(name = "ignoreLeadingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the leading white spaces must be ignored.", displayName = "Ignore Leading Whitespaces"), + @YamlProperty(name = "ignoreTrailingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the trailing white spaces must be ignored.", displayName = "Ignore Trailing Whitespaces"), + @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once.", displayName = "Lazy Load"), + @YamlProperty(name = "lineSeparator", type = "string", description = "The line separator of the files. The default value is to use the JVM platform line separator.", displayName = "Line Separator"), @YamlProperty(name = "normalizedLineSeparator", type = "string", description = "The normalized line separator of the files. The default value is a new line character.", displayName = "Normalized Line Separator"), - @YamlProperty(name = "nullValue", type = "string", description = "The string representation of a null value. The default value is null", displayName = "Null Value"), + @YamlProperty(name = "nullValue", type = "string", description = "The string representation of a null value.", displayName = "Null Value"), @YamlProperty(name = "numberOfRecordsToRead", type = "number", description = "The maximum number of record to read.", displayName = "Number Of Records To Read"), - @YamlProperty(name = "padding", type = "string", description = "The padding character. The default value is a space", displayName = "Padding"), - @YamlProperty(name = "recordEndsOnNewline", type = "boolean", defaultValue = "false", description = "Whether or not the record ends on new line. The default value is false", displayName = "Record Ends On Newline"), - @YamlProperty(name = "skipEmptyLines", type = "boolean", defaultValue = "true", description = "Whether or not the empty lines must be ignored. The default value is true", displayName = "Skip Empty Lines"), - @YamlProperty(name = "skipTrailingCharsUntilNewline", type = "boolean", defaultValue = "false", description = "Whether or not the trailing characters until new line must be ignored. The default value is false", displayName = "Skip Trailing Chars Until Newline"), + @YamlProperty(name = "padding", type = "string", description = "The padding character. The default value is a space.", displayName = "Padding"), + @YamlProperty(name = "recordEndsOnNewline", type = "boolean", defaultValue = "false", description = "Whether the record ends on a new line.", displayName = "Record Ends On Newline"), + @YamlProperty(name = "skipEmptyLines", type = "boolean", defaultValue = "true", description = "Whether or not the empty lines must be ignored.", displayName = "Skip Empty Lines"), + @YamlProperty(name = "skipTrailingCharsUntilNewline", type = "boolean", defaultValue = "false", description = "Whether to skip trailing characters until a new line is found.", displayName = "Skip Trailing Chars Until Newline"), @YamlProperty(name = "univocityHeader", type = "array:org.apache.camel.model.dataformat.UniVocityHeader") } ) @@ -19254,11 +19381,11 @@ protected boolean setProperty(UniVocityFixedDataFormat target, String propertyKe types = org.apache.camel.model.dataformat.UniVocityHeader.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "uniVocity Header", - description = "To configure headers for UniVocity data formats.", + description = "Defines a column header for UniVocity data format configuration", deprecated = false, properties = { - @YamlProperty(name = "length", type = "string", description = "Header length", displayName = "Length"), - @YamlProperty(name = "name", type = "string", description = "Header name", displayName = "Name") + @YamlProperty(name = "length", type = "string", description = "Header length.", displayName = "Length"), + @YamlProperty(name = "name", type = "string", displayName = "Name") } ) public static class UniVocityHeaderDeserializer extends YamlDeserializerBase { @@ -19299,24 +19426,24 @@ protected boolean setProperty(UniVocityHeader target, String propertyKey, types = org.apache.camel.model.dataformat.UniVocityTsvDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "uniVocity TSV", - description = "Marshal and unmarshal Java objects from and to TSV (Tab-Separated Values) records using UniVocity Parsers.", + description = "Marshal and unmarshal Java objects from and to TSV (Tab-Separated Values) records using UniVocity Parsers", deprecated = false, properties = { - @YamlProperty(name = "asMap", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected). The default value is false", displayName = "As Map"), - @YamlProperty(name = "comment", type = "string", defaultValue = "#", description = "The comment symbol. The default value is #", displayName = "Comment"), + @YamlProperty(name = "asMap", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected).", displayName = "As Map"), + @YamlProperty(name = "comment", type = "string", defaultValue = "#", description = "The comment symbol.", displayName = "Comment"), @YamlProperty(name = "emptyValue", type = "string", description = "The String representation of an empty value.", displayName = "Empty Value"), @YamlProperty(name = "escapeChar", type = "string", defaultValue = "\\", description = "The escape character.", displayName = "Escape Char"), - @YamlProperty(name = "headerExtractionEnabled", type = "boolean", defaultValue = "false", description = "Whether or not the header must be read in the first line of the test document. The default value is false", displayName = "Header Extraction Enabled"), - @YamlProperty(name = "headersDisabled", type = "boolean", defaultValue = "false", description = "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header. The default value is false", displayName = "Headers Disabled"), + @YamlProperty(name = "headerExtractionEnabled", type = "boolean", defaultValue = "false", description = "Whether or not the header must be read in the first line of the test document.", displayName = "Header Extraction Enabled"), + @YamlProperty(name = "headersDisabled", type = "boolean", defaultValue = "false", description = "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header.", displayName = "Headers Disabled"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "ignoreLeadingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the leading white spaces must be ignored. The default value is true", displayName = "Ignore Leading Whitespaces"), - @YamlProperty(name = "ignoreTrailingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the trailing white spaces must be ignored. The default value is true", displayName = "Ignore Trailing Whitespaces"), - @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once. The default value is false", displayName = "Lazy Load"), - @YamlProperty(name = "lineSeparator", type = "string", description = "The line separator of the files. The default value is to use the JVM platform line separator", displayName = "Line Separator"), + @YamlProperty(name = "ignoreLeadingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the leading white spaces must be ignored.", displayName = "Ignore Leading Whitespaces"), + @YamlProperty(name = "ignoreTrailingWhitespaces", type = "boolean", defaultValue = "true", description = "Whether or not the trailing white spaces must be ignored.", displayName = "Ignore Trailing Whitespaces"), + @YamlProperty(name = "lazyLoad", type = "boolean", defaultValue = "false", description = "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once.", displayName = "Lazy Load"), + @YamlProperty(name = "lineSeparator", type = "string", description = "The line separator of the files. The default value is to use the JVM platform line separator.", displayName = "Line Separator"), @YamlProperty(name = "normalizedLineSeparator", type = "string", description = "The normalized line separator of the files. The default value is a new line character.", displayName = "Normalized Line Separator"), - @YamlProperty(name = "nullValue", type = "string", description = "The string representation of a null value. The default value is null", displayName = "Null Value"), + @YamlProperty(name = "nullValue", type = "string", description = "The string representation of a null value.", displayName = "Null Value"), @YamlProperty(name = "numberOfRecordsToRead", type = "number", description = "The maximum number of record to read.", displayName = "Number Of Records To Read"), - @YamlProperty(name = "skipEmptyLines", type = "boolean", defaultValue = "true", description = "Whether or not the empty lines must be ignored. The default value is true", displayName = "Skip Empty Lines"), + @YamlProperty(name = "skipEmptyLines", type = "boolean", defaultValue = "true", description = "Whether or not the empty lines must be ignored.", displayName = "Skip Empty Lines"), @YamlProperty(name = "univocityHeader", type = "array:org.apache.camel.model.dataformat.UniVocityHeader") } ) @@ -19428,64 +19555,64 @@ protected boolean setProperty(UniVocityTsvDataFormat target, String propertyKey, types = org.apache.camel.model.UnmarshalDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Unmarshal", - description = "Converts the message data received from the wire into a format that Apache Camel processors can consume", + description = "Deserializes the message body from a specific data format such as JSON, XML, CSV, or Protobuf into a Java object", deprecated = false, properties = { @YamlProperty(name = "allowNullBody", type = "boolean", defaultValue = "false", description = "Indicates whether null is allowed as value of a body to unmarshall.", displayName = "Allow Null Body"), - @YamlProperty(name = "asn1", type = "object:org.apache.camel.model.dataformat.ASN1DataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "avro", type = "object:org.apache.camel.model.dataformat.AvroDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "barcode", type = "object:org.apache.camel.model.dataformat.BarcodeDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "base64", type = "object:org.apache.camel.model.dataformat.Base64DataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "beanio", type = "object:org.apache.camel.model.dataformat.BeanioDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "bindy", type = "object:org.apache.camel.model.dataformat.BindyDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "cbor", type = "object:org.apache.camel.model.dataformat.CBORDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "crypto", type = "object:org.apache.camel.model.dataformat.CryptoDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "csv", type = "object:org.apache.camel.model.dataformat.CsvDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "custom", type = "object:org.apache.camel.model.dataformat.CustomDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "dfdl", type = "object:org.apache.camel.model.dataformat.DfdlDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "fhirJson", type = "object:org.apache.camel.model.dataformat.FhirJsonDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "fhirXml", type = "object:org.apache.camel.model.dataformat.FhirXmlDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "flatpack", type = "object:org.apache.camel.model.dataformat.FlatpackDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "fory", type = "object:org.apache.camel.model.dataformat.ForyDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "grok", type = "object:org.apache.camel.model.dataformat.GrokDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "groovyJson", type = "object:org.apache.camel.model.dataformat.GroovyJSonDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "groovyXml", type = "object:org.apache.camel.model.dataformat.GroovyXmlDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "gzipDeflater", type = "object:org.apache.camel.model.dataformat.GzipDeflaterDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "hl7", type = "object:org.apache.camel.model.dataformat.HL7DataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "ical", type = "object:org.apache.camel.model.dataformat.IcalDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "iso8583", type = "object:org.apache.camel.model.dataformat.Iso8583DataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "jacksonXml", type = "object:org.apache.camel.model.dataformat.JacksonXMLDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "jaxb", type = "object:org.apache.camel.model.dataformat.JaxbDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "json", type = "object:org.apache.camel.model.dataformat.JsonDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "jsonApi", type = "object:org.apache.camel.model.dataformat.JsonApiDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "lzf", type = "object:org.apache.camel.model.dataformat.LZFDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "mimeMultipart", type = "object:org.apache.camel.model.dataformat.MimeMultipartDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "ocsf", type = "object:org.apache.camel.model.dataformat.OcsfDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "parquetAvro", type = "object:org.apache.camel.model.dataformat.ParquetAvroDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "pgp", type = "object:org.apache.camel.model.dataformat.PGPDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "pqc", type = "object:org.apache.camel.model.dataformat.PQCDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "protobuf", type = "object:org.apache.camel.model.dataformat.ProtobufDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "rss", type = "object:org.apache.camel.model.dataformat.RssDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "smooks", type = "object:org.apache.camel.model.dataformat.SmooksDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "soap", type = "object:org.apache.camel.model.dataformat.SoapDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "swiftMt", type = "object:org.apache.camel.model.dataformat.SwiftMtDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "swiftMx", type = "object:org.apache.camel.model.dataformat.SwiftMxDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "syslog", type = "object:org.apache.camel.model.dataformat.SyslogDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "tarFile", type = "object:org.apache.camel.model.dataformat.TarFileDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "thrift", type = "object:org.apache.camel.model.dataformat.ThriftDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "univocityCsv", type = "object:org.apache.camel.model.dataformat.UniVocityCsvDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "univocityFixed", type = "object:org.apache.camel.model.dataformat.UniVocityFixedDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "univocityTsv", type = "object:org.apache.camel.model.dataformat.UniVocityTsvDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "variableReceive", type = "string", 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. Important: When using receive variable then the received body is stored only in this variable and not on the current message.", displayName = "Variable Receive"), - @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Send"), - @YamlProperty(name = "xmlSecurity", type = "object:org.apache.camel.model.dataformat.XMLSecurityDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "yaml", type = "object:org.apache.camel.model.dataformat.YAMLDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "zipDeflater", type = "object:org.apache.camel.model.dataformat.ZipDeflaterDataFormat", oneOf = "dataFormatType"), - @YamlProperty(name = "zipFile", type = "object:org.apache.camel.model.dataformat.ZipFileDataFormat", oneOf = "dataFormatType") + @YamlProperty(name = "asn1", type = "object:org.apache.camel.model.dataformat.ASN1DataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "avro", type = "object:org.apache.camel.model.dataformat.AvroDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "barcode", type = "object:org.apache.camel.model.dataformat.BarcodeDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "base64", type = "object:org.apache.camel.model.dataformat.Base64DataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "beanio", type = "object:org.apache.camel.model.dataformat.BeanioDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "bindy", type = "object:org.apache.camel.model.dataformat.BindyDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "cbor", type = "object:org.apache.camel.model.dataformat.CBORDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "crypto", type = "object:org.apache.camel.model.dataformat.CryptoDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "csv", type = "object:org.apache.camel.model.dataformat.CsvDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "custom", type = "object:org.apache.camel.model.dataformat.CustomDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "dfdl", type = "object:org.apache.camel.model.dataformat.DfdlDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "fhirJson", type = "object:org.apache.camel.model.dataformat.FhirJsonDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "fhirXml", type = "object:org.apache.camel.model.dataformat.FhirXmlDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "flatpack", type = "object:org.apache.camel.model.dataformat.FlatpackDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "fory", type = "object:org.apache.camel.model.dataformat.ForyDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "grok", type = "object:org.apache.camel.model.dataformat.GrokDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "groovyJson", type = "object:org.apache.camel.model.dataformat.GroovyJSonDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "groovyXml", type = "object:org.apache.camel.model.dataformat.GroovyXmlDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "gzipDeflater", type = "object:org.apache.camel.model.dataformat.GzipDeflaterDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "hl7", type = "object:org.apache.camel.model.dataformat.HL7DataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "ical", type = "object:org.apache.camel.model.dataformat.IcalDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "iso8583", type = "object:org.apache.camel.model.dataformat.Iso8583DataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "jacksonXml", type = "object:org.apache.camel.model.dataformat.JacksonXMLDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "jaxb", type = "object:org.apache.camel.model.dataformat.JaxbDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "json", type = "object:org.apache.camel.model.dataformat.JsonDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "jsonApi", type = "object:org.apache.camel.model.dataformat.JsonApiDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "lzf", type = "object:org.apache.camel.model.dataformat.LZFDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "mimeMultipart", type = "object:org.apache.camel.model.dataformat.MimeMultipartDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "ocsf", type = "object:org.apache.camel.model.dataformat.OcsfDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "parquetAvro", type = "object:org.apache.camel.model.dataformat.ParquetAvroDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "pgp", type = "object:org.apache.camel.model.dataformat.PGPDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "pqc", type = "object:org.apache.camel.model.dataformat.PQCDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "protobuf", type = "object:org.apache.camel.model.dataformat.ProtobufDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "rss", type = "object:org.apache.camel.model.dataformat.RssDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "smooks", type = "object:org.apache.camel.model.dataformat.SmooksDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "soap", type = "object:org.apache.camel.model.dataformat.SoapDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "swiftMt", type = "object:org.apache.camel.model.dataformat.SwiftMtDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "swiftMx", type = "object:org.apache.camel.model.dataformat.SwiftMxDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "syslog", type = "object:org.apache.camel.model.dataformat.SyslogDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "tarFile", type = "object:org.apache.camel.model.dataformat.TarFileDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "thrift", type = "object:org.apache.camel.model.dataformat.ThriftDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "univocityCsv", type = "object:org.apache.camel.model.dataformat.UniVocityCsvDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "univocityFixed", type = "object:org.apache.camel.model.dataformat.UniVocityFixedDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "univocityTsv", type = "object:org.apache.camel.model.dataformat.UniVocityTsvDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive"), + @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving.", displayName = "Variable Send"), + @YamlProperty(name = "xmlSecurity", type = "object:org.apache.camel.model.dataformat.XMLSecurityDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "yaml", type = "object:org.apache.camel.model.dataformat.YAMLDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "zipDeflater", type = "object:org.apache.camel.model.dataformat.ZipDeflaterDataFormat", required = true, oneOf = "dataFormatType"), + @YamlProperty(name = "zipFile", type = "object:org.apache.camel.model.dataformat.ZipFileDataFormat", required = true, oneOf = "dataFormatType") } ) public static class UnmarshalDefinitionDeserializer extends YamlDeserializerBase { @@ -19663,6 +19790,16 @@ protected boolean setProperty(UnmarshalDefinition target, String propertyKey, target.setDataFormatType(val); break; } + case "pgp": { + org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); + target.setDataFormatType(val); + break; + } + case "pqc": { + org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); + target.setDataFormatType(val); + break; + } case "protobuf": { org.apache.camel.model.dataformat.ProtobufDataFormat val = asType(node, org.apache.camel.model.dataformat.ProtobufDataFormat.class); target.setDataFormatType(val); @@ -19728,16 +19865,6 @@ protected boolean setProperty(UnmarshalDefinition target, String propertyKey, target.setDataFormatType(val); break; } - case "pgp": { - org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); - target.setDataFormatType(val); - break; - } - case "pqc": { - org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); - target.setDataFormatType(val); - break; - } case "yaml": { org.apache.camel.model.dataformat.YAMLDataFormat val = asType(node, org.apache.camel.model.dataformat.YAMLDataFormat.class); target.setDataFormatType(val); @@ -19796,16 +19923,16 @@ protected boolean setProperty(UnmarshalDefinition target, String propertyKey, types = org.apache.camel.model.ValidateDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Validate", - description = "Validates a message based on an expression", + description = "Validates the message against a predicate expression and throws a PredicateValidationException if the validation fails", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression to use for validation as a predicate. The expression should return either true or false. If returning false the message is invalid and an exception is thrown.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "predicateExceptionFactory", type = "string", description = "The bean id of custom PredicateExceptionFactory to use for creating the exception when the validation fails. By default, Camel will throw PredicateValidationException. By using a custom factory you can control which exception to throw instead.", displayName = "Predicate Exception Factory") + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "The predicate expression to validate against the current message. If the predicate returns false, a PredicateValidationException is thrown.", displayName = "Expression", oneOf = "expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "predicateExceptionFactory", type = "string", description = "Reference to a custom PredicateExceptionFactory for creating the exception when validation fails.", displayName = "Predicate Exception Factory") } ) public static class ValidateDefinitionDeserializer extends YamlDeserializerBase { @@ -19876,7 +20003,7 @@ protected boolean setProperty(ValidateDefinition target, String propertyKey, types = org.apache.camel.model.validator.ValidatorsDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Validations", - description = "To configure validators.", + description = "Container for defining data type validator definitions", deprecated = false, properties = { @YamlProperty(name = "customValidator", type = "object:org.apache.camel.model.validator.CustomValidatorDefinition"), @@ -19948,9 +20075,9 @@ protected boolean setProperty(ValidatorsDefinition target, String propertyKey, types = org.apache.camel.model.ValueDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Value", - description = "A single value", + description = "Holds a single value, typically used as a child element in collection-based configurations", deprecated = false, - properties = @YamlProperty(name = "value", type = "string", description = "Property value", displayName = "Value") + properties = @YamlProperty(name = "value", type = "string", description = "The value.", displayName = "Value") ) public static class ValueDefinitionDeserializer extends YamlDeserializerBase { public ValueDefinitionDeserializer() { @@ -19994,9 +20121,9 @@ protected boolean setProperty(ValueDefinition target, String propertyKey, description = "Gets a variable", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class VariableExpressionDeserializer extends YamlDeserializerBase { @@ -20057,14 +20184,14 @@ protected boolean setProperty(VariableExpression target, String propertyKey, types = org.apache.camel.model.language.WasmExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Wasm", - description = "Call a wasm (web assembly) function.", + description = "Call a wasm (web assembly) function", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), @YamlProperty(name = "module", type = "string", required = true, description = "Set the module (the distributable, loadable, and executable unit of code in WebAssembly) resource that provides the expression function.", displayName = "Module"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class WasmExpressionDeserializer extends YamlDeserializerBase { @@ -20134,13 +20261,13 @@ protected boolean setProperty(WasmExpression target, String propertyKey, types = org.apache.camel.model.loadbalancer.WeightedLoadBalancerDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Weighted Load Balancer", - description = "Uses a weighted load distribution ratio for each server with respect to others.", + description = "Load balancer that distributes messages across endpoints according to configured weight ratios", deprecated = false, properties = { - @YamlProperty(name = "distributionRatio", type = "string", required = true, description = "The distribution ratio is a delimited String consisting on integer weights separated by delimiters for example 2,3,5. The distributionRatio must match the number of endpoints and/or processors specified in the load balancer list.", displayName = "Distribution Ratio"), - @YamlProperty(name = "distributionRatioDelimiter", type = "string", defaultValue = ",", description = "Delimiter used to specify the distribution ratio. The default value is , (comma)", displayName = "Distribution Ratio Delimiter"), + @YamlProperty(name = "distributionRatio", type = "string", required = true, description = "The distribution ratio is a delimited String consisting of integer weights separated by delimiters for example 2,3,5. The distributionRatio must match the number of endpoints and/or processors specified in the load balancer list.", displayName = "Distribution Ratio"), + @YamlProperty(name = "distributionRatioDelimiter", type = "string", defaultValue = ",", description = "Delimiter used to specify the distribution ratio. The default value is comma.", displayName = "Distribution Ratio Delimiter"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "roundRobin", type = "boolean", defaultValue = "false", description = "To enable round robin mode. By default the weighted distribution mode is used. The default value is false.", displayName = "Round Robin") + @YamlProperty(name = "roundRobin", type = "boolean", defaultValue = "false", description = "Whether to enable round robin mode. By default the weighted distribution mode is used.", displayName = "Round Robin") } ) public static class WeightedLoadBalancerDefinitionDeserializer extends YamlDeserializerBase { @@ -20191,15 +20318,15 @@ protected boolean setProperty(WeightedLoadBalancerDefinition target, String prop types = org.apache.camel.model.WhenDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "When", - description = "Triggers a route when the expression evaluates to true", + description = "Defines a conditional branch within a Choice EIP that executes when its predicate evaluates to true", deprecated = false, properties = { @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), @YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Expression used as the predicate to evaluate whether this when should trigger and route the message or not.", displayName = "Expression", oneOf = "expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition") } ) @@ -20269,25 +20396,25 @@ protected boolean setProperty(WhenDefinition target, String propertyKey, types = org.apache.camel.model.WireTapDefinition.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Wire Tap", - description = "Routes a copy of a message (or creates a new message) to a secondary destination while continue routing the original message.", + description = "Sends a copy of the message to a secondary endpoint without affecting the original route flow. The tapped message is sent asynchronously in a separate thread", deprecated = false, properties = { - @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise toD if they are org.apache.camel.spi.SendDynamicAware .", displayName = "Allow Optimised Components"), + @YamlProperty(name = "allowOptimisedComponents", type = "boolean", defaultValue = "true", description = "Whether to allow components to optimise toD if they are SendDynamicAware.", displayName = "Allow Optimised Components"), @YamlProperty(name = "autoStartComponents", type = "boolean", defaultValue = "true", description = "Whether to auto startup components when toD is starting up.", displayName = "Auto Start Components"), - @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn off caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduces memory usage as otherwise producers/endpoints are stored in memory in the caches. However if there are a high degree of dynamic endpoints that have been used before, then it can benefit to use the cache to reuse both producers and endpoints and therefore the cache size can be set accordingly or rely on the default size (1000). If there is a mix of unique and used before dynamic endpoints, then setting a reasonable cache size can help reduce memory usage to avoid storing too many non frequent used producers.", displayName = "Cache Size"), - @YamlProperty(name = "copy", type = "boolean", defaultValue = "true", description = "Uses a copy of the original exchange", displayName = "Copy"), - @YamlProperty(name = "description", type = "string", description = "Sets the description of this node", displayName = "Description"), - @YamlProperty(name = "disabled", type = "boolean", defaultValue = "false", description = "Disables this EIP from the route.", displayName = "Disabled"), - @YamlProperty(name = "dynamicUri", type = "boolean", defaultValue = "true", description = "Whether the uri is dynamic or static. If the uri is dynamic then the simple language is used to evaluate a dynamic uri to use as the wire-tap destination, for each incoming message. This works similar to how the toD EIP pattern works. If static then the uri is used as-is as the wire-tap destination.", displayName = "Dynamic Uri"), - @YamlProperty(name = "executorService", type = "string", description = "Uses a custom thread pool", displayName = "Executor Service"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "cacheSize", type = "number", description = "Sets the maximum size used by the ProducerCache which is used to cache and reuse producers when uris are reused. Use 0 for default cache size, or -1 to turn cache off.", displayName = "Cache Size"), + @YamlProperty(name = "copy", type = "boolean", defaultValue = "true", description = "Whether to use a copy of the original exchange.", displayName = "Copy"), + @YamlProperty(name = "description", type = "string", description = "The description for this node", displayName = "Description"), + @YamlProperty(name = "disabled", type = "boolean", 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.", displayName = "Disabled"), + @YamlProperty(name = "dynamicUri", type = "boolean", defaultValue = "true", description = "Whether the uri is dynamic or static. If dynamic then the simple language is used to evaluate a dynamic uri to use as the wire-tap destination, for each incoming message.", displayName = "Dynamic Uri"), + @YamlProperty(name = "executorService", type = "string", description = "Uses a custom thread pool for sending tapped exchanges.", displayName = "Executor Service"), + @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), @YamlProperty(name = "ignoreInvalidEndpoint", type = "boolean", defaultValue = "false", description = "Whether to ignore invalid endpoint URIs and skip sending the message.", displayName = "Ignore Invalid Endpoint"), - @YamlProperty(name = "note", type = "string", description = "Sets the note of this node", displayName = "Note"), - @YamlProperty(name = "onPrepare", type = "string", description = "Uses the Processor when preparing the org.apache.camel.Exchange to be sent. This can be used to deep-clone messages that should be sent, or any custom logic needed before the exchange is sent.", displayName = "On Prepare"), + @YamlProperty(name = "note", type = "string", description = "The note for this node", displayName = "Note"), + @YamlProperty(name = "onPrepare", type = "string", description = "Uses a processor when preparing the exchange to be sent. This can be used to deep-clone messages, or any custom logic needed before the exchange is sent.", displayName = "On Prepare"), @YamlProperty(name = "parameters", type = "object"), - @YamlProperty(name = "uri", type = "string", required = true, description = "The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression.", displayName = "Uri"), - @YamlProperty(name = "variableReceive", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Receive"), - @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: 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. In other words, the variable is used instead of the message body, but everything else is as usual.", displayName = "Variable Send") + @YamlProperty(name = "uri", type = "string", required = true, description = "The uri of the endpoint to send to. The uri can be dynamic computed using the simple language.", displayName = "Uri"), + @YamlProperty(name = "variableReceive", type = "string", 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.", displayName = "Variable Receive"), + @YamlProperty(name = "variableSend", type = "string", description = "To use a variable as the source for the message body to send. This makes it handy to use variables for user data and to easily control what data to use for sending and receiving.", displayName = "Variable Send") } ) public static class WireTapDefinitionDeserializer extends YamlDeserializerEndpointAwareBase { @@ -20399,23 +20526,23 @@ protected boolean setProperty(WireTapDefinition target, String propertyKey, types = org.apache.camel.model.dataformat.XMLSecurityDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "XML Security", - description = "Encrypt and decrypt XML payloads using Apache Santuario.", + description = "Encrypt and decrypt XML payloads using Apache Santuario", deprecated = false, properties = { @YamlProperty(name = "addKeyValueForEncryptedKey", type = "boolean", defaultValue = "true", description = "Whether to add the public key used to encrypt the session key as a KeyValue in the EncryptedKey structure or not.", displayName = "Add Key Value For Encrypted Key"), - @YamlProperty(name = "digestAlgorithm", type = "enum:SHA1,SHA256,SHA512", defaultValue = "SHA1", description = "The digest algorithm to use with the RSA OAEP algorithm. The available choices are: XMLCipher.SHA1 XMLCipher.SHA256 XMLCipher.SHA512 The default value is XMLCipher.SHA1", displayName = "Digest Algorithm"), + @YamlProperty(name = "digestAlgorithm", type = "enum:SHA1,SHA256,SHA512", defaultValue = "SHA1", description = "The digest algorithm to use with the RSA OAEP algorithm.", displayName = "Digest Algorithm"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "keyCipherAlgorithm", type = "enum:RSA_v1dot5,RSA_OAEP,RSA_OAEP_11", defaultValue = "RSA_OAEP", description = "The cipher algorithm to be used for encryption/decryption of the asymmetric key. The available choices are: XMLCipher.RSA_v1dot5 XMLCipher.RSA_OAEP XMLCipher.RSA_OAEP_11 The default value is XMLCipher.RSA_OAEP", displayName = "Key Cipher Algorithm"), + @YamlProperty(name = "keyCipherAlgorithm", type = "enum:RSA_v1dot5,RSA_OAEP,RSA_OAEP_11", defaultValue = "RSA_OAEP", description = "The cipher algorithm to be used for encryption/decryption of the asymmetric key.", displayName = "Key Cipher Algorithm"), @YamlProperty(name = "keyOrTrustStoreParameters", type = "string", description = "Refers to a KeyStore instance to lookup in the registry, which is used for configuration options for creating and loading a KeyStore instance that represents the sender's trustStore or recipient's keyStore.", displayName = "Key Or Trust Store Parameters"), @YamlProperty(name = "keyPassword", type = "string", description = "The password to be used for retrieving the private key from the KeyStore. This key is used for asymmetric decryption.", displayName = "Key Password"), - @YamlProperty(name = "mgfAlgorithm", type = "enum:MGF1_SHA1,MGF1_SHA256,MGF1_SHA512", defaultValue = "MGF1_SHA1", description = "The MGF Algorithm to use with the RSA OAEP algorithm. The available choices are: EncryptionConstants.MGF1_SHA1 EncryptionConstants.MGF1_SHA256 EncryptionConstants.MGF1_SHA512 The default value is EncryptionConstants.MGF1_SHA1", displayName = "Mgf Algorithm"), - @YamlProperty(name = "namespace", type = "string", description = "Refers to a Map XML Namespaces of prefix - uri mappings", displayName = "Namespace"), - @YamlProperty(name = "passPhrase", type = "string", description = "A String used as passPhrase to encrypt/decrypt content. The passPhrase has to be provided. The passPhrase needs to be put together in conjunction with the appropriate encryption algorithm. For example using TRIPLEDES the passPhase can be a Only another 24 Byte key", displayName = "Pass Phrase"), - @YamlProperty(name = "passPhraseByte", type = "string", format = "binary", description = "A byte used as passPhrase to encrypt/decrypt content. The passPhrase has to be provided. The passPhrase needs to be put together in conjunction with the appropriate encryption algorithm. For example using TRIPLEDES the passPhase can be a Only another 24 Byte key", displayName = "Pass Phrase Byte"), + @YamlProperty(name = "mgfAlgorithm", type = "enum:MGF1_SHA1,MGF1_SHA256,MGF1_SHA512", defaultValue = "MGF1_SHA1", description = "The MGF Algorithm to use with the RSA OAEP algorithm.", displayName = "Mgf Algorithm"), + @YamlProperty(name = "namespace", type = "string", description = "Refers to a Map of XML Namespaces of prefix to uri mappings.", displayName = "Namespace"), + @YamlProperty(name = "passPhrase", type = "string", description = "A String used as passPhrase to encrypt/decrypt content.", displayName = "Pass Phrase"), + @YamlProperty(name = "passPhraseByte", type = "string", format = "binary", description = "A byte used as passPhrase to encrypt/decrypt content.", displayName = "Pass Phrase Byte"), @YamlProperty(name = "recipientKeyAlias", type = "string", description = "The key alias to be used when retrieving the recipient's public or private key from a KeyStore when performing asymmetric key encryption or decryption.", displayName = "Recipient Key Alias"), @YamlProperty(name = "secureTag", type = "string", description = "The XPath reference to the XML Element selected for encryption/decryption. If no tag is specified, the entire payload is encrypted/decrypted.", displayName = "Secure Tag"), - @YamlProperty(name = "secureTagContents", type = "boolean", defaultValue = "false", description = "A boolean value to specify whether the XML Element is to be encrypted or the contents of the XML Element. false = Element Level. true = Element Content Level.", displayName = "Secure Tag Contents"), - @YamlProperty(name = "xmlCipherAlgorithm", type = "enum:TRIPLEDES,AES_128,AES_128_GCM,AES_192,AES_192_GCM,AES_256,AES_256_GCM,SEED_128,CAMELLIA_128,CAMELLIA_192,CAMELLIA_256", defaultValue = "AES-256-GCM", description = "The cipher algorithm to be used for encryption/decryption of the XML message content. The available choices are: XMLCipher.TRIPLEDES XMLCipher.AES_128 XMLCipher.AES_128_GCM XMLCipher.AES_192 XMLCipher.AES_192_GCM XMLCipher.AES_256 XMLCipher.AES_256_GCM XMLCipher.SEED_128 XMLCipher.CAMELLIA_128 XMLCipher.CAMELLIA_192 XMLCipher.CAMELLIA_256 The default value is XMLCipher.AES_256_GCM", displayName = "Xml Cipher Algorithm") + @YamlProperty(name = "secureTagContents", type = "boolean", defaultValue = "false", description = "A boolean value to specify whether the XML Element is to be encrypted or the contents of the XML Element. false = Element Level, true = Element Content Level.", displayName = "Secure Tag Contents"), + @YamlProperty(name = "xmlCipherAlgorithm", type = "enum:TRIPLEDES,AES_128,AES_128_GCM,AES_192,AES_192_GCM,AES_256,AES_256_GCM,SEED_128,CAMELLIA_128,CAMELLIA_192,CAMELLIA_256", defaultValue = "AES-256-GCM", description = "The cipher algorithm to be used for encryption/decryption of the XML message content.", displayName = "Xml Cipher Algorithm") } ) public static class XMLSecurityDataFormatDeserializer extends YamlDeserializerBase { @@ -20517,17 +20644,17 @@ protected boolean setProperty(XMLSecurityDataFormat target, String propertyKey, types = org.apache.camel.model.language.XMLTokenizerExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "XML Tokenize", - description = "Tokenize XML payloads.", + description = "Tokenize XML payloads", deprecated = false, properties = { - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "group", type = "number", description = "To group N parts together", displayName = "Group"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "mode", type = "enum:i,w,u,t", defaultValue = "i", description = "The extraction mode. The available extraction modes are: i - injecting the contextual namespace bindings into the extracted token (default) w - wrapping the extracted token in its ancestor context u - unwrapping the extracted token to its child content t - extracting the text content of the specified element", displayName = "Mode"), - @YamlProperty(name = "namespace", type = "array:org.apache.camel.model.PropertyDefinition", description = "Injects the XML Namespaces of prefix - uri mappings", displayName = "Namespace"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "group", type = "number", description = "To group N parts together.", displayName = "Group"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "mode", type = "enum:i,w,u,t", defaultValue = "i", description = "The extraction mode. The available extraction modes are: i - injecting the contextual namespace bindings into the extracted token (default), w - wrapping the extracted token in its ancestor context, u - unwrapping the extracted token to its child content, t - extracting the text content of the specified element.", displayName = "Mode"), + @YamlProperty(name = "namespace", type = "array:org.apache.camel.model.PropertyDefinition", description = "Injects the XML Namespaces of prefix to uri mappings.", displayName = "Namespace"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class XMLTokenizerExpressionDeserializer extends YamlDeserializerBase { @@ -20613,23 +20740,23 @@ protected boolean setProperty(XMLTokenizerExpression target, String propertyKey, types = org.apache.camel.model.language.XPathExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "XPath", - description = "Evaluates an XPath expression against an XML payload.", + description = "Evaluates an XPath expression against an XML payload", deprecated = false, properties = { - @YamlProperty(name = "documentType", type = "string", description = "Name of class for document type The default value is org.w3c.dom.Document", displayName = "Document Type"), - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "factoryRef", type = "string", description = "References to a custom XPathFactory to lookup in the registry", displayName = "Factory Ref"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "logNamespaces", type = "boolean", defaultValue = "false", description = "Whether to log namespaces which can assist during troubleshooting", displayName = "Log Namespaces"), - @YamlProperty(name = "namespace", type = "array:org.apache.camel.model.PropertyDefinition", description = "Injects the XML Namespaces of prefix - uri mappings", displayName = "Namespace"), - @YamlProperty(name = "objectModel", type = "string", description = "The XPath object model to use", displayName = "Object Model"), - @YamlProperty(name = "preCompile", type = "boolean", defaultValue = "true", description = "Whether to enable pre-compiling the xpath expression during initialization phase. pre-compile is enabled by default. This can be used to turn off, for example in cases the compilation phase is desired at the starting phase, such as if the application is ahead of time compiled (for example with camel-quarkus) which would then load the xpath factory of the built operating system, and not a JVM runtime.", displayName = "Pre Compile"), + @YamlProperty(name = "documentType", type = "string", description = "Name of class for document type. The default value is org.w3c.dom.Document.", displayName = "Document Type"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "factoryRef", type = "string", description = "References to a custom XPathFactory to lookup in the registry.", displayName = "Factory Ref"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "logNamespaces", type = "boolean", defaultValue = "false", description = "Whether to log namespaces which can assist during troubleshooting.", displayName = "Log Namespaces"), + @YamlProperty(name = "namespace", type = "array:org.apache.camel.model.PropertyDefinition", description = "Injects the XML Namespaces of prefix to uri mappings.", displayName = "Namespace"), + @YamlProperty(name = "objectModel", type = "string", description = "The XPath object model to use.", displayName = "Object Model"), + @YamlProperty(name = "preCompile", type = "boolean", defaultValue = "true", description = "Whether to enable pre-compiling the xpath expression during initialization phase. pre-compile is enabled by default.", displayName = "Pre Compile"), @YamlProperty(name = "resultQName", type = "enum:NUMBER,STRING,BOOLEAN,NODESET,NODE", defaultValue = "NODESET", description = "Sets the output type supported by XPath.", displayName = "Result QName"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), @YamlProperty(name = "saxon", type = "boolean", defaultValue = "false", description = "Whether to use Saxon.", displayName = "Saxon"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), - @YamlProperty(name = "threadSafety", type = "boolean", defaultValue = "false", description = "Whether to enable thread-safety for the returned result of the xpath expression. This applies to when using NODESET as the result type, and the returned set has multiple elements. In this situation there can be thread-safety issues if you process the NODESET concurrently such as from a Camel Splitter EIP in parallel processing mode. This option prevents concurrency issues by doing defensive copies of the nodes. It is recommended to turn this option on if you are using camel-saxon or Saxon in your application. Saxon has thread-safety issues which can be prevented by turning this option on.", displayName = "Thread Safety"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "threadSafety", type = "boolean", defaultValue = "false", description = "Whether to enable thread-safety for the returned result of the xpath expression. This applies to when using NODESET as the result type, and the returned set has multiple elements.", displayName = "Thread Safety"), + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class XPathExpressionDeserializer extends YamlDeserializerBase { @@ -20745,16 +20872,16 @@ protected boolean setProperty(XPathExpression target, String propertyKey, types = org.apache.camel.model.language.XQueryExpression.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "XQuery", - description = "Evaluates an XQuery expressions against an XML payload.", + description = "Evaluates an XQuery expressions against an XML payload", deprecated = false, properties = { - @YamlProperty(name = "configurationRef", type = "string", description = "Reference to a saxon configuration instance in the registry to use for xquery (requires camel-saxon). This may be needed to add custom functions to a saxon configuration, so these custom functions can be used in xquery expressions.", displayName = "Configuration Ref"), - @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), - @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), - @YamlProperty(name = "namespace", type = "array:org.apache.camel.model.PropertyDefinition", description = "Injects the XML Namespaces of prefix - uri mappings", displayName = "Namespace"), - @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), + @YamlProperty(name = "configurationRef", type = "string", description = "Reference to a saxon configuration instance in the registry to use for xquery (requires camel-saxon).", displayName = "Configuration Ref"), + @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax.", displayName = "Expression"), + @YamlProperty(name = "id", type = "string", description = "The id of this node.", displayName = "Id"), + @YamlProperty(name = "namespace", type = "array:org.apache.camel.model.PropertyDefinition", description = "Injects the XML Namespaces of prefix to uri mappings.", displayName = "Namespace"), + @YamlProperty(name = "resultType", type = "string", description = "The class of the result type (type from output).", displayName = "Result Type"), @YamlProperty(name = "source", type = "string", description = "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body.", displayName = "Source"), - @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.", displayName = "Trim") + @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the source code to remove leading and trailing whitespaces and line breaks.", displayName = "Trim") } ) public static class XQueryExpressionDeserializer extends YamlDeserializerBase { @@ -20834,22 +20961,22 @@ protected boolean setProperty(XQueryExpression target, String propertyKey, types = org.apache.camel.model.dataformat.YAMLDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "YAML", - description = "Marshal and unmarshal Java objects to and from YAML.", + description = "Marshal and unmarshal Java objects to and from YAML", deprecated = false, properties = { - @YamlProperty(name = "allowAnyType", type = "boolean", defaultValue = "false", description = "Allow any class to be un-marshaled", displayName = "Allow Any Type"), + @YamlProperty(name = "allowAnyType", type = "boolean", defaultValue = "false", description = "Allow any class to be un-marshaled.", displayName = "Allow Any Type"), @YamlProperty(name = "allowRecursiveKeys", type = "boolean", defaultValue = "false", description = "Set whether recursive keys are allowed.", displayName = "Allow Recursive Keys"), @YamlProperty(name = "constructor", type = "string", description = "BaseConstructor to construct incoming documents.", displayName = "Constructor"), @YamlProperty(name = "dumperOptions", type = "string", description = "DumperOptions to configure outgoing objects.", displayName = "Dumper Options"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "library", type = "enum:SnakeYAML", defaultValue = "SnakeYAML", description = "Which yaml library to use. By default it is SnakeYAML", displayName = "Library"), + @YamlProperty(name = "library", type = "enum:SnakeYAML", defaultValue = "SnakeYAML", description = "Which yaml library to use. By default it is SnakeYAML.", displayName = "Library"), @YamlProperty(name = "maxAliasesForCollections", type = "number", defaultValue = "50", description = "Set the maximum amount of aliases allowed for collections.", displayName = "Max Aliases For Collections"), @YamlProperty(name = "prettyFlow", type = "boolean", defaultValue = "false", description = "Force the emitter to produce a pretty YAML document when using the flow style.", displayName = "Pretty Flow"), @YamlProperty(name = "representer", type = "string", description = "Representer to emit outgoing objects.", displayName = "Representer"), - @YamlProperty(name = "resolver", type = "string", description = "Resolver to detect implicit type", displayName = "Resolver"), + @YamlProperty(name = "resolver", type = "string", description = "Resolver to detect implicit type.", displayName = "Resolver"), @YamlProperty(name = "typeFilter", type = "string", description = "Set the types SnakeYAML is allowed to un-marshall. Multiple types can be separated by comma.", displayName = "Type Filter"), - @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling", displayName = "Unmarshal Type"), - @YamlProperty(name = "useApplicationContextClassLoader", type = "boolean", defaultValue = "true", description = "Use ApplicationContextClassLoader as custom ClassLoader", displayName = "Use Application Context Class Loader") + @YamlProperty(name = "unmarshalType", type = "string", description = "Class name of the java type to use when unmarshalling.", displayName = "Unmarshal Type"), + @YamlProperty(name = "useApplicationContextClassLoader", type = "boolean", defaultValue = "true", description = "Use ApplicationContextClassLoader as custom ClassLoader.", displayName = "Use Application Context Class Loader") } ) public static class YAMLDataFormatDeserializer extends YamlDeserializerBase { @@ -20944,10 +21071,10 @@ protected boolean setProperty(YAMLDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.ZipDeflaterDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Zip Deflater", - description = "Compress and decompress streams using java.util.zip.Deflater and java.util.zip.Inflater.", + description = "Compress and decompress streams using java.util.zip.Deflater and java.util.zip.Inflater", deprecated = false, properties = { - @YamlProperty(name = "compressionLevel", type = "enum:-1,0,1,2,3,4,5,6,7,8,9", defaultValue = "-1", description = "To specify a specific compression between 0-9. -1 is default compression, 0 is no compression, and 9 is the best compression.", displayName = "Compression Level"), + @YamlProperty(name = "compressionLevel", type = "enum:-1,0,1,2,3,4,5,6,7,8,9", defaultValue = "-1", description = "Compression level to use (0-9). -1 is default compression, 0 is no compression, and 9 is the best compression.", displayName = "Compression Level"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id") } ) @@ -20989,12 +21116,12 @@ protected boolean setProperty(ZipDeflaterDataFormat target, String propertyKey, types = org.apache.camel.model.dataformat.ZipFileDataFormat.class, order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1, displayName = "Zip File", - description = "Compression and decompress streams using java.util.zip.ZipStream.", + description = "Compression and decompress streams using java.util.zip.Zip*Stream", deprecated = false, properties = { - @YamlProperty(name = "allowEmptyDirectory", type = "boolean", defaultValue = "false", description = "If the zip file has more than one entry, setting this option to true, allows to get the iterator even if the directory is empty", displayName = "Allow Empty Directory"), + @YamlProperty(name = "allowEmptyDirectory", type = "boolean", defaultValue = "false", description = "If the zip file has more than one entry, setting this option to true, allows to get the iterator even if the directory is empty.", displayName = "Allow Empty Directory"), @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"), - @YamlProperty(name = "maxDecompressedSize", type = "number", defaultValue = "1073741824", description = "Set the maximum decompressed size of a zip file (in bytes). The default value if not specified corresponds to 1 gigabyte. An IOException will be thrown if the decompressed size exceeds this amount. Set to -1 to disable setting a maximum decompressed size.", displayName = "Max Decompressed Size"), + @YamlProperty(name = "maxDecompressedSize", type = "number", defaultValue = "1073741824", description = "Set the maximum decompressed size of a zip file (in bytes). The default value if not specified corresponds to 1 gigabyte. Set to -1 to disable setting a maximum decompressed size.", displayName = "Max Decompressed Size"), @YamlProperty(name = "preservePathElements", type = "boolean", defaultValue = "false", description = "If the file name contains path elements, setting this option to true, allows the path to be maintained in the zip file.", displayName = "Preserve Path Elements"), @YamlProperty(name = "usingIterator", type = "boolean", defaultValue = "false", description = "If the zip file has more than one entry, the setting this option to true, allows working with the splitter EIP, to split the data using an iterator in a streaming mode.", displayName = "Using Iterator") } From f0dde972a39d0395c7b78a9a377723292074ffe9 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 2 Jul 2026 13:06:05 +0000 Subject: [PATCH 13/14] CAMEL-23264: Address review feedback from davsclaus and Copilot - Fix @since 4.21 to @since 4.22 on SplitResult and Failure record - Add @since 4.22 to Exchange.SPLIT_RESULT and SPLIT_WATERMARK constants - Add SPLIT_WATERMARK to ExchangePropertyKey enum and asExchangePropertyKey() - Reject negative group values in SplitReifier with IllegalArgumentException - Fix watermark property leak on abort: clean up internal properties in finally block so they don't leak to downstream processors - Fix setWatermarkExpression javadoc to match actual per-item semantics - Regenerate camelYamlDsl.json with full descriptions from @Metadata annotations (fixes CI "uncommitted changes" failure) Co-Authored-By: Claude Opus 4.6 --- .../main/java/org/apache/camel/Exchange.java | 6 +++ .../org/apache/camel/ExchangePropertyKey.java | 3 ++ .../java/org/apache/camel/SplitResult.java | 4 +- .../apache/camel/model/SplitDefinition.java | 4 +- .../org/apache/camel/processor/Splitter.java | 52 ++++++++++--------- .../apache/camel/reifier/SplitReifier.java | 4 ++ .../schema/camelYamlDsl-canonical.json | 30 +++++++++++ .../resources/schema/camelYamlDsl.json | 8 +-- 8 files changed, 79 insertions(+), 32 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/Exchange.java b/core/camel-api/src/main/java/org/apache/camel/Exchange.java index 4a44fd1513dc0..27607438f0a86 100644 --- a/core/camel-api/src/main/java/org/apache/camel/Exchange.java +++ b/core/camel-api/src/main/java/org/apache/camel/Exchange.java @@ -276,10 +276,16 @@ public interface Exchange extends VariableAware { javaType = "int", important = true) String SPLIT_SIZE = "CamelSplitSize"; + /** + * @since 4.22 + */ @Metadata(label = "split", description = "The result of a Splitter EIP operation with error thresholds, providing structured failure details.", javaType = "org.apache.camel.SplitResult") String SPLIT_RESULT = "CamelSplitResult"; + /** + * @since 4.22 + */ @Metadata(label = "split", description = "The current watermark value from the watermark store, set before split processing begins.", javaType = "String") diff --git a/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java b/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java index 8b1cd66a3ef66..8b4dd6415e0c4 100644 --- a/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java +++ b/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java @@ -90,6 +90,7 @@ public enum ExchangePropertyKey { SPLIT_INDEX(Exchange.SPLIT_INDEX), SPLIT_RESULT(Exchange.SPLIT_RESULT), SPLIT_SIZE(Exchange.SPLIT_SIZE), + SPLIT_WATERMARK(Exchange.SPLIT_WATERMARK), STEP_ID(Exchange.STEP_ID), STREAM_CACHE_UNIT_OF_WORK(Exchange.STREAM_CACHE_UNIT_OF_WORK), TO_ENDPOINT(Exchange.TO_ENDPOINT), @@ -227,6 +228,8 @@ public String getName() { return SPLIT_RESULT; case Exchange.SPLIT_SIZE: return SPLIT_SIZE; + case Exchange.SPLIT_WATERMARK: + return SPLIT_WATERMARK; case Exchange.STEP_ID: return STEP_ID; case Exchange.STREAM_CACHE_UNIT_OF_WORK: diff --git a/core/camel-api/src/main/java/org/apache/camel/SplitResult.java b/core/camel-api/src/main/java/org/apache/camel/SplitResult.java index b78682fc66413..6dbf371ef6bac 100644 --- a/core/camel-api/src/main/java/org/apache/camel/SplitResult.java +++ b/core/camel-api/src/main/java/org/apache/camel/SplitResult.java @@ -25,7 +25,7 @@ *

* This result is available as an exchange property ({@link Exchange#SPLIT_RESULT}) after the split operation completes. * - * @since 4.21 + * @since 4.22 */ public final class SplitResult { @@ -34,7 +34,7 @@ public final class SplitResult { * * @param index the 0-based index of the failed item in the split sequence * @param exception the exception that caused the failure - * @since 4.21 + * @since 4.22 */ public record Failure(int index, Exception exception) { } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java index 7c450e46c3d46..c3c412a8aec4c 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java @@ -982,7 +982,9 @@ public String getWatermarkExpression() { } /** - * Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value. + * Sets a Simple expression to evaluate on each completed sub-exchange to determine the new watermark value. When + * set, enables value-based watermarking instead of index-based. The expression is evaluated using the Simple + * language. */ public void setWatermarkExpression(String watermarkExpression) { this.watermarkExpression = watermarkExpression; diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java index 13d8d70170c42..841e9f610459d 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java @@ -669,35 +669,37 @@ public void done() { @SuppressWarnings("unchecked") private void updateWatermark(Exchange exchange) { - // don't update watermark if processing was aborted (allows retry) - if (exchange.getException() != null) { - return; - } + try { + // don't update watermark if processing was aborted (allows retry) + if (exchange.getException() != null) { + return; + } - if (watermarkExpression != null) { - // value-based: use the value from the highest-indexed item tracked during processing - AtomicReference latestRef - = exchange.getProperty(SPLIT_WATERMARK_LATEST, AtomicReference.class); - if (latestRef != null) { - IndexedWatermark latest = latestRef.get(); - if (latest != null) { - persistWatermark(latest.value()); + if (watermarkExpression != null) { + // value-based: use the value from the highest-indexed item tracked during processing + AtomicReference latestRef + = exchange.getProperty(SPLIT_WATERMARK_LATEST, AtomicReference.class); + if (latestRef != null) { + IndexedWatermark latest = latestRef.get(); + if (latest != null) { + persistWatermark(latest.value()); + } + } + } else { + // index-based: compute absolute last index and store it + int offset = exchange.getProperty(SPLIT_WATERMARK_OFFSET, 0, Integer.class); + Integer count = exchange.getProperty(SPLIT_WATERMARK_COUNT, Integer.class); + if (count != null && count > 0) { + int lastAbsoluteIndex = offset + count - 1; + persistWatermark(String.valueOf(lastAbsoluteIndex)); } } - } else { - // index-based: compute absolute last index and store it - int offset = exchange.getProperty(SPLIT_WATERMARK_OFFSET, 0, Integer.class); - Integer count = exchange.getProperty(SPLIT_WATERMARK_COUNT, Integer.class); - if (count != null && count > 0) { - int lastAbsoluteIndex = offset + count - 1; - persistWatermark(String.valueOf(lastAbsoluteIndex)); - } + } finally { + // always clean up internal properties, even on abort + exchange.removeProperty(SPLIT_WATERMARK_OFFSET); + exchange.removeProperty(SPLIT_WATERMARK_COUNT); + exchange.removeProperty(SPLIT_WATERMARK_LATEST); } - - // clean up internal properties - exchange.removeProperty(SPLIT_WATERMARK_OFFSET); - exchange.removeProperty(SPLIT_WATERMARK_COUNT); - exchange.removeProperty(SPLIT_WATERMARK_LATEST); } private void persistWatermark(String value) { diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java index 8584cbff46ee2..19b58ffec9f90 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java @@ -81,6 +81,10 @@ public Processor createProcessor() throws Exception { answer.setDisabled(isDisabled(camelContext, definition)); int group = parseInt(definition.getGroup(), 0); + if (group < 0) { + throw new IllegalArgumentException( + "group must not be negative, but was: " + group); + } if (group > 0) { answer.setGroup(group); } diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-canonical.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-canonical.json index 307f90a9553a9..b255cbe5f0a27 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-canonical.json +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-canonical.json @@ -4655,6 +4655,11 @@ "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.", "default" : false }, + "errorThreshold" : { + "type" : "number", + "title" : "Error Threshold", + "description" : "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation. For example, 0.1 means abort if more than 10% of items fail. When the threshold is exceeded, a org.apache.camel.CamelExchangeException is thrown. This option is mutually exclusive with stopOnException . When set, individual item failures are tracked but processing continues until the threshold is exceeded. Note: When combined with parallelProcessing , the failure ratio may vary between runs because parallel items complete in non-deterministic order. For deterministic abort behavior with parallel processing, prefer maxFailedRecords (absolute count) over errorThreshold (ratio)." + }, "executorService" : { "type" : "string", "title" : "Executor Service", @@ -4665,11 +4670,21 @@ "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.", "$ref" : "#/items/definitions/org.apache.camel.model.language.ExpressionDefinition" }, + "group" : { + "type" : "number", + "title" : "Group", + "description" : "Groups N split messages into a single message with a java.util.List body. This allows processing items in chunks instead of one at a time." + }, "id" : { "type" : "string", "title" : "Id", "description" : "The id of this node" }, + "maxFailedRecords" : { + "type" : "number", + "title" : "Max Failed Records", + "description" : "Sets the maximum number of failed records before aborting the split operation. When the count is exceeded, a org.apache.camel.CamelExchangeException is thrown. This option is mutually exclusive with stopOnException . Can be combined with errorThreshold processing aborts when either threshold is exceeded." + }, "note" : { "type" : "string", "title" : "Note", @@ -4693,6 +4708,11 @@ "description" : "If enabled then processing each split message occurs concurrently. The caller thread still waits until all messages are fully processed before it continues.", "default" : false }, + "resumeStrategy" : { + "type" : "string", + "title" : "Resume Strategy", + "description" : "Sets a ResumeStrategy for resume-from-last-position support. The watermark key must also be configured via watermarkKey(String) ." + }, "shareUnitOfWork" : { "type" : "boolean", "title" : "Share Unit Of Work", @@ -4728,6 +4748,16 @@ "title" : "Timeout", "description" : "Total timeout in millis when using parallel processing. If the splitter has not been able to process all replies within the given timeframe, then the timeout triggers and the splitter breaks out and continues.", "default" : "0" + }, + "watermarkExpression" : { + "type" : "string", + "title" : "Watermark Expression", + "description" : "Sets a Simple expression to evaluate on each completed sub-exchange to determine the new watermark value. When set, enables value-based watermarking instead of index-based. The expression is evaluated using the Simple language." + }, + "watermarkKey" : { + "type" : "string", + "title" : "Watermark Key", + "description" : "Sets the key to use in the watermark store." } } }, diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json index f73bc2caef923..f97e7cb55df1f 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json @@ -7322,7 +7322,7 @@ "errorThreshold" : { "type" : "number", "title" : "Error Threshold", - "description" : "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation." + "description" : "Sets the error threshold as a fraction (0.0-1.0) of failed items before aborting the split operation. For example, 0.1 means abort if more than 10% of items fail. When the threshold is exceeded, a org.apache.camel.CamelExchangeException is thrown. This option is mutually exclusive with stopOnException . When set, individual item failures are tracked but processing continues until the threshold is exceeded. Note: When combined with parallelProcessing , the failure ratio may vary between runs because parallel items complete in non-deterministic order. For deterministic abort behavior with parallel processing, prefer maxFailedRecords (absolute count) over errorThreshold (ratio)." }, "executorService" : { "type" : "string", @@ -7342,7 +7342,7 @@ "maxFailedRecords" : { "type" : "number", "title" : "Max Failed Records", - "description" : "Sets the maximum number of failed records before aborting the split operation." + "description" : "Sets the maximum number of failed records before aborting the split operation. When the count is exceeded, a org.apache.camel.CamelExchangeException is thrown. This option is mutually exclusive with stopOnException . Can be combined with errorThreshold processing aborts when either threshold is exceeded." }, "note" : { "type" : "string", @@ -7370,7 +7370,7 @@ "resumeStrategy" : { "type" : "string", "title" : "Resume Strategy", - "description" : "Sets a reference to a ResumeStrategy in the registry for resume-from-last-position support." + "description" : "Sets a ResumeStrategy for resume-from-last-position support. The watermark key must also be configured via watermarkKey(String) ." }, "shareUnitOfWork" : { "type" : "boolean", @@ -7411,7 +7411,7 @@ "watermarkExpression" : { "type" : "string", "title" : "Watermark Expression", - "description" : "Sets a Simple expression to evaluate on the exchange after split completion to determine the new watermark value." + "description" : "Sets a Simple expression to evaluate on each completed sub-exchange to determine the new watermark value. When set, enables value-based watermarking instead of index-based. The expression is evaluated using the Simple language." }, "watermarkKey" : { "type" : "string", From 77781678941fe61f83d9bcaf7d540e7801c77073 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 2 Jul 2026 18:36:38 +0000 Subject: [PATCH 14/14] CAMEL-23264: Regenerate JavaDslModelWriter for new Split attributes Co-Authored-By: Claude Opus 4.6 --- .../java/org/apache/camel/java/out/JavaDslModelWriter.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/camel-java-io/src/generated/java/org/apache/camel/java/out/JavaDslModelWriter.java b/core/camel-java-io/src/generated/java/org/apache/camel/java/out/JavaDslModelWriter.java index 9640d635bbe7d..3011b59f69f1e 100644 --- a/core/camel-java-io/src/generated/java/org/apache/camel/java/out/JavaDslModelWriter.java +++ b/core/camel-java-io/src/generated/java/org/apache/camel/java/out/JavaDslModelWriter.java @@ -2516,6 +2516,12 @@ protected void doWriteSplitDefinition(StringBuilder sb, SplitDefinition def) { doWriteAttribute(sb, "executorService", def.getExecutorService(), null); doWriteAttribute(sb, "onPrepare", def.getOnPrepare(), null); doWriteAttribute(sb, "shareUnitOfWork", def.getShareUnitOfWork(), null); + doWriteAttribute(sb, "group", def.getGroup(), null); + doWriteAttribute(sb, "errorThreshold", def.getErrorThreshold(), null); + doWriteAttribute(sb, "maxFailedRecords", def.getMaxFailedRecords(), null); + doWriteAttribute(sb, "resumeStrategy", def.getResumeStrategy(), null); + doWriteAttribute(sb, "watermarkKey", def.getWatermarkKey(), null); + doWriteAttribute(sb, "watermarkExpression", def.getWatermarkExpression(), null); doWriteOutputExpressionNodeElements(sb, def); } protected void doWriteStepDefinition(StringBuilder sb, StepDefinition def) {