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

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

commit cbf84d90b2fae4fc7bbcad1b5ac1e8f920c475c7
Author: Christoph Deppisch <[email protected]>
AuthorDate: Thu Oct 15 13:51:22 2026 +0200

    CAMEL-25378: Restore name field with accessor overrides and add missing 
tests
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../apache/camel/catalog/components/citrus.json    |  2 +-
 .../camel/catalog/docs/citrus-component.adoc       | 13 ++++
 .../component/citrus/CitrusEndpointUriFactory.java |  2 +-
 .../org/apache/camel/component/citrus/citrus.json  |  2 +-
 .../src/main/docs/citrus-component.adoc            | 13 ++++
 .../camel/component/citrus/CitrusEndpoint.java     | 21 +++++-
 .../citrus/CitrusValidationProcessor.java          |  4 +-
 .../citrus/CitrusReceiveErrorHandlingTest.java     | 85 ++++++++++++++++++++++
 .../citrus/CitrusSequentialValidationTest.java     | 14 ++++
 .../camel/component/citrus/CitrusVariableTest.java | 85 ++++++++++++++++++++++
 .../builder/endpoint/StaticEndpointBuilders.java   | 10 ++-
 .../endpoint/dsl/CitrusEndpointBuilderFactory.java | 10 ++-
 12 files changed, 243 insertions(+), 18 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/citrus.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/citrus.json
