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 4e73ce4b9df0 camel-jbang: More EIPs should support stubbing as well. 
Updated docs.
4e73ce4b9df0 is described below

commit 4e73ce4b9df04fa43525ea21e6f9a5a50278d638
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Feb 13 20:04:55 2026 +0100

    camel-jbang: More EIPs should support stubbing as well. Updated docs.
---
 .../docs/modules/eips/pages/content-enricher.adoc  | 94 ++++++++++++++++++++++
 .../modules/eips/pages/content-filter-eip.adoc     | 62 ++++++++++++++
 .../modules/eips/pages/customLoadBalancer-eip.adoc | 24 ++++++
 .../org/apache/camel/reifier/PausableReifier.java  |  2 -
 .../org/apache/camel/reifier/ResumableReifier.java |  1 -
 .../camel/main/download/StubBeanRepository.java    | 20 +++++
 .../yaml/validator/stub/StubBeanRepository.java    | 20 +++++
 7 files changed, 220 insertions(+), 3 deletions(-)

diff --git 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/content-enricher.adoc 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/content-enricher.adoc
index 76d5d0cb513c..7876c7c92fc0 100644
--- 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/content-enricher.adoc
+++ 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/content-enricher.adoc
@@ -76,6 +76,19 @@ from("direct:start")
 The fluent builder is not available in XML or YAML DSL, instead you can use
 xref:languages:simple-language.adoc[Simple] language:
 
+[tabs]
+====
+Java::
++
+[source,java]
+----
+from("direct:start")
+    .setBody(simple("${body} World!"))
+    .to("mock:result");
+----
+
+XML::
++
 [source,xml]
 ----
 <route>
@@ -87,6 +100,27 @@ xref:languages:simple-language.adoc[Simple] language:
 </route>
 ----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct
+      parameters:
+        name: start
+      steps:
+        - setBody:
+            expression:
+              simple:
+                expression: "${body} World!"
+        - to:
+            uri: mock
+            parameters:
+              name: result
+----
+====
+
 == Content enrichment using a Processor
 
 In this example, we add our own xref:manual::processor.adoc[Processor] using
@@ -104,6 +138,66 @@ from("direct:start")
     .to("mock:result");
 ----
 
+In the Java code above we used an inlined `Processor` which is harder to do 
with XML or YAML DSL.
+A good practice is to use a class for your custom `Processor` which can then 
be referenced in the DSL:
+
+[source,java]
+----
+@BindToRegistry("myProcessor")
+public class MyProcessor implements Processor {
+
+    @Override
+    public void process(Exchange exchange) {
+        Message msg = exchange.getMessage();
+        msg.setBody(msg.getBody(String.class) + " World!");
+    }
+}
+----
+
+Then you can refer to this processor by its id.
+
+[tabs]
+====
+Java::
++
+[source,java]
+----
+from("direct:start")
+    .process("myProcessor")
+    .to("mock:result");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+    <from uri="direct:start"/>
+    <process ref="myProcessor"/>
+    <to uri="mock:result"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct
+      parameters:
+        name: start
+      steps:
+        - process:
+            ref: myProcessor
+        - to:
+            uri: mock
+            parameters:
+              name: result
+----
+====
+
+
 == Content enrichment using a Bean EIP
 
 We can use xref:bean-eip.adoc[Bean EIP] to use any Java
diff --git 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc
 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc
index 615783817b05..e96421c99c87 100644
--- 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc
+++ 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc
@@ -34,6 +34,68 @@ from("direct:start")
     .to("mock:result");
 ----
 
+In the Java code above we used an inlined `Processor` which is harder to do 
with XML or YAML DSL.
+A good practice is to use a class for your custom `Processor` which can then 
be referenced in the DSL:
+
+[source,java]
+----
+@BindToRegistry("myProcessor")
+public class MyProcessor implements Processor {
+
+    @Override
+    public void process(Exchange exchange) {
+        String body = exchange.getMessage().getBody(String.class);
+        // do something with the body
+        // and replace it back
+        exchange.getMessage().setBody(body);
+    }
+}
+----
+
+Then you can refer to this processor by its id.
+
+[tabs]
+====
+Java::
++
+[source,java]
+----
+from("direct:start")
+    .process("myProcessor")
+    .to("mock:result");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+    <from uri="direct:start"/>
+    <process ref="myProcessor"/>
+    <to uri="mock:result"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct
+      parameters:
+        name: start
+      steps:
+        - process:
+            ref: myProcessor
+        - to:
+            uri: mock
+            parameters:
+              name: result
+----
+====
+
+
 == Message Content filtering using a Bean EIP
 
 We can use xref:bean-eip.adoc[Bean EIP] to use any Java
diff --git 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/customLoadBalancer-eip.adoc
 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/customLoadBalancer-eip.adoc
index 1cf4c8012026..9ec47288394e 100644
--- 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/customLoadBalancer-eip.adoc
+++ 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/customLoadBalancer-eip.adoc
@@ -58,8 +58,32 @@ XML::
   </route>
 </camelContext>
 ----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct
+      parameters:
+        name: start
+      steps:
+        - loadBalance:
+            steps:
+              - customLoadBalancer:
+                  ref: myBalancer
+              - to:
+                  uri: seda:x
+              - to:
+                  uri: seda:y
+              - to:
+                  uri: seda:z
+----
 ====
 
+=== Implementing a custom Load Balancer
+
 To implement a custom load balancer, you can extend some support classes such 
