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

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


The following commit(s) were added to refs/heads/main by this push:
     new 973eabd56da2 CAMEL-16861: Update docs
973eabd56da2 is described below

commit 973eabd56da2262ccde875631f647c00dae379b5
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Feb 15 14:05:38 2026 +0100

    CAMEL-16861: Update docs
---
 .../src/main/docs/modules/eips/pages/loop-eip.adoc | 126 ++++++++++++++++++++-
 .../main/docs/modules/eips/pages/message-bus.adoc  |  12 ++
 .../docs/modules/eips/pages/message-channel.adoc   |   9 +-
 .../docs/modules/eips/pages/message-endpoint.adoc  |   9 +-
 .../modules/eips/pages/message-expiration.adoc     |  12 ++
 .../docs/modules/eips/pages/message-history.adoc   |  49 ++++++--
 .../docs/modules/eips/pages/message-router.adoc    |  16 +--
 .../docs/modules/eips/pages/messaging-bridge.adoc  |  11 ++
 .../docs/modules/eips/pages/multicast-eip.adoc     | 123 +++++++++++++++++++-
 .../java/org/apache/camel/main/KameletMain.java    |   3 +-
 .../DependencyDownloaderLanguageResolver.java      |  13 ++-
 11 files changed, 341 insertions(+), 42 deletions(-)

diff --git 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/loop-eip.adoc 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/loop-eip.adoc
index 13075e0ccc07..f962d13be4f0 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/loop-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/loop-eip.adoc
@@ -71,9 +71,27 @@ XML::
   </loop>
 </route>
 ----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:a
+      steps:
+        - loop:
+            expression:
+              constant:
+                expression: 8
+            steps:
+              - to:
+                  uri: mock:result
+----
 ====
 
-Use expression to determine loop count:
+
+You can also use a Camel language such as `header` that provides information 
how many times to loop:
 
 [tabs]
 ====
@@ -98,10 +116,31 @@ XML::
   </loop>
 </route>
 ----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:b
+      steps:
+        - loop:
+            expression:
+              header:
+                expression: loop
+            steps:
+              - to:
+                  uri: mock:result
+----
 ====
 
-And with the xref:languages:xpath-language.adoc[XPath] language:
+If you work with XML then you can use 
xref:languages:xpath-language.adoc[XPath] language:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:c")
@@ -109,6 +148,38 @@ from("direct:c")
         .to("mock:result");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+    <from uri="direct:c"/>
+    <loop>
+        <xpath>/hello/@times</xpath>
+        <to uri="mock:result"/>
+    </loop>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:c
+      steps:
+        - loop:
+            expression:
+              xpath:
+                expression: /hello/@times
+            steps:
+              - to:
+                  uri: mock:result
+----
+====
+
+
 == Using copy mode
 
 Now suppose we send a message to direct:start endpoint containing the letter A.
@@ -147,10 +218,35 @@ XML::
   <to uri="mock:result"/>
 </route>
 ----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:start
+      steps:
+        - loop:
+            copy: "true"
+            expression:
+              constant:
+                expression: 3
+            steps:
+              - transform:
+                  expression:
+                    simple:
+                      expression: "${body}B"
+              - to:
+                  uri: mock:loop
+        - to:
+            uri: mock:result
+----
 ====
 
 However, if we do *not* enable copy mode, then mock:loop will receive 
`_"AB"_`, `_"ABB"_`, `_"ABBB"_`, etc. messages.
 
+
 == Looping using while
 
 The loop can act like a while loop that loops until the expression evaluates 
to `false` or `null`.
@@ -174,6 +270,8 @@ from("direct:start")
 
 XML::
 +
+Notice that the while loop is turned on using the `doWhile` attribute.
++
 [source,xml]
 ----
 <route>
@@ -188,6 +286,28 @@ XML::
   <to uri="mock:result"/>
 </route>
 ----
+
+YAML::
 +
