This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch fix/CAMEL-23816 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 8300dbc0cd993963d6e36c5209422ca63534b0c6 Author: Claus Ibsen <[email protected]> AuthorDate: Tue Jun 23 14:48:08 2026 +0200 CAMEL-23816: Improve descriptions in EIP model classes for catalog and MCP tools Co-Authored-By: Claude Opus 4.6 <[email protected]> --- .../apache/camel/model/AggregateDefinition.java | 106 +++++++++++++++------ .../org/apache/camel/model/ChoiceDefinition.java | 5 +- .../org/apache/camel/model/FilterDefinition.java | 4 +- .../java/org/apache/camel/model/LogDefinition.java | 14 ++- .../apache/camel/model/MulticastDefinition.java | 45 ++++++--- .../org/apache/camel/model/SplitDefinition.java | 51 +++++++--- 6 files changed, 169 insertions(+), 56 deletions(-) diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/AggregateDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/AggregateDefinition.java index 02b3fcc6d6d3..5ff6eee43259 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/AggregateDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/AggregateDefinition.java @@ -73,86 +73,138 @@ public class AggregateDefinition extends OutputDefinition<AggregateDefinition> private ExpressionSubElementDefinition correlationExpression; @XmlElement(name = "completionPredicate") @AsPredicate - @Metadata(label = "advanced") + @Metadata(label = "advanced", + 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.") private ExpressionSubElementDefinition completionPredicate; @XmlElement(name = "completionTimeoutExpression") - @Metadata(label = "advanced") + @Metadata(label = "advanced", + description = "Time in millis that an aggregated exchange should be inactive before its complete (timeout)," + + " evaluated as an expression allowing dynamic timeout values.") private ExpressionSubElementDefinition completionTimeoutExpression; @XmlElement(name = "completionSizeExpression") - @Metadata(label = "advanced") + @Metadata(label = "advanced", + description = "Number of messages aggregated before the aggregation is complete," + + " evaluated as an expression allowing dynamic size values.") private ExpressionSubElementDefinition completionSizeExpression; @XmlElement(name = "optimisticLockRetryPolicy") - @Metadata(label = "advanced") + @Metadata(label = "advanced", + description = "Configures retry settings when using optimistic locking.") private OptimisticLockRetryPolicyDefinition optimisticLockRetryPolicyDefinition; @XmlAttribute - @Metadata(javaType = "java.lang.Boolean") + @Metadata(javaType = "java.lang.Boolean", + 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.") private String parallelProcessing; @XmlAttribute - @Metadata(javaType = "java.lang.Boolean") + @Metadata(javaType = "java.lang.Boolean", + description = "Turns on optimistic locking, which requires the aggregation repository" + + " to implement OptimisticLockingAggregationRepository.") private String optimisticLocking; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean", defaultValue = "false") + @Metadata(label = "advanced", javaType = "java.lang.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.") private String optimisticLockingSyncRetry; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.util.concurrent.ExecutorService") + @Metadata(label = "advanced", javaType = "java.util.concurrent.ExecutorService", + description = "Reference to a custom thread pool to use for parallel processing" + + " and sending out aggregated exchanges.") private String executorService; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.util.concurrent.ScheduledExecutorService") + @Metadata(label = "advanced", javaType = "java.util.concurrent.ScheduledExecutorService", + description = "Reference to a custom thread pool for the background completion timeout checker.") private String timeoutCheckerExecutorService; @XmlAttribute - @Metadata(label = "advanced", javaType = "org.apache.camel.processor.aggregate.AggregateController") + @Metadata(label = "advanced", javaType = "org.apache.camel.processor.aggregate.AggregateController", + description = "Reference to an AggregateController to allow external sources to control this aggregator.") private String aggregateController; @XmlAttribute - @Metadata(javaType = "org.apache.camel.spi.AggregationRepository") + @Metadata(javaType = "org.apache.camel.spi.AggregationRepository", + description = "Reference to the AggregationRepository to use." + + " By default uses MemoryAggregationRepository.") private String aggregationRepository; @XmlAttribute(required = true) - @Metadata(javaType = "org.apache.camel.AggregationStrategy") + @Metadata(javaType = "org.apache.camel.AggregationStrategy", + description = "The AggregationStrategy to use. Required. Merges each incoming exchange with the existing" + + " already merged exchanges. At first call the oldExchange parameter is null.") private String aggregationStrategy; @XmlAttribute - @Metadata(label = "advanced") + @Metadata(label = "advanced", + description = "The method name to use when using a POJO as the AggregationStrategy.") private String aggregationStrategyMethodName; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + description = "If true then null is used as the oldExchange at the very first aggregation," + + " when using POJOs as the AggregationStrategy.") private String aggregationStrategyMethodAllowNull; @XmlAttribute - @Metadata(javaType = "java.lang.Integer") + @Metadata(javaType = "java.lang.Integer", + description = "Number of messages aggregated before the aggregation is complete." + + " Can also be set as an expression via completionSizeExpression.") private String completionSize; @XmlAttribute - @Metadata(javaType = "java.time.Duration") + @Metadata(javaType = "java.time.Duration", + description = "A repeating period by which the aggregator will complete all current aggregated exchanges." + + " Cannot be used together with completionTimeout.") private String completionInterval; @XmlAttribute - @Metadata(javaType = "java.time.Duration") + @Metadata(javaType = "java.time.Duration", + description = "Time that an aggregated exchange should be inactive before its complete (timeout)." + + " Cannot be used together with completionInterval.") private String completionTimeout; @XmlAttribute - @Metadata(label = "advanced", defaultValue = "1000", javaType = "java.time.Duration") + @Metadata(label = "advanced", defaultValue = "1000", javaType = "java.time.Duration", + description = "Interval in millis for the background task that checks for completion timeouts." + + " Default is 1000 (1 second).") private String completionTimeoutCheckerInterval; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + 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.") private String completionFromBatchConsumer; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + 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.") private String completionOnNewCorrelationGroup; @XmlAttribute - @Metadata(javaType = "java.lang.Boolean") + @Metadata(javaType = "java.lang.Boolean", + description = "If enabled then the completion predicate evaluates against the incoming exchange." + + " Otherwise it evaluates against the aggregated exchange.") private String eagerCheckCompletion; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + description = "If enabled then a correlation key that cannot be evaluated is logged and ignored," + + " instead of throwing an exception.") private String ignoreInvalidCorrelationKeys; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Integer") + @Metadata(label = "advanced", javaType = "java.lang.Integer", + 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.") private String closeCorrelationKeyOnCompletion; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + description = "If enabled then the aggregated message is discarded (dropped) on completion timeout" + + " instead of being sent out of the aggregator.") private String discardOnCompletionTimeout; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + 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.") private String discardOnAggregationFailure; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + description = "If enabled then all current aggregated exchanges are completed when the context is stopped.") private String forceCompletionOnStop; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + 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.") private String completeAllOnStop; public AggregateDefinition() { diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java index 17208a737c79..ce4dc746b528 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java @@ -54,7 +54,10 @@ public class ChoiceDefinition extends NoOutputDefinition<ChoiceDefinition> { @Metadata(description = "Sets the otherwise node") private OtherwiseDefinition otherwise; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean", defaultValue = "false") + @Metadata(label = "advanced", javaType = "java.lang.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.") private String precondition; public ChoiceDefinition() { diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/FilterDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/FilterDefinition.java index 9ea471db5184..9e4ba76ca20e 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/FilterDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/FilterDefinition.java @@ -36,7 +36,9 @@ import org.apache.camel.spi.Metadata; public class FilterDefinition extends OutputExpressionNode { @XmlAttribute - @Metadata(label = "advanced") + @Metadata(label = "advanced", + description = "Name of an exchange property to store whether the filter predicate matched or not." + + " The value is stored as a boolean.") private String statusPropertyName; public FilterDefinition() { diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/LogDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/LogDefinition.java index d57e7f90e60f..ce249dabda40 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/LogDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/LogDefinition.java @@ -39,21 +39,27 @@ public class LogDefinition extends NoOutputDefinition<LogDefinition> { @XmlAttribute(required = true) @DslArg(position = 1) + @Metadata(description = "The log message to output. Supports simple language expressions.") private String message; @XmlAttribute - @Metadata(javaType = "org.apache.camel.LoggingLevel", defaultValue = "INFO", enums = "TRACE,DEBUG,INFO,WARN,ERROR,OFF") + @Metadata(javaType = "org.apache.camel.LoggingLevel", defaultValue = "INFO", enums = "TRACE,DEBUG,INFO,WARN,ERROR,OFF", + description = "The logging level to use. Default is INFO.") @DslArg(position = 0, renderType = "enumString", typeName = "LoggingLevel") private String loggingLevel; @XmlAttribute + @Metadata(description = "The logger name to use. By default the route id is used.") private String logName; @XmlAttribute - @Metadata(label = "advanced") + @Metadata(label = "advanced", + description = "An optional SLF4J marker to use with the log statement.") private String marker; @XmlAttribute - @Metadata(label = "advanced", javaType = "org.slf4j.Logger") + @Metadata(label = "advanced", javaType = "org.slf4j.Logger", + description = "Reference to a custom SLF4J logger instance to use.") private String logger; @XmlAttribute - @Metadata(label = "advanced") + @Metadata(label = "advanced", + description = "The language to use for evaluating the log message, such as simple, groovy, or ognl.") private String logLanguage; public LogDefinition() { diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/MulticastDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/MulticastDefinition.java index 68139539528e..dcae91f5ecc2 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/MulticastDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/MulticastDefinition.java @@ -49,41 +49,64 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> private Processor onPrepareProcessor; @XmlAttribute - @Metadata(javaType = "org.apache.camel.AggregationStrategy") + @Metadata(javaType = "org.apache.camel.AggregationStrategy", + 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.") private String aggregationStrategy; @XmlAttribute - @Metadata(label = "advanced") + @Metadata(label = "advanced", + description = "The method name to use when using a POJO as the AggregationStrategy.") private String aggregationStrategyMethodName; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + description = "If true then null is used as the oldExchange when there is no data to aggregate," + + " when using POJOs as the AggregationStrategy.") private String aggregationStrategyMethodAllowNull; @Deprecated(since = "4.7.0") @XmlAttribute @Metadata(label = "advanced", javaType = "java.lang.Boolean") private String parallelAggregate; @XmlAttribute - @Metadata(javaType = "java.lang.Boolean") + @Metadata(javaType = "java.lang.Boolean", + 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.") private String parallelProcessing; @XmlAttribute - @Metadata(javaType = "java.lang.Boolean") + @Metadata(javaType = "java.lang.Boolean", + description = "When enabled then the same thread is used to continue routing after the multicast is complete," + + " even if parallel processing is enabled.") private String synchronous; @XmlAttribute - @Metadata(javaType = "java.lang.Boolean") + @Metadata(javaType = "java.lang.Boolean", + 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.") private String streaming; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + 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.") private String stopOnException; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.time.Duration", defaultValue = "0") + @Metadata(label = "advanced", javaType = "java.time.Duration", 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.") private String timeout; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.util.concurrent.ExecutorService") + @Metadata(label = "advanced", javaType = "java.util.concurrent.ExecutorService", + description = "Reference to a custom thread pool to use for parallel processing." + + " Setting this option implies parallel processing.") private String executorService; @XmlAttribute - @Metadata(label = "advanced", javaType = "org.apache.camel.Processor") + @Metadata(label = "advanced", javaType = "org.apache.camel.Processor", + description = "Reference to a processor for preparing the exchange to be sent." + + " Can be used to deep-clone messages that should be sent.") private String onPrepare; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + 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.") private String shareUnitOfWork; public MulticastDefinition() { 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 a32db4e58602..02ed41c4546f 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 @@ -46,44 +46,71 @@ public class SplitDefinition extends OutputExpressionNode implements ExecutorSer private Processor onPrepareProcessor; @XmlAttribute - @Metadata(defaultValue = ",") + @Metadata(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.") private String delimiter; @XmlAttribute - @Metadata(javaType = "org.apache.camel.AggregationStrategy") + @Metadata(javaType = "org.apache.camel.AggregationStrategy", + 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.") private String aggregationStrategy; @XmlAttribute - @Metadata(label = "advanced") + @Metadata(label = "advanced", + description = "The method name to use when using a POJO as the AggregationStrategy.") private String aggregationStrategyMethodName; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + description = "If true then null is used as the oldExchange when there is no data to aggregate," + + " when using POJOs as the AggregationStrategy.") private String aggregationStrategyMethodAllowNull; @Deprecated(since = "4.7.0") @XmlAttribute @Metadata(label = "advanced", javaType = "java.lang.Boolean") private String parallelAggregate; @XmlAttribute - @Metadata(javaType = "java.lang.Boolean") + @Metadata(javaType = "java.lang.Boolean", + description = "If enabled then processing each split message occurs concurrently." + + " The caller thread still waits until all messages are fully processed before it continues.") private String parallelProcessing; @XmlAttribute - @Metadata(javaType = "java.lang.Boolean") + @Metadata(javaType = "java.lang.Boolean", + description = "When enabled then the same thread is used to continue routing after the split is complete," + + " even if parallel processing is enabled.") private String synchronous; @XmlAttribute - @Metadata(javaType = "java.lang.Boolean") + @Metadata(javaType = "java.lang.Boolean", + 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.") private String streaming; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + 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.") private String stopOnException; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.time.Duration", defaultValue = "0") + @Metadata(label = "advanced", javaType = "java.time.Duration", 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.") private String timeout; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.util.concurrent.ExecutorService") + @Metadata(label = "advanced", javaType = "java.util.concurrent.ExecutorService", + description = "Reference to a custom thread pool to use for parallel processing." + + " Setting this option implies parallel processing.") private String executorService; @XmlAttribute - @Metadata(label = "advanced", javaType = "org.apache.camel.Processor") + @Metadata(label = "advanced", javaType = "org.apache.camel.Processor", + description = "Reference to a processor for preparing the exchange to be sent." + + " Can be used to deep-clone messages that should be sent.") private String onPrepare; @XmlAttribute - @Metadata(label = "advanced", javaType = "java.lang.Boolean") + @Metadata(label = "advanced", javaType = "java.lang.Boolean", + 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; public SplitDefinition() {
