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 1af05c076a67 CAMEL-16861: Update docs
1af05c076a67 is described below
commit 1af05c076a6702441e6a2f6ccc2071d51d66af91
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Feb 19 11:16:57 2026 +0100
CAMEL-16861: Update docs
---
.../main/docs/modules/eips/pages/intercept.adoc | 401 +++++++++++++++++----
.../org/apache/camel/dsl/yaml/InterceptTest.groovy | 50 ++-
2 files changed, 372 insertions(+), 79 deletions(-)
diff --git
a/core/camel-core-engine/src/main/docs/modules/eips/pages/intercept.adoc
b/core/camel-core-engine/src/main/docs/modules/eips/pages/intercept.adoc
index e255c23d9787..1a091e47c349 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/intercept.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/intercept.adoc
@@ -61,7 +61,6 @@ Given the following example:
Java::
+
-
[source,java]
----
// global interceptor for all routes
@@ -72,12 +71,10 @@ from("jms:queue:order")
.to("bean:processOrder");
----
-Spring XML::
+XML::
+
[source,xml]
----
-<camelContext>
-
<!-- global interceptor for all routes -->
<intercept>
<to uri="log:hello"/>
@@ -88,8 +85,23 @@ Spring XML::
<to uri="bean:validateOrder"/>
<to uri="bean:processOrder"/>
</route>
+----
-</camelContext>
+YAML::
++
+[source,yaml]
+----
+- intercept:
+ steps:
+ - to: "log:hello"
+- route:
+ from:
+ uri: jms:queue:order
+ steps:
+ - to:
+ uri: bean:validateOrder
+ - to:
+ uri: bean:processOrder
----
====
@@ -114,7 +126,6 @@ contains the string word Hello:
Java::
+
-
[source,java]
----
intercept().onWhen(body().contains("Hello")).to("mock:intercepted");
@@ -124,29 +135,42 @@ from("jms:queue:order")
.to("bean:processOrder");
----
-Spring XML::
+XML::
+
-
[source,xml]
----
-<camelContext>
-
- <intercept>
- <onWhen>
- <simple>${in.body} contains 'Hello'</simple>
- </onWhen>
- <to uri="mock:intercepted"/>
- </intercept>
-
- <route>
- <from uri="jms:queue:order"/>
- <to uri="bean:validateOrder"/>
- <to uri="bean:processOrder"/>
- </route>
+<intercept>
+ <onWhen>
+ <simple>${body} contains 'Hello'</simple>
+ </onWhen>
+ <to uri="mock:intercepted"/>
+</intercept>
-</camelContext>
+<route>
+ <from uri="jms:queue:order"/>
+ <to uri="bean:validateOrder"/>
+ <to uri="bean:processOrder"/>
+</route>
----
+YAML::
++
+[source,yaml]
+----
+- intercept:
+ onWhen:
+ simple: "${body} contains 'Hello'"
+ steps:
+ - to: "log:hello"
+- route:
+ from:
+ uri: jms:queue:order
+ steps:
+ - to:
+ uri: bean:validateOrder
+ - to:
+ uri: bean:processOrder
+----
====
=== Controlling when to intercept using contextual information
@@ -156,7 +180,6 @@ Spring XML::
Java::
+
-
[source,java]
----
intercept().choice()
@@ -166,9 +189,8 @@ intercept().choice()
.to("direct:standardHandling");
----
-Spring XML::
+XML::
+
-
[source,xml]
----
<intercept>
@@ -183,6 +205,26 @@ Spring XML::
</choice>
</intercept>
----
+
+YAML::
++
+[source,yaml]
+----
+- intercept:
+ steps:
+ - choice:
+ when:
+ - expression:
+ simple:
+ expression: "${header.CamelInterceptedRouteId} ==
'criticalRoute'"
+ steps:
+ - to:
+ uri: direct:specialHandling
+ otherwise:
+ steps:
+ - to:
+ uri: direct:standardHandling
+----
====
=== Stop routing after being intercepted
@@ -195,7 +237,6 @@ Now suppose that if the message body contains the word
Hello we want to log and
Java::
+
-
[source,java]
----
intercept().onWhen(body().contains("Hello"))
@@ -207,13 +248,10 @@ from("jms:queue:order")
.to("bean:processOrder");
----
-Spring XML::
+XML::
+
-
[source,xml]
----
-<camelContext>
-
<intercept>
<onWhen>
<simple>${body} contains 'Hello'</simple>
@@ -227,8 +265,26 @@ Spring XML::
<to uri="bean:validateOrder"/>
<to uri="bean:processOrder"/>
</route>
+----
-</camelContext>
+YAML::
++
+[source,yaml]
+----
+- intercept:
+ onWhen:
+ simple: "${body} contains 'Hello'"
+ steps:
+ - to: "log:test"
+ - stop: {}
+- route:
+ from:
+ uri: jms:queue:order
+ steps:
+ - to:
+ uri: bean:validateOrder
+ - to:
+ uri: bean:processOrder
----
====
@@ -262,12 +318,10 @@ from("jms:queue:order")
.to("bean:processOrder");
----
-Spring XML::
+XML::
+
[source,xml]
----
-<camelContext>
-
<interceptFrom>
<to uri="log:incoming"/>
</interceptFrom>
@@ -277,10 +331,24 @@ Spring XML::
<to uri="bean:validateOrder"/>
<to uri="bean:processOrder"/>
</route>
-
-</camelContext>
----
+YAML::
++
+[source,yaml]
+----
+- interceptFrom:
+ steps:
+ - to: "log:incoming"
+- route:
+ from:
+ uri: jms:queue:order
+ steps:
+ - to:
+ uri: bean:validateOrder
+ - to:
+ uri: bean:processOrder
+----
====
If you want to only apply a specific endpoint, such as all jms endpoints,
@@ -304,12 +372,10 @@ from("file:inbox")
.to("ftp:someserver/backup")
----
-Spring XML::
+XML::
+
[source,xml]
----
-<camelContext>
-
<interceptFrom uri="jms*">
<to uri="log:incoming"/>
</intercept>
@@ -323,8 +389,30 @@ Spring XML::
<from uri="file:inbox"/>
<to uri="ftp:someserver/backup"/>
</route>
+----
-</camelContext>
+YAML::
++
+[source,yaml]
+----
+- interceptFrom:
+ uri: "jms*"
+ steps:
+ - to: "log:incoming"
+- route:
+ from:
+ uri: jms:queue:order
+ steps:
+ - to:
+ uri: bean:validateOrder
+ - to:
+ uri: bean:processOrder
+- route:
+ from:
+ uri: file:inbox
+ steps:
+ - to:
+ uri: ftp:someserver/backup
----
====
@@ -370,12 +458,10 @@ from("jms:queue:order")
.to("kafka:order");
----
-Spring XML::
+XML::
+
[source,xml]
----
-<camelContext>
-
<interceptSendToEndpoint uri="kafka*">
<to uri="bean:beforeKafka"/>
</interceptSendToEndpoint>
@@ -386,8 +472,26 @@ Spring XML::
<to uri="bean:processOrder"/>
<to uri="kafka:order"/>
</route>
+----
-</camelContext>
+YAML::
++
+[source,yaml]
+----
+- interceptSendToEndpoint:
+ uri: "kafka*"
+ steps:
+ - to: "bean:beforeKafka"
+- route:
+ from:
+ uri: jms:queue:order
+ steps:
+ - to:
+ uri: bean:validateOrder
+ - to:
+ uri: bean:processOrder
+ - to:
+ uri: kafka:order
----
====
@@ -411,12 +515,10 @@ from("jms:queue:order")
.to("kafka:order");
----
-Spring XML::
+XML::
+
[source,xml]
----
-<camelContext>
-
<interceptSendToEndpoint uri="kafka*" afterUri="bean:afterKafka">
<to uri="bean:beforeKafka"/>
</interceptSendToEndpoint>
@@ -427,10 +529,28 @@ Spring XML::
<to uri="bean:processOrder"/>
<to uri="kafka:order"/>
</route>
-
-</camelContext>
----
+YAML::
++
+[source,yaml]
+----
+- interceptSendToEndpoint:
+ uri: "kafka*"
+ afterUri: "bean:afterKafka"
+ steps:
+ - to: "bean:beforeKafka"
+- route:
+ from:
+ uri: jms:queue:order
+ steps:
+ - to:
+ uri: bean:validateOrder
+ - to:
+ uri: bean:processOrder
+ - to:
+ uri: kafka:order
+----
====
=== Skip sending to original endpoint
@@ -456,12 +576,10 @@ from("jms:queue:order")
.to("kafka:order");
----
-Spring XML::
+XML::
+
[source,xml]
----
-<camelContext>
-
<interceptSendToEndpoint uri="kafka*" skipSendToOriginalEndpoint="true">
<to uri="mock:kafka"/>
</interceptSendToEndpoint>
@@ -472,8 +590,27 @@ Spring XML::
<to uri="bean:processOrder"/>
<to uri="kafka:order"/>
</route>
+----
-</camelContext>
+YAML::
++
+[source,yaml]
+----
+- interceptSendToEndpoint:
+ uri: "kafka*"
+ skipSendToOriginalEndpoint: true
+ steps:
+ - to: "mock:kafka"
+- route:
+ from:
+ uri: jms:queue:order
+ steps:
+ - to:
+ uri: bean:validateOrder
+ - to:
+ uri: bean:processOrder
+ - to:
+ uri: kafka:order
----
====
@@ -500,12 +637,10 @@ from("jms:queue:order")
.to("kafka:order");
----
-Spring XML::
+XML::
+
[source,xml]
----
-<camelContext>
-
<interceptSendToEndpoint uri="kafka*" skipSendToOriginalEndpoint="true">
<onWhen><simple>${header.biztype} == 'TEST'</simple></onWhen>
<log message="TEST message detected - is NOT send to kafka"/>
@@ -517,8 +652,30 @@ Spring XML::
<to uri="bean:processOrder"/>
<to uri="kafka:order"/>
</route>
+----
-</camelContext>
+YAML::
++
+[source,yaml]
+----
+- interceptSendToEndpoint:
+ uri: "kafka*"
+ skipSendToOriginalEndpoint: true
+ onWhen:
+ simple: "${header.biztype} == 'TEST'"
+ steps:
+ - log:
+ message: "TEST message detected - is NOT send to kafka"
+- route:
+ from:
+ uri: jms:queue:order
+ steps:
+ - to:
+ uri: bean:validateOrder
+ - to:
+ uri: bean:processOrder
+ - to:
+ uri: kafka:order
----
====
@@ -537,10 +694,36 @@ This matches only a specific endpoint with exactly the
same URI.
For example, to intercept messages being sent to a specific JMS queue, you can
do:
+[tabs]
+====
+
+Java::
++
[source,java]
--------------------------------------
-interceptSendToEndpoint("jms:queue:cheese").to("log:smelly");
--------------------------------------
+----
+interceptSendToEndpoint("jms:queue:cheese")
+ .to("log:smelly");
+----
+
+XML::
++
+[source,xml]
+----
+ <interceptSendToEndpoint uri="jms:queue:cheese">
+ <to uri="log:smelly"/>
+ </interceptSendToEndpoint>
+----
+
+YAML::
++
+[source,yaml]
+----
+- interceptSendToEndpoint:
+ uri: "jms:queue:cheese"
+ steps:
+ - to: "log:smelly"
+----
+====
=== Intercepting when matching endpoints by wildcard
@@ -548,10 +731,36 @@ Match by wildcard allows you to match a range of
endpoints or all of a
given type.
For instance use `file:*` will match all
xref:ROOT:file-component.adoc[file-based] endpoints.
+[tabs]
+====
+
+Java::
++
[source,java]
--------------------------------------
-interceptFrom("file:*").to("log:from-file");
--------------------------------------
+----
+interceptFrom("file:*")
+ .to("log:from-file");
+----
+
+XML::
++
+[source,xml]
+----
+ <interceptFrom uri="file:*">
+ <to uri="log:from-file"/>
+ </interceptFrom>
+----
+
+YAML::
++
+[source,yaml]
+----
+- interceptFrom:
+ uri: "file:*"
+ steps:
+ - to: "log:from-file"
+----
+====
Match by wildcard works so that the pattern ends with a `\*` and that
the uri matches if it starts with the same pattern.
@@ -559,10 +768,36 @@ the uri matches if it starts with the same pattern.
For example, you can be more specific, to only match for files
from specific folders like:
+[tabs]
+====
+
+Java::
++
[source,java]
-----------------------------------------------------------
-interceptFrom("file:order/inbox/*").to("log:new-file-orders");
-----------------------------------------------------------
+----
+interceptFrom("file:order/inbox/*")
+ .to("log:new-file-orders");
+----
+
+XML::
++
+[source,xml]
+----
+ <interceptFrom uri="file:order/inbox/*">
+ <to uri="log:new-file-orders"/>
+ </interceptFrom>
+----
+
+YAML::
++
+[source,yaml]
+----
+- interceptFrom:
+ uri: "file:order/inbox/*"
+ steps:
+ - to: "log:new-file-orders"
+----
+====
=== Intercepting when matching endpoints by regular expression
@@ -570,7 +805,33 @@ Match by regular expression is just like match by wildcard
but using
regex instead. So if we want to intercept incoming messages from gold
and silver JMS queues, we can do:
+[tabs]
+====
+
+Java::
++
[source,java]
------------------------------------------------------------
-interceptFrom("jms:queue:(gold|silver)").to("seda:handleFast");
------------------------------------------------------------
+----
+interceptFrom("jms:queue:(gold|silver)")
+ .to("seda:handleFast");
+----
+
+XML::
++
+[source,xml]
+----
+ <interceptFrom uri="jms:queue:(gold|silver)">
+ <to uri="seda:handleFast"/>
+ </interceptFrom>
+----
+
+YAML::
++
+[source,yaml]
+----
+- interceptFrom:
+ uri: "jms:queue:(gold|silver)"
+ steps:
+ - to: "seda:handleFast"
+----
+====
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/InterceptTest.groovy
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/InterceptTest.groovy
index bd17c14578cf..fdf161470b25 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/InterceptTest.groovy
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/InterceptTest.groovy
@@ -22,7 +22,7 @@ import org.apache.camel.dsl.yaml.support.YamlTestSupport
class InterceptTest extends YamlTestSupport {
def "intercept"() {
setup:
- loadRoutes """
+ loadRoutes """
- intercept:
steps:
- to: "mock:intercepted"
@@ -36,17 +36,49 @@ class InterceptTest extends YamlTestSupport {
- to: "mock:result"
"""
- withMock('mock:intercepted') {
- expectedBodiesReceived("hello", "hello", "Hello Bar", "Hello
Bar")
- }
+ withMock('mock:intercepted') {
+ expectedBodiesReceived("hello", "hello", "Hello Bar", "Hello Bar")
+ }
when:
- context.start()
+ context.start()
- withTemplate {
- to('direct:start').withBody('hello').send()
- }
+ withTemplate {
+ to('direct:start').withBody('hello').send()
+ }
then:
- MockEndpoint.assertIsSatisfied(context)
+ MockEndpoint.assertIsSatisfied(context)
}
+
+ def "interceptOnWhen"() {
+ setup:
+ loadRoutes """
+ - intercept:
+ onWhen:
+ simple: "\${body} contains 'Camel'"
+ steps:
+ - to: "mock:intercepted"
+ - from:
+ uri: "direct:start"
+ steps:
+ - to: "mock:foo"
+ - to: "mock:bar"
+ - to: "mock:result"
+ """
+
+ withMock('mock:intercepted') {
+ expectedBodiesReceived("Hello Camel", "Hello Camel", "Hello Camel")
+ }
+
+ when:
+ context.start()
+
+ withTemplate {
+ to('direct:start').withBody('Hello World').send()
+ to('direct:start').withBody('Hello Camel').send()
+ }
+ then:
+ MockEndpoint.assertIsSatisfied(context)
+ }
+
}