index 76941d15c7f3..058471240c86 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/citrus.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/citrus.json
@@ -31,7 +31,7 @@
   },
   "properties": {
     "operation": { "index": 0, "kind": "path", "displayName": "Operation", 
"group": "producer", "label": "", "required": true, "type": "enum", "javaType": 
"java.lang.String", "enum": [ "validate", "receive" ], "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "The 
operation to perform. 'validate' validates exchanges without modifying them. 
'receive' validates exchanges and returns a simulated response." },
-    "name": { "index": 1, "kind": "path", "displayName": "Name", "group": 
"producer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Name of mock endpoint" },
+    "name": { "index": 1, "kind": "path", "displayName": "Name", "group": 
"producer", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "A unique name to identify this endpoint. Allows multiple Citrus 
endpoints with different validation expectations in the same route." },
     "assertPeriod": { "index": 2, "kind": "parameter", "displayName": "Assert 
Period", "group": "producer", "label": "producer", "required": false, "type": 
"duration", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "description": "Sets a grace period after which the mock will 
re-assert to ensure the preliminary assertion is still valid. This is used, for 
example, to assert that exactly a number of messages arrive. For example, if 
the expected count was set  [...]
     "expectedCount": { "index": 3, "kind": "parameter", "displayName": 
"Expected Count", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": -1, "description": "Specifies the expected 
number of message exchanges that should be received by this mock. Beware: If 
you want to expect that 0 messages, then take extra care, as 0 matches when the 
tests starts, so you need to s [...]
     "messageType": { "index": 4, "kind": "parameter", "displayName": "Message 
Type", "group": "producer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "The message type for validation. Determines 
which Citrus validation module is used. Supported values: json, xml, yaml, 
plaintext." },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/citrus-component.adoc
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/citrus-component.adoc
index faf89bdbd5c5..3b223533a49f 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/citrus-component.adoc
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/citrus-component.adoc
@@ -263,6 +263,8 @@ citrus.assertIsSatisfied();
 
 You can also use `validate(index)` to target a specific exchange by its 
1-based position.
 
+Indexed specs (`validate()`, `validate(index)`, `when().receive()`) imply a 
minimum message count equal to the highest index, unless the test sets 
`expectedMessageCount(...)` or a larger `expectedMinimumMessageCount(...)`. So 
`assertIsSatisfied()` fails when fewer exchanges arrive.
+
 When both `validate(index)` and `validateAll()` are configured, the indexed 
spec takes priority —
 it replaces `validateAll()` for that exchange entirely (the two are never 
combined). The
 `validateAll()` spec acts as a fallback for exchanges that have no matching 
indexed spec.
@@ -381,6 +383,17 @@ citrus.when().receive().then().respond()
 citrus.expectedMessageCount(1);
 ----
 
+=== Error handling and redelivery
+
+The two operations handle validation failures differently with respect to 
Camel's error handling:
+
+* **`validate` operation** — validation failures are captured internally and 
the exception is
+  cleared from the exchange. Camel's `onException` handlers and redelivery 
policies do *not*
+  trigger. Failures surface only when `assertIsSatisfied()` is called.
+* **`receive` operation** — validation failures remain on the exchange as an 
exception. Camel's
+  `onException` handlers and redelivery policies *do* trigger, which matches 
the expected
+  behavior for a request/response endpoint where callers need to see errors.
+
 === Exchange properties and variables as Citrus variables
 
 All exchange properties and exchange variables are automatically propagated to 
the Citrus test
diff --git 
a/components/camel-test/camel-test-citrus/src/generated/java/org/apache/camel/component/citrus/CitrusEndpointUriFactory.java
 
b/components/camel-test/camel-test-citrus/src/generated/java/org/apache/camel/component/citrus/CitrusEndpointUriFactory.java
index 64ff55b2ec76..54ed2323f209 100644
--- 
a/components/camel-test/camel-test-citrus/src/generated/java/org/apache/camel/component/citrus/CitrusEndpointUriFactory.java
+++ 
b/components/camel-test/camel-test-citrus/src/generated/java/org/apache/camel/component/citrus/CitrusEndpointUriFactory.java
@@ -60,7 +60,7 @@ public class CitrusEndpointUriFactory extends 
org.apache.camel.support.component
         Map<String, Object> copy = copyParameters(properties);
 
         uri = buildPathParameter(syntax, uri, "operation", null, true, copy);
-        uri = buildPathParameter(syntax, uri, "name", null, true, copy);
+        uri = buildPathParameter(syntax, uri, "name", null, false, copy);
         uri = buildQueryParameters(uri, copy, encode);
         return uri;
     }
diff --git 
a/components/camel-test/camel-test-citrus/src/generated/resources/META-INF/org/apache/camel/component/citrus/citrus.json
 
b/components/camel-test/camel-test-citrus/src/generated/resources/META-INF/org/apache/camel/component/citrus/citrus.json
index 76941d15c7f3..058471240c86 100644
--- 
a/components/camel-test/camel-test-citrus/src/generated/resources/META-INF/org/apache/camel/component/citrus/citrus.json
+++ 
b/components/camel-test/camel-test-citrus/src/generated/resources/META-INF/org/apache/camel/component/citrus/citrus.json
@@ -31,7 +31,7 @@
   },
   "properties": {
     "operation": { "index": 0, "kind": "path", "displayName": "Operation", 
"group": "producer", "label": "", "required": true, "type": "enum", "javaType": 
"java.lang.String", "enum": [ "validate", "receive" ], "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "The 
operation to perform. 'validate' validates exchanges without modifying them. 
'receive' validates exchanges and returns a simulated response." },
-    "name": { "index": 1, "kind": "path", "displayName": "Name", "group": 
"producer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Name of mock endpoint" },
+    "name": { "index": 1, "kind": "path", "displayName": "Name", "group": 
"producer", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "A unique name to identify this endpoint. Allows multiple Citrus 
endpoints with different validation expectations in the same route." },
     "assertPeriod": { "index": 2, "kind": "parameter", "displayName": "Assert 
Period", "group": "producer", "label": "producer", "required": false, "type": 
"duration", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "description": "Sets a grace period after which the mock will 
re-assert to ensure the preliminary assertion is still valid. This is used, for 
example, to assert that exactly a number of messages arrive. For example, if 
the expected count was set  [...]
     "expectedCount": { "index": 3, "kind": "parameter", "displayName": 
"Expected Count", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": -1, "description": "Specifies the expected 
number of message exchanges that should be received by this mock. Beware: If 
you want to expect that 0 messages, then take extra care, as 0 matches when the 
tests starts, so you need to s [...]
     "messageType": { "index": 4, "kind": "parameter", "displayName": "Message 
Type", "group": "producer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "The message type for validation. Determines 
which Citrus validation module is used. Supported values: json, xml, yaml, 
plaintext." },
diff --git 
a/components/camel-test/camel-test-citrus/src/main/docs/citrus-component.adoc 
b/components/camel-test/camel-test-citrus/src/main/docs/citrus-component.adoc
index faf89bdbd5c5..3b223533a49f 100644
--- 
a/components/camel-test/camel-test-citrus/src/main/docs/citrus-component.adoc
+++ 
b/components/camel-test/camel-test-citrus/src/main/docs/citrus-component.adoc
@@ -263,6 +263,8 @@ citrus.assertIsSatisfied();
 
 You can also use `validate(index)` to target a specific exchange by its 
1-based position.
 
+Indexed specs (`validate()`, `validate(index)`, `when().receive()`) imply a 
minimum message count equal to the highest index, unless the test sets 
`expectedMessageCount(...)` or a larger `expectedMinimumMessageCount(...)`. So 
`assertIsSatisfied()` fails when fewer exchanges arrive.
+
 When both `validate(index)` and `validateAll()` are configured, the indexed 
spec takes priority —
 it replaces `validateAll()` for that exchange entirely (the two are never 
combined). The
 `validateAll()` spec acts as a fallback for exchanges that have no matching 
indexed spec.
@@ -381,6 +383,17 @@ citrus.when().receive().then().respond()
 citrus.expectedMessageCount(1);
 ----
 
+=== Error handling and redelivery
+
+The two operations handle validation failures differently with respect to 
Camel's error handling:
+
+* **`validate` operation** — validation failures are captured internally and 
the exception is
+  cleared from the exchange. Camel's `onException` handlers and redelivery 
policies do *not*
+  trigger. Failures surface only when `assertIsSatisfied()` is called.
+* **`receive` operation** — validation failures remain on the exchange as an 
exception. Camel's
+  `onException` handlers and redelivery policies *do* trigger, which matches 
the expected
+  behavior for a request/response endpoint where callers need to see errors.
+
 === Exchange properties and variables as Citrus variables
 
 All exchange properties and exchange variables are automatically propagated to 
the Citrus test
diff --git 
a/components/camel-test/camel-test-citrus/src/main/java/org/apache/camel/component/citrus/CitrusEndpoint.java
 
b/components/camel-test/camel-test-citrus/src/main/java/org/apache/camel/component/citrus/CitrusEndpoint.java
index 614059cc7626..bf58be0ad4df 100644
--- 
a/components/camel-test/camel-test-citrus/src/main/java/org/apache/camel/component/citrus/CitrusEndpoint.java
+++ 
b/components/camel-test/camel-test-citrus/src/main/java/org/apache/camel/component/citrus/CitrusEndpoint.java
@@ -40,6 +40,10 @@ public class CitrusEndpoint extends MockEndpoint {
     @Metadata(required = true)
     private String operation;
 
+    @UriPath(description = "A unique name to identify this endpoint. Allows 
multiple Citrus endpoints"
+                           + " with different validation expectations in the 
same route.")
+    private String name;
+
     @UriParam(description = "The message type for validation. Determines which 
Citrus validation module is used."
                             + " Supported values: json, xml, yaml, plaintext.")
     private String messageType;
@@ -146,6 +150,17 @@ public class CitrusEndpoint extends MockEndpoint {
 
     // --- Getters and setters ---
 
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+        super.setName(name);
+    }
+
     public String getOperation() {
         return operation;
     }
@@ -171,6 +186,8 @@ public class CitrusEndpoint extends MockEndpoint {
         }
 
         public WhenMessageValidationSpec receive(int index) {
+            // registers a validation-only processor now so receive() without 
respond() still validates;
+            // ThenSpec.respond() overwrites this registration with a 
validation+response processor
             WhenMessageValidationSpec messageValidationSpec = new 
WhenMessageValidationSpec(index);
             whenExchangeReceived(index, 
createProcessor(messageValidationSpec));
             applyImpliedMinimumCount(index);
@@ -246,8 +263,4 @@ public class CitrusEndpoint extends MockEndpoint {
         }
     }
 
-    // --- Validation spec for expected messages ---
-
-    // --- Response spec for simulated responses ---
-
 }
diff --git 
a/components/camel-test/camel-test-citrus/src/main/java/org/apache/camel/component/citrus/CitrusValidationProcessor.java
 
b/components/camel-test/camel-test-citrus/src/main/java/org/apache/camel/component/citrus/CitrusValidationProcessor.java
index c9e139140c6e..47af6a7b5510 100644
--- 
a/components/camel-test/camel-test-citrus/src/main/java/org/apache/camel/component/citrus/CitrusValidationProcessor.java
+++ 
b/components/camel-test/camel-test-citrus/src/main/java/org/apache/camel/component/citrus/CitrusValidationProcessor.java
@@ -215,9 +215,7 @@ class CitrusValidationProcessor implements Processor {
             if (key.startsWith("citrus.") || key.startsWith("CITRUS_")) {
                 continue;
             }
-            if (!exchange.getProperties().containsKey(key)) {
-                exchange.setVariable(key, entry.getValue());
-            }
+            exchange.setVariable(key, entry.getValue());
         }
     }
 }
diff --git 
a/components/camel-test/camel-test-citrus/src/test/java/org/apache/camel/component/citrus/CitrusReceiveErrorHandlingTest.java
 
b/components/camel-test/camel-test-citrus/src/test/java/org/apache/camel/component/citrus/CitrusReceiveErrorHandlingTest.java
new file mode 100644
index 000000000000..11192d5aa55b
--- /dev/null
+++ 
b/components/camel-test/camel-test-citrus/src/test/java/org/apache/camel/component/citrus/CitrusReceiveErrorHandlingTest.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.citrus;
+
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit6.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+class CitrusReceiveErrorHandlingTest extends CamelTestSupport {
+
+    @Test
+    void validateOperationDoesNotTriggerOnException() throws Exception {
+        CitrusEndpoint citrus = 
context.getEndpoint("citrus:validate/test?messageType=json", 
CitrusEndpoint.class);
+        MockEndpoint handled = context.getEndpoint("mock:handled", 
MockEndpoint.class);
+
+        citrus.validateAll().body("{\"action\": \"expected\"}");
+        citrus.expectedMessageCount(1);
+        handled.expectedMessageCount(0);
+
+        template.sendBody("direct:validate", "{\"action\": \"wrong\"}");
+
+        handled.assertIsSatisfied();
+        assertThat(citrus.getReceivedCounter()).isEqualTo(1);
+        assertThat(citrus.getFailures()).hasSize(1);
+        assertThatThrownBy(citrus::assertIsSatisfied)
+                .isInstanceOf(AssertionError.class);
+    }
+
+    @Test
+    void receiveOperationTriggersOnException() throws Exception {
+        CitrusEndpoint citrus = 
context.getEndpoint("citrus:receive/service?messageType=json", 
CitrusEndpoint.class);
+        MockEndpoint handled = context.getEndpoint("mock:handled", 
MockEndpoint.class);
+
+        citrus.when().receiveAll()
+                .body("{\"action\": \"expected\"}")
+                .then().respond()
+                .body("{\"result\": \"ok\"}");
+        citrus.expectedMessageCount(1);
+        handled.expectedMessageCount(1);
+
+        template.send("direct:receive", exchange -> {
+            exchange.getIn().setBody("{\"action\": \"wrong\"}");
+        });
+
+        handled.assertIsSatisfied();
+        assertThat(citrus.getReceivedCounter()).isEqualTo(1);
+    }
+
+    @Override
+    protected RoutesBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                onException(Exception.class)
+                        .handled(true)
+                        .to("mock:handled");
+
+                from("direct:validate")
+                        .to("citrus:validate/test?messageType=json");
+
+                from("direct:receive")
+                        .to("citrus:receive/service?messageType=json");
+            }
+        };
+    }
+}
diff --git 
a/components/camel-test/camel-test-citrus/src/test/java/org/apache/camel/component/citrus/CitrusSequentialValidationTest.java
 
b/components/camel-test/camel-test-citrus/src/test/java/org/apache/camel/component/citrus/CitrusSequentialValidationTest.java
index 09f98f7e8ae9..9b25baefa07a 100644
--- 
a/components/camel-test/camel-test-citrus/src/test/java/org/apache/camel/component/citrus/CitrusSequentialValidationTest.java
+++ 
b/components/camel-test/camel-test-citrus/src/test/java/org/apache/camel/component/citrus/CitrusSequentialValidationTest.java
@@ -130,6 +130,20 @@ class CitrusSequentialValidationTest extends 
CamelTestSupport {
                 .hasCauseInstanceOf(ValidationException.class);
     }
 
+    @Test
+    void shouldFailWhenImpliedMinimumCountNotMet() {
+        CitrusEndpoint citrus = 
context.getEndpoint("citrus:validate/test?messageType=json", 
CitrusEndpoint.class);
+
+        citrus.validate(1).body("{\"event\": \"first\"}");
+        citrus.validate(2).body("{\"event\": \"second\"}");
+        citrus.validate(3).body("{\"event\": \"third\"}");
+
+        template.sendBody("direct:start", "{\"event\": \"first\"}");
+
+        assertThatThrownBy(citrus::assertIsSatisfied)
+                .isInstanceOf(AssertionError.class);
+    }
+
     @Override
     protected RoutesBuilder createRouteBuilder() {
         return new RouteBuilder() {
diff --git 
a/components/camel-test/camel-test-citrus/src/test/java/org/apache/camel/component/citrus/CitrusVariableTest.java
 
b/components/camel-test/camel-test-citrus/src/test/java/org/apache/camel/component/citrus/CitrusVariableTest.java
new file mode 100644
index 000000000000..f3081e8f8ba4
--- /dev/null
+++ 
b/components/camel-test/camel-test-citrus/src/test/java/org/apache/camel/component/citrus/CitrusVariableTest.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.citrus;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit6.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class CitrusVariableTest extends CamelTestSupport {
+
+    @Test
+    void shouldPropagateExchangeVariableToCitrusContext() throws Exception {
+        CitrusEndpoint citrus = 
context.getEndpoint("citrus:validate/test?messageType=json", 
CitrusEndpoint.class);
+
+        citrus.validateAll().body("{\"greeting\": \"Hello ${userName}!\"}");
+        citrus.expectedMessageCount(1);
+
+        template.send("direct:start", exchange -> {
+            exchange.setVariable("userName", "World");
+            exchange.getIn().setBody("{\"greeting\": \"Hello World!\"}");
+        });
+
+        citrus.assertIsSatisfied();
+    }
+
+    @Test
+    void shouldExtractVariableFromBody() throws Exception {
+        CitrusEndpoint citrus = 
context.getEndpoint("citrus:validate/test?messageType=json", 
CitrusEndpoint.class);
+
+        citrus.validateAll().body("{\"orderId\": 
\"@variable('extractedId')@\", \"status\": \"created\"}");
+        citrus.expectedMessageCount(1);
+
+        Exchange result = template.send("direct:start", exchange -> {
+            exchange.getIn().setBody("{\"orderId\": \"ABC-123\", \"status\": 
\"created\"}");
+        });
+
+        citrus.assertIsSatisfied();
+        assertThat(result.getVariable("extractedId")).isEqualTo("ABC-123");
+    }
+
+    @Test
+    void shouldExtractVariableEvenWhenPropertyExists() throws Exception {
+        CitrusEndpoint citrus = 
context.getEndpoint("citrus:validate/test?messageType=json", 
CitrusEndpoint.class);
+
+        citrus.validateAll().body("{\"orderId\": \"@variable('orderId')@\", 
\"status\": \"ok\"}");
+        citrus.expectedMessageCount(1);
+
+        Exchange result = template.send("direct:start", exchange -> {
+            exchange.setProperty("orderId", "old-value");
+            exchange.getIn().setBody("{\"orderId\": \"new-value\", \"status\": 
\"ok\"}");
+        });
+
+        citrus.assertIsSatisfied();
+        assertThat(result.getVariable("orderId")).isEqualTo("new-value");
+        assertThat(result.getProperty("orderId")).isEqualTo("old-value");
+    }
+
+    @Override
+    protected RoutesBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                
from("direct:start").to("citrus:validate/test?messageType=json");
+            }
+        };
+    }
+}
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
index 9d1bf697ccc6..bef527f62ada 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
@@ -3390,8 +3390,9 @@ public class StaticEndpointBuilders {
      * response.
      * There are 2 enums and the value can be one of: validate, receive
      * 
-     * Path parameter: name (required)
-     * Name of mock endpoint
+     * Path parameter: name
+     * A unique name to identify this endpoint. Allows multiple Citrus 
endpoints
+     * with different validation expectations in the same route.
      * 
      * @param path operation/name
      * @return the dsl builder
@@ -3415,8 +3416,9 @@ public class StaticEndpointBuilders {
      * response.
      * There are 2 enums and the value can be one of: validate, receive
      * 
-     * Path parameter: name (required)
-     * Name of mock endpoint
+     * Path parameter: name
+     * A unique name to identify this endpoint. Allows multiple Citrus 
endpoints
+     * with different validation expectations in the same route.
      * 
      * @param componentName to use a custom component name for the endpoint
      * instead of the default name
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/CitrusEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/CitrusEndpointBuilderFactory.java
index 5c1bcbe5036b..57bbadf83f6b 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/CitrusEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/CitrusEndpointBuilderFactory.java
@@ -592,8 +592,9 @@ public interface CitrusEndpointBuilderFactory {
          * response.
          * There are 2 enums and the value can be one of: validate, receive
          * 
-         * Path parameter: name (required)
-         * Name of mock endpoint
+         * Path parameter: name
+         * A unique name to identify this endpoint. Allows multiple Citrus
+         * endpoints with different validation expectations in the same route.
          * 
          * @param path operation/name
          * @return the dsl builder
@@ -617,8 +618,9 @@ public interface CitrusEndpointBuilderFactory {
          * response.
          * There are 2 enums and the value can be one of: validate, receive
          * 
-         * Path parameter: name (required)
-         * Name of mock endpoint
+         * Path parameter: name
+         * A unique name to identify this endpoint. Allows multiple Citrus
+         * endpoints with different validation expectations in the same route.
          * 
          * @param componentName to use a custom component name for the endpoint
          * instead of the default name

Reply via email to