-Notice that the while loop is turned on using the `doWhile` attribute.
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:start
+      steps:
+        - loop:
+            doWhile: "true"
+            expression:
+              simple:
+                expression: "${body.length} <= 5"
+            steps:
+              - to:
+                  uri: mock:loop
+              - transform:
+                  expression:
+                    simple:
+                      expression: "A${body}"
+        - to:
+            uri: mock:result
+----
 ====
diff --git 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-bus.adoc 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-bus.adoc
index ccbde62f77fe..595824559744 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-bus.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-bus.adoc
@@ -35,4 +35,16 @@ XML::
     <to uri="jms:inbox"/>
 </route>
 ----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: file:inbox
+      steps:
+        - to:
+            uri: jms:inbox
+----
 ====
diff --git 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-channel.adoc 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-channel.adoc
index 6d3f65860533..36a6183c7536 100644
--- 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-channel.adoc
+++ 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-channel.adoc
@@ -50,14 +50,9 @@ YAML::
 ----
 - route:
     from:
-      uri: file
-      parameters:
-        directoryName: foo
+      uri: file:foo
       steps:
         - to:
-            uri: jms
-            parameters:
-              destinationType: queue
-              destinationName: foo
+            uri: jms:queue:foo
 ----
 ====
diff --git 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-endpoint.adoc 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-endpoint.adoc
index 6614e38afe92..fb3c79a196b4 100644
--- 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-endpoint.adoc
+++ 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-endpoint.adoc
@@ -54,14 +54,9 @@ YAML::
 ----
 - route:
     from:
-      uri: file
-      parameters:
-        directoryName: messages/foo
+      uri: file:messages/foo
       steps:
         - to:
-            uri: jms
-            parameters:
-              destinationType: queue
-              destinationName: foo
+            uri: jms:queue:foo
 ----
 ====
diff --git 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-expiration.adoc
 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-expiration.adoc
index bf084ea03f42..cafdb444f6c0 100644
--- 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-expiration.adoc
+++ 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-expiration.adoc
@@ -39,4 +39,16 @@ XML::
     <to uri="jms:queue:cheese?timeToLive=5000"/>
 </route>
 ----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:cheese
+      steps:
+        - to:
+            uri: jms:queue:cheese?timeToLive=5000
+----
 ====
diff --git 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-history.adoc 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-history.adoc
index db27953ad21a..f95f4b767586 100644
--- 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-history.adoc
+++ 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-history.adoc
@@ -32,7 +32,7 @@ Java::
 camelContext.setMessageHistory(true);
 ----
 
-XML::
+Spring XML::
 +
 [source,xml]
 ----
@@ -41,8 +41,17 @@ XML::
 </camelContext>
 ----
 
+Application Properties::
++
+It is often easier to configure this in the `application.properties` file:
++
+[source,properties]
+----
+camel.main.messageHistory = true
+----
 ====
 
+
 Or when using Spring Boot or Quarkus, you can enable this in the configuration 
file:
 
 [tabs]
@@ -57,12 +66,10 @@ camel.quarkus.message-history = true
 
 Spring Boot::
 +
-
 [source,properties]
 ----
-camel.springboot.message-history = true
+camel.main.message-history = true
 ----
-
 ====
 
 === Route level Message History
@@ -114,6 +121,23 @@ XML::
 </route>
 ----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    messageHistory: "true"
+    from:
+      uri: jms:cheese
+      steps:
+        - to:
+            uri: bean:validate
+        - to:
+            uri: bean:transform
+        - to:
+            uri: jms:wine
+----
+
 ====
 
 === Enabling source location information
@@ -128,13 +152,12 @@ To enable source location:
 
 Java::
 +
-
 [source,java]
 ----
 camelContext.setSourceLocationEnabled(true);
 ----
 
-XML::
+Spring XML::
 +
 [source,xml]
 ----
@@ -143,6 +166,14 @@ XML::
 </camelContext>
 ----
 
+Application Properties
++
+It is often easier to configure this in the `application.properties` file:
++
+[source,properties]
+----
+camel.main.source-location-enabled = true
+----
 ====
 
 Or when using Spring Boot or Quarkus, you can enable this in the configuration 