as `LoadBalancerSupport` and `SimpleLoadBalancerSupport`.
 The former supports the asynchronous routing engine, and the latter does not. 
Here is an example of a custom load balancer implementation:
 
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/PausableReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/PausableReifier.java
index d3d0cb079bbb..5963b452b21c 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/PausableReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/PausableReifier.java
@@ -64,10 +64,8 @@ public class PausableReifier extends 
ProcessorReifier<PausableDefinition> {
         Predicate<?> supplier = definition.getUntilCheckBean();
         if (supplier == null) {
             String ref = definition.getUntilCheck();
-
             supplier = mandatoryLookup(ref, Predicate.class);
         }
-
         return supplier;
     }
 }
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ResumableReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ResumableReifier.java
index 7f2a9c8d5039..84917c236654 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ResumableReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ResumableReifier.java
@@ -61,7 +61,6 @@ public class ResumableReifier extends 
ProcessorReifier<ResumableDefinition> {
         ResumeStrategy strategy = definition.getResumeStrategyBean();
         if (strategy == null) {
             String ref = parseString(definition.getResumeStrategy());
-
             if (ref != null) {
                 strategy = mandatoryLookup(ref, ResumeStrategy.class);
             } else {
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/StubBeanRepository.java
 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/StubBeanRepository.java
index 20466d4a4d98..242f8a4ca21d 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/StubBeanRepository.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/StubBeanRepository.java
@@ -22,9 +22,17 @@ import java.util.Set;
 import java.util.UUID;
 
 import org.apache.camel.AggregationStrategy;
+import org.apache.camel.Processor;
 import org.apache.camel.processor.DefaultClaimCheckRepository;
+import org.apache.camel.processor.DisabledProcessor;
+import org.apache.camel.processor.aggregate.AggregateController;
+import org.apache.camel.processor.aggregate.DefaultAggregateController;
 import org.apache.camel.processor.aggregate.GroupedBodyAggregationStrategy;
 import org.apache.camel.processor.aggregate.MemoryAggregationRepository;
+import org.apache.camel.processor.loadbalancer.LoadBalancer;
+import org.apache.camel.processor.loadbalancer.RoundRobinLoadBalancer;
+import org.apache.camel.saga.CamelSagaService;
+import org.apache.camel.saga.InMemorySagaService;
 import org.apache.camel.spi.AggregationRepository;
 import org.apache.camel.spi.BeanRepository;
 import org.apache.camel.spi.ClaimCheckRepository;
@@ -97,6 +105,18 @@ public class StubBeanRepository implements BeanRepository {
         if (AggregationStrategy.class.isAssignableFrom(type)) {
             return (T) new GroupedBodyAggregationStrategy();
         }
+        if (AggregateController.class.isAssignableFrom(type)) {
+            return (T) new DefaultAggregateController();
+        }
+        if (CamelSagaService.class.isAssignableFrom(type)) {
+            return (T) new InMemorySagaService();
+        }
+        if (LoadBalancer.class.isAssignableFrom(type)) {
+            return (T) new RoundRobinLoadBalancer();
+        }
+        if (Processor.class.isAssignableFrom(type)) {
+            return (T) new DisabledProcessor();
+        }
         return null;
     }
 }
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/main/java/org/apache/camel/dsl/yaml/validator/stub/StubBeanRepository.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/main/java/org/apache/camel/dsl/yaml/validator/stub/StubBeanRepository.java
index 1ba9aa3a93fd..f0da5e33b941 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/main/java/org/apache/camel/dsl/yaml/validator/stub/StubBeanRepository.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/main/java/org/apache/camel/dsl/yaml/validator/stub/StubBeanRepository.java
@@ -22,9 +22,17 @@ import java.util.Set;
 import java.util.UUID;
 
 import org.apache.camel.AggregationStrategy;
+import org.apache.camel.Processor;
 import org.apache.camel.processor.DefaultClaimCheckRepository;
+import org.apache.camel.processor.DisabledProcessor;
+import org.apache.camel.processor.aggregate.AggregateController;
+import org.apache.camel.processor.aggregate.DefaultAggregateController;
 import org.apache.camel.processor.aggregate.GroupedBodyAggregationStrategy;
 import org.apache.camel.processor.aggregate.MemoryAggregationRepository;
+import org.apache.camel.processor.loadbalancer.LoadBalancer;
+import org.apache.camel.processor.loadbalancer.RoundRobinLoadBalancer;
+import org.apache.camel.saga.CamelSagaService;
+import org.apache.camel.saga.InMemorySagaService;
 import org.apache.camel.spi.AggregationRepository;
 import org.apache.camel.spi.BeanRepository;
 import org.apache.camel.spi.ClaimCheckRepository;
@@ -83,6 +91,18 @@ public class StubBeanRepository implements BeanRepository {
         if (AggregationStrategy.class.isAssignableFrom(type)) {
             return (T) new GroupedBodyAggregationStrategy();
         }
+        if (AggregateController.class.isAssignableFrom(type)) {
+            return (T) new DefaultAggregateController();
+        }
+        if (CamelSagaService.class.isAssignableFrom(type)) {
+            return (T) new InMemorySagaService();
+        }
+        if (LoadBalancer.class.isAssignableFrom(type)) {
+            return (T) new RoundRobinLoadBalancer();
+        }
+        if (Processor.class.isAssignableFrom(type)) {
+            return (T) new DisabledProcessor();
+        }
         return null;
     }
 }

Reply via email to