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;