file:
@@ -159,12 +190,10 @@ camel.quarkus.source-location-enabled = true
 
 Spring Boot::
 +
-
 [source,properties]
 ----
-camel.springboot.source-location-enabled = true
+camel.main.source-location-enabled = true
 ----
-
 ====
 
 
@@ -278,7 +307,7 @@ Java::
 errorHandler(defaultErrorHandler().logExhaustedMessageBody(true));
 ----
 
-XML::
+Spring XML::
 +
 In XML configuring this is a bit different, as you configure this in the 
`redeliveryPolicy`
 of the `<errorHandler>` as shown:
diff --git 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-router.adoc 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-router.adoc
index 6942061852ce..705e68af0209 100644
--- 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/message-router.adoc
+++ 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/message-router.adoc
@@ -71,9 +71,7 @@ YAML::
 ----
 - route:
     from:
-      uri: direct
-      parameters:
-        name: a
+      uri: direct:a
       steps:
         - choice:
             when:
@@ -81,21 +79,15 @@ YAML::
                   expression: ${header.foo} == 'bar'
                 steps:
                   - to:
-                      uri: direct
-                      parameters:
-                        name: b
+                      uri: direct:b
               - simple:
                   expression: ${header.foo} == 'cheese'
                 steps:
                   - to:
-                      uri: direct
-                      parameters:
-                        name: c
+                      uri: direct:c
             otherwise:
               steps:
                 - to:
-                    uri: direct
-                    parameters:
-                      name: d
+                    uri: direct:d
 ----
 ====
diff --git 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/messaging-bridge.adoc 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/messaging-bridge.adoc
index c487220ffdae..f82ca14df8b8 100644
--- 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/messaging-bridge.adoc
+++ 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/messaging-bridge.adoc
@@ -41,4 +41,15 @@ XML::
 </route>
 ----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: mq:queue:foo
+      steps:
+        - to:
+            uri: jms:queue:foo
+----
 ====
diff --git 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
index e75cae1e6a5f..e80eb6ac65f0 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
@@ -59,6 +59,23 @@ XML::
     </multicast>
 </route>
 ----
+
+YAML::
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:a
+      steps:
+        - multicast:
+            steps:
+              - to:
+                  uri: direct:b
+              - to:
+                  uri: direct:c
+              - to:
+                  uri: direct:d
+----
 ====
 
 By default, Multicast EIP runs in single threaded mode, which means
@@ -98,6 +115,25 @@ XML::
     </multicast>
 </route>
 ----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:a
+      steps:
+        - multicast:
+            parallelProcessing: "true"
+            steps:
+              - to:
+                  uri: direct:b
+              - to:
+                  uri: direct:c
+              - to:
+                  uri: direct:d
+----
 ====
 
 [IMPORTANT]
@@ -147,6 +183,27 @@ XML::
     <to uri="mock:result"/>
 </route>
 ----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:a
+      steps:
+        - multicast:
+            parallelProcessing: "true"
+            steps:
+              - to:
+                  uri: direct:b
+              - to:
+                  uri: direct:c
+              - to:
+                  uri: direct:d
+        - to:
+            uri: mock:result
+----
 ====
 
 === Aggregating
@@ -180,7 +237,7 @@ We can refer to the FQN class name with `#class:` syntax as 
shown below:
 <route>
     <from uri="direct:a"/>
     <multicast parallelProcessing="true" timeout="5000"
-               aggreationStrategy="#class:com.foo.MyAggregationStrategy">
+               aggregationStrategy="#class:com.foo.MyAggregationStrategy">
         <to uri="direct:b"/>
         <to uri="direct:c"/>
         <to uri="direct:d"/>
@@ -188,6 +245,29 @@ We can refer to the FQN class name with `#class:` syntax 
as shown below:
     <to uri="mock:result"/>
 </route>
 ----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:a
+      steps:
+        - multicast:
+            aggregationStrategy: "#class:com.foo.MyAggregationStrategy"
+            timeout: 5000
+            parallelProcessing: "true"
+            steps:
+              - to:
+                  uri: direct:b
+              - to:
+                  uri: direct:c
+              - to:
+                  uri: direct:d
+        - to:
+            uri: mock:result
+----
 ====
 
 [NOTE]
@@ -266,6 +346,47 @@ XML::
     </route>
 </routes>
 ----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:start
+      steps:
+        - multicast:
+            stopOnException: "true"
+            steps:
+              - to:
+                  uri: direct:foo
+              - to:
+                  uri: direct:bar
+              - to:
+                  uri: direct:baz
+        - to:
+            uri: mock:result
+- route:
+    from:
+      uri: direct:foo
+      steps:
+        - to:
+            uri: mock:foo
+- route:
+    from:
+      uri: direct:bar
+      steps:
+        - process:
+            ref: myProcessor
+        - to:
+            uri: mock:bar
+- route:
+    from:
+      uri: direct:baz
+      steps:
+        - to:
+            uri: mock:baz
+----
 ====
 
 In the example above, then `MyProcessor` is causing a failure and throws an 
exception.
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index 779c89ffeb4a..ffb188b9e754 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -496,6 +496,7 @@ public class KameletMain extends MainCommandLineSupport {
             BeanStubReifier.registerStubBeanReifiers();
             // stub kamelet EIP
             KameletStubReifier.registerStubKameletReifiers(answer);
+            // stub languages
         }
         if (silent) {
             // silent should not include http server
@@ -666,7 +667,7 @@ public class KameletMain extends MainCommandLineSupport {
             
answer.getCamelContextExtension().addContextPlugin(DataFormatResolver.class,
                     new DependencyDownloaderDataFormatResolver(answer, 
stubPattern, silent));
             
answer.getCamelContextExtension().addContextPlugin(LanguageResolver.class,
-                    new DependencyDownloaderLanguageResolver(answer, 
stubPattern, silent));
+                    new DependencyDownloaderLanguageResolver(answer, 
stubPattern, silent, transform));
             
answer.getCamelContextExtension().addContextPlugin(TransformerResolver.class,
                     new DependencyDownloaderTransformerResolver(answer, 
stubPattern, silent));
             
answer.getCamelContextExtension().addContextPlugin(UriFactoryResolver.class,
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderLanguageResolver.java
 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderLanguageResolver.java
index 32ff45c41327..22e322dcd515 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderLanguageResolver.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderLanguageResolver.java
@@ -38,15 +38,22 @@ public final class DependencyDownloaderLanguageResolver 
extends DefaultLanguageR
             "constant", "exchangeProperty", "header", "ref", "simple", 
"variable"
     };
 
+    private static final String[] ACCEPTED_TRANSFORM_NAMES = {
+            "constant", "exchangeProperty", "header", "ref", "variable"
+    };
+
     private final CamelCatalog catalog = new DefaultCamelCatalog();
     private final DependencyDownloader downloader;
     private final String stubPattern;
     private final boolean silent;
+    private final boolean transform;
 
-    public DependencyDownloaderLanguageResolver(CamelContext camelContext, 
String stubPattern, boolean silent) {
+    public DependencyDownloaderLanguageResolver(CamelContext camelContext, 
String stubPattern, boolean silent,
+                                                boolean transform) {
         this.downloader = camelContext.hasService(DependencyDownloader.class);
         this.stubPattern = stubPattern;
         this.silent = silent;
+        this.transform = transform;
     }
 
     @Override
@@ -89,6 +96,10 @@ public final class DependencyDownloaderLanguageResolver 
extends DefaultLanguageR
             return true;
         }
 
+        if (transform) {
+            return Arrays.asList(ACCEPTED_TRANSFORM_NAMES).contains(name);
+        }
+
         // we are stubbing but need to accept the following
         if (Arrays.asList(ACCEPTED_STUB_NAMES).contains(name)) {
             return true;

Reply via email to