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 616bbe8b2459 CAMEL-24697: camel-yaml-dsl - schema must accept
inheritErrorHandler and the resequence expression wrapper; jaxb needs a
contextPath in the docs (#26355)
616bbe8b2459 is described below
commit 616bbe8b2459610f7a6a8cd458f67b28c6cf2362
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Sep 13 15:58:35 2026 +0200
CAMEL-24697: camel-yaml-dsl - schema must accept inheritErrorHandler and
the resequence expression wrapper; jaxb needs a contextPath in the docs (#26355)
CAMEL-24697: camel-yaml-dsl - schema must accept inheritErrorHandler, the
resequence expression wrapper, and jaxb needs a contextPath in the docs
Three cases where camel validate yaml rejected EIP documentation examples
that the runtime accepts, or where the docs showed a form the runtime does not
accept:
- inheritErrorHandler: GenerateYamlSchemaMojo skipped the option everywhere
except on loadBalance, which does not have it. The only two definitions that
declare it, circuitBreaker and failoverLoadBalancer, are exactly the ones the
docs use it on, and the generated deserializers already accept it. The skip is
removed.
- resequence with the expression: wrapper matched two branches of its oneOf
group. The group's not branch is built from the optional alternatives only, and
the expression of resequence (and of the setHeaders/setVariables entries) is a
required one, so it was missing from the exclusion list. The generator now
completes the not branch with every alternative of a group that has one. Groups
without an optional alternative, such as the data formats of marshal, are
unchanged so marshal: {} [...]
- jaxb: contextPath is required in the model and in the XSD, but the
marshal and unmarshal EIP pages showed jaxb with no context path in all three
DSL tabs. The examples now pass a context path.
With this all 11 resequence examples and the marshal/unmarshal examples
validate; the remaining messages on the fault-tolerance, resilience4j and
failoverLoadBalancer pages are the scalar-type cases of CAMEL-24694.
Signed-off-by: Claus Ibsen <[email protected]>
Co-authored-by: Claude Fable 5.1 <[email protected]>
---
.../org/apache/camel/catalog/docs/marshal-eip.adoc | 14 ++--
.../apache/camel/catalog/docs/unmarshal-eip.adoc | 17 ++--
.../camel/catalog/schemas/camelYamlDsl-model.json | 22 +++++
.../main/docs/modules/eips/pages/marshal-eip.adoc | 14 ++--
.../docs/modules/eips/pages/unmarshal-eip.adoc | 17 ++--
.../maven/dsl/yaml/GenerateYamlSchemaMojo.java | 49 ++++++++----
.../validator/YamlValidatorSchemaGroupsTest.java | 93 ++++++++++++++++++++++
.../src/test/resources/inherit-error-handler.yaml | 37 +++++++++
.../test/resources/marshal-without-dataformat.yaml | 25 ++++++
.../resources/oneof-group-expression-wrapper.yaml | 39 +++++++++
.../resources/schema/camelYamlDsl-canonical.json | 12 +++
.../resources/schema/camelYamlDsl-model.json | 22 +++++
.../generated/resources/schema/camelYamlDsl.json | 16 ++++
13 files changed, 336 insertions(+), 41 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/marshal-eip.adoc
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/marshal-eip.adoc
index 1ed7d76b9058..90a501c29f47 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/marshal-eip.adoc
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/marshal-eip.adoc
@@ -39,9 +39,9 @@ Java::
[source,java]
----
from("file:inbox/xml")
- .unmarshal().jaxb()
+ .unmarshal().jaxb("com.acme.order")
.to("bean:validateOrder")
- .marshal().jaxb()
+ .marshal().jaxb("com.acme.order")
.to("jms:queue:order");
----
@@ -51,9 +51,9 @@ XML::
----
<route>
<from uri="file:inbox/xml"/>
- <unmarshal><jaxb/></unmarshal>
+ <unmarshal><jaxb contextPath="com.acme.order"/></unmarshal>
<to uri="bean:validateOrder"/>
- <marshal><jaxb/></marshal>
+ <marshal><jaxb contextPath="com.acme.order"/></marshal>
<to uri="jms:queue:order"/>
</route>
----
@@ -67,11 +67,13 @@ YAML::
uri: file:inbox/xml
steps:
- unmarshal:
- jaxb: {}
+ jaxb:
+ contextPath: com.acme.order
- to:
uri: bean:validateOrder
- marshal:
- jaxb: {}
+ jaxb:
+ contextPath: com.acme.order
- to:
uri: jms:queue:order
----
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/unmarshal-eip.adoc
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/unmarshal-eip.adoc
index 8d85bebf81f3..572d60d9609c 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/unmarshal-eip.adoc
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/unmarshal-eip.adoc
@@ -40,9 +40,9 @@ Java::
[source,java]
----
from("file:inbox/xml")
- .unmarshal().jaxb()
+ .unmarshal().jaxb("com.acme.order")
.to("bean:validateOrder")
- .marshal().jaxb()
+ .marshal().jaxb("com.acme.order")
.to("jms:queue:order");
----
@@ -52,9 +52,9 @@ XML::
----
<route>
<from uri="file:inbox/xml"/>
- <unmarshal><jaxb/></unmarshal>
+ <unmarshal><jaxb contextPath="com.acme.order"/></unmarshal>
<to uri="bean:validateOrder"/>
- <marshal><jaxb/></marshal>
+ <marshal><jaxb contextPath="com.acme.order"/></marshal>
<to uri="jms:queue:order"/>
</route>
----
@@ -68,11 +68,13 @@ YAML::
uri: file:inbox/xml
steps:
- unmarshal:
- jaxb: {}
+ jaxb:
+ contextPath: com.acme.order
- to:
uri: bean:validateOrder
- marshal:
- jaxb: {}
+ jaxb:
+ contextPath: com.acme.order
- to:
uri: jms:queue:order
----
@@ -119,7 +121,8 @@ YAML::
steps:
- unmarshal:
allowNullBody: "true"
- jaxb: {}
+ jaxb:
+ contextPath: com.acme.order
- to:
uri: bean:validateOrder
----
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
index f2c0369f14ce..97fbc712fc37 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
@@ -1870,6 +1870,17 @@
"kind" : "attribute",
"index" : 4,
"group" : "common"
+ }, {
+ "name" : "inheritErrorHandler",
+ "type" : "boolean",
+ "description" : "Whether to inherit Camel error handling during
circuit breaker. By default, Camel error handler is turned off.",
+ "title" : "Inherit Error Handler",
+ "default" : "false",
+ "displayName" : "Inherit Error Handler",
+ "kind" : "attribute",
+ "index" : 5,
+ "group" : "advanced",
+ "label" : "advanced"
}, {
"name" : "resilience4jConfiguration",
"type" : "object",
@@ -16338,6 +16349,17 @@
"kind" : "attribute",
"index" : 4,
"group" : "common"
+ }, {
+ "name" : "inheritErrorHandler",
+ "type" : "boolean",
+ "description" : "Whether to inherit the error handler. If turned off,
the load balancer will fail over immediately on an error instead of waiting for
Camel error handler to exhaust retries.",
+ "title" : "Inherit Error Handler",
+ "default" : "true",
+ "displayName" : "Inherit Error Handler",
+ "kind" : "attribute",
+ "index" : 5,
+ "group" : "advanced",
+ "label" : "advanced"
} ]
},
"randomLoadBalancer" : {
diff --git
a/core/camel-core-engine/src/main/docs/modules/eips/pages/marshal-eip.adoc
b/core/camel-core-engine/src/main/docs/modules/eips/pages/marshal-eip.adoc
index 1ed7d76b9058..90a501c29f47 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/marshal-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/marshal-eip.adoc
@@ -39,9 +39,9 @@ Java::
[source,java]
----
from("file:inbox/xml")
- .unmarshal().jaxb()
+ .unmarshal().jaxb("com.acme.order")
.to("bean:validateOrder")
- .marshal().jaxb()
+ .marshal().jaxb("com.acme.order")
.to("jms:queue:order");
----
@@ -51,9 +51,9 @@ XML::
----
<route>
<from uri="file:inbox/xml"/>
- <unmarshal><jaxb/></unmarshal>
+ <unmarshal><jaxb contextPath="com.acme.order"/></unmarshal>
<to uri="bean:validateOrder"/>
- <marshal><jaxb/></marshal>
+ <marshal><jaxb contextPath="com.acme.order"/></marshal>
<to uri="jms:queue:order"/>
</route>
----
@@ -67,11 +67,13 @@ YAML::
uri: file:inbox/xml
steps:
- unmarshal:
- jaxb: {}
+ jaxb:
+ contextPath: com.acme.order
- to:
uri: bean:validateOrder
- marshal:
- jaxb: {}
+ jaxb:
+ contextPath: com.acme.order
- to:
uri: jms:queue:order
----
diff --git
a/core/camel-core-engine/src/main/docs/modules/eips/pages/unmarshal-eip.adoc
b/core/camel-core-engine/src/main/docs/modules/eips/pages/unmarshal-eip.adoc
index 8d85bebf81f3..572d60d9609c 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/unmarshal-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/unmarshal-eip.adoc
@@ -40,9 +40,9 @@ Java::
[source,java]
----
from("file:inbox/xml")
- .unmarshal().jaxb()
+ .unmarshal().jaxb("com.acme.order")
.to("bean:validateOrder")
- .marshal().jaxb()
+ .marshal().jaxb("com.acme.order")
.to("jms:queue:order");
----
@@ -52,9 +52,9 @@ XML::
----
<route>
<from uri="file:inbox/xml"/>
- <unmarshal><jaxb/></unmarshal>
+ <unmarshal><jaxb contextPath="com.acme.order"/></unmarshal>
<to uri="bean:validateOrder"/>
- <marshal><jaxb/></marshal>
+ <marshal><jaxb contextPath="com.acme.order"/></marshal>
<to uri="jms:queue:order"/>
</route>
----
@@ -68,11 +68,13 @@ YAML::
uri: file:inbox/xml
steps:
- unmarshal:
- jaxb: {}
+ jaxb:
+ contextPath: com.acme.order
- to:
uri: bean:validateOrder
- marshal:
- jaxb: {}
+ jaxb:
+ contextPath: com.acme.order
- to:
uri: jms:queue:order
----
@@ -119,7 +121,8 @@ YAML::
steps:
- unmarshal:
allowNullBody: "true"
- jaxb: {}
+ jaxb:
+ contextPath: com.acme.order
- to:
uri: bean:validateOrder
----
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSchemaMojo.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSchemaMojo.java
index d02214acc159..792d1b506f62 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSchemaMojo.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSchemaMojo.java
@@ -288,22 +288,8 @@ public class GenerateYamlSchemaMojo extends
GenerateYamlSupportMojo {
// this is an internal name
continue;
}
- // we want to skip inheritErrorHandler which is only applicable
for the load-balancer
- boolean skip = false;
- if (propertyName.equals("inheritErrorHandler")) {
- skip = true;
- Optional<AnnotationValue> av = annotationValue(info,
YAML_TYPE_ANNOTATION, "nodes");
- if (av.isPresent()) {
- String[] sn = av.get().asStringArray();
- for (String n : sn) {
- if ("load-balance".equals(n) ||
"loadBalance".equals(n)) {
- skip = false;
- break;
- }
- }
- }
- }
// we want to skip pattern from wiretap
+ boolean skip = false;
if (propertyName.equals("pattern")) {
Optional<AnnotationValue> av = annotationValue(info,
YAML_TYPE_ANNOTATION, "nodes");
if (av.isPresent()) {
@@ -354,6 +340,39 @@ public class GenerateYamlSchemaMojo extends
GenerateYamlSupportMojo {
definition.withArray("required").add(propertyName);
}
}
+ oneOfGroups.values().forEach(this::completeNegation);
+ }
+
+ /**
+ * A oneOf group gets a "not" branch (see {@link #makeOptional}) as soon
as one of its alternatives is optional,
+ * which makes the group as a whole optional. That branch must then
exclude every alternative of the group,
+ * including the required ones, otherwise choosing a required alternative
matches both the alternative and the "not"
+ * branch and the oneOf fails with "2 are valid". The expression of
resequence is such a case: the inline languages
+ * are optional (they come from __extends), but the "expression" wrapper
is required.
+ */
+ private void completeNegation(ObjectNode group) {
+ ArrayNode oneOf = group.withArray("oneOf");
+ ObjectNode negation = StreamSupport.stream(oneOf.spliterator(), false)
+ .map(ObjectNode.class::cast)
+ .filter(entry -> entry.has("not"))
+ .findAny()
+ .orElse(null);
+ if (negation == null) {
+ return;
+ }
+ ArrayNode excluded = negation.withObject("/not").withArray("anyOf");
+ Set<String> excludedNames = new HashSet<>();
+ excluded.forEach(entry -> entry.path("required").forEach(name ->
excludedNames.add(name.asText())));
+ for (JsonNode entry : oneOf) {
+ if (entry.has("not") || !entry.has("required")) {
+ continue;
+ }
+ for (JsonNode name : entry.get("required")) {
+ if (excludedNames.add(name.asText())) {
+
excluded.addObject().withArray("required").add(name.asText());
+ }
+ }
+ }
}
private void kebabToCamelCase(JsonNode node) {
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/java/org/apache/camel/dsl/yaml/validator/YamlValidatorSchemaGroupsTest.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/java/org/apache/camel/dsl/yaml/validator/YamlValidatorSchemaGroupsTest.java
new file mode 100644
index 000000000000..eee4d6b51e4e
--- /dev/null
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/java/org/apache/camel/dsl/yaml/validator/YamlValidatorSchemaGroupsTest.java
@@ -0,0 +1,93 @@
+/*
+ * 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.dsl.yaml.validator;
+
+import java.io.File;
+import java.util.List;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.networknt.schema.Error;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+/**
+ * CAMEL-24697: the generated schema must accept what the runtime accepts for
oneOf groups with a required alternative,
+ * and for the inheritErrorHandler option of circuitBreaker and
failoverLoadBalancer.
+ */
+public class YamlValidatorSchemaGroupsTest {
+
+ private static YamlValidator validator;
+ private static JsonNode definitions;
+
+ @BeforeAll
+ public static void setup() throws Exception {
+ validator = new YamlValidator();
+ validator.init();
+ try (var is =
YamlValidator.class.getResourceAsStream("/schema/camelYamlDsl.json")) {
+ definitions = new
ObjectMapper().readTree(is).path("items").path("definitions");
+ }
+ }
+
+ @Test
+ public void testExpressionWrapperMatchesOneBranch() throws Exception {
+ List<Error> report = validator.validate(new
File("src/test/resources/oneof-group-expression-wrapper.yaml"));
+ Assertions.assertTrue(report.isEmpty(), "Expected no errors but got: "
+ messages(report));
+ }
+
+ @Test
+ public void testRequiredAlternativeIsExcludedFromNotBranch() {
+ // resequence and setHeaders entries have a required expression; with
the "expression:" wrapper the
+ // "not" branch of the group must not match as well, so it has to list
"expression" too
+ for (String name :
List.of("org.apache.camel.model.ResequenceDefinition",
+ "org.apache.camel.model.PropertyExpressionDefinition")) {
+ JsonNode group =
definitions.path(name).path("anyOf").get(0).path("oneOf");
+ JsonNode not = null;
+ for (JsonNode branch : group) {
+ if (branch.has("not")) {
+ not = branch.path("not").path("anyOf");
+ }
+ }
+ Assertions.assertNotNull(not, name + " should have a not branch");
+ boolean excluded = false;
+ for (JsonNode entry : not) {
+ if
(entry.path("required").toString().contains("\"expression\"")) {
+ excluded = true;
+ }
+ }
+ Assertions.assertTrue(excluded, name + " not branch should exclude
expression");
+ }
+ }
+
+ @Test
+ public void testDataFormatGroupStillRequiresADataFormat() throws Exception
{
+ // marshal has no optional alternative, so it must not gain a "not"
branch that would allow marshal: {}
+ List<Error> report = validator.validate(new
File("src/test/resources/marshal-without-dataformat.yaml"));
+ Assertions.assertFalse(report.isEmpty(), "marshal without a data
format should not validate");
+ }
+
+ @Test
+ public void testInheritErrorHandler() throws Exception {
+ List<Error> report = validator.validate(new
File("src/test/resources/inherit-error-handler.yaml"));
+ Assertions.assertTrue(report.isEmpty(), "Expected no errors but got: "
+ messages(report));
+ }
+
+ private static List<String> messages(List<Error> report) {
+ return report.stream().map(Error::getMessage).toList();
+ }
+}
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/inherit-error-handler.yaml
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/inherit-error-handler.yaml
new file mode 100644
index 000000000000..d3fd6e20d7f1
--- /dev/null
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/inherit-error-handler.yaml
@@ -0,0 +1,37 @@
+#
+# 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.
+#
+
+# inheritErrorHandler is a property of circuitBreaker and of
failoverLoadBalancer (CAMEL-24697)
+- route:
+ from:
+ uri: direct:start
+ steps:
+ - circuitBreaker:
+ inheritErrorHandler: true
+ steps:
+ - to:
+ uri: mock:a
+ - loadBalance:
+ failoverLoadBalancer:
+ inheritErrorHandler: false
+ maximumFailoverAttempts: "10"
+ roundRobin: true
+ steps:
+ - to:
+ uri: mock:b
+ - to:
+ uri: mock:c
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/marshal-without-dataformat.yaml
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/marshal-without-dataformat.yaml
new file mode 100644
index 000000000000..111d4f0ce8ce
--- /dev/null
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/marshal-without-dataformat.yaml
@@ -0,0 +1,25 @@
+#
+# 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.
+#
+
+# marshal requires a data format; the schema must not accept an empty marshal
+- route:
+ from:
+ uri: direct:start
+ steps:
+ - marshal: {}
+ - to:
+ uri: mock:result
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/oneof-group-expression-wrapper.yaml
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/oneof-group-expression-wrapper.yaml
new file mode 100644
index 000000000000..887286dce169
--- /dev/null
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/oneof-group-expression-wrapper.yaml
@@ -0,0 +1,39 @@
+#
+# 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.
+#
+
+# The expression of setHeaders/setVariables entries and of resequence is a
required member of a oneOf group.
+# The "expression:" wrapper form must match exactly one branch of that group
(CAMEL-24697).
+- route:
+ from:
+ uri: direct:start
+ steps:
+ - setHeaders:
+ headers:
+ - name: foo
+ expression:
+ simple: "${body}"
+ - name: bar
+ constant: "bar"
+ - resequence:
+ expression:
+ simple: "${header.seqnum}"
+ batchConfig:
+ batchSize: 300
+ batchTimeout: "4000"
+ steps:
+ - to:
+ uri: mock:result
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-canonical.json
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-canonical.json
index 7dbd5a6b7e3a..4dfb19e8ff52 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-canonical.json
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-canonical.json
@@ -872,6 +872,12 @@
"title" : "Id",
"description" : "The id of this node"
},
+ "inheritErrorHandler" : {
+ "type" : "boolean",
+ "title" : "Inherit Error Handler",
+ "description" : "Whether to inherit Camel error handling during
circuit breaker. By default, Camel error handler is turned off.",
+ "default" : false
+ },
"note" : {
"type" : "string",
"title" : "Note",
@@ -10856,6 +10862,12 @@
"title" : "Id",
"description" : "The id of this node"
},
+ "inheritErrorHandler" : {
+ "type" : "boolean",
+ "title" : "Inherit Error Handler",
+ "description" : "Whether to inherit the error handler. If turned
off, the load balancer will fail over immediately on an error instead of
waiting for Camel error handler to exhaust retries.",
+ "default" : true
+ },
"maximumFailoverAttempts" : {
"type" : "string",
"title" : "Maximum Failover Attempts",
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-model.json
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-model.json
index f2c0369f14ce..97fbc712fc37 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-model.json
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-model.json
@@ -1870,6 +1870,17 @@
"kind" : "attribute",
"index" : 4,
"group" : "common"
+ }, {
+ "name" : "inheritErrorHandler",
+ "type" : "boolean",
+ "description" : "Whether to inherit Camel error handling during
circuit breaker. By default, Camel error handler is turned off.",
+ "title" : "Inherit Error Handler",
+ "default" : "false",
+ "displayName" : "Inherit Error Handler",
+ "kind" : "attribute",
+ "index" : 5,
+ "group" : "advanced",
+ "label" : "advanced"
}, {
"name" : "resilience4jConfiguration",
"type" : "object",
@@ -16338,6 +16349,17 @@
"kind" : "attribute",
"index" : 4,
"group" : "common"
+ }, {
+ "name" : "inheritErrorHandler",
+ "type" : "boolean",
+ "description" : "Whether to inherit the error handler. If turned off,
the load balancer will fail over immediately on an error instead of waiting for
Camel error handler to exhaust retries.",
+ "title" : "Inherit Error Handler",
+ "default" : "true",
+ "displayName" : "Inherit Error Handler",
+ "kind" : "attribute",
+ "index" : 5,
+ "group" : "advanced",
+ "label" : "advanced"
} ]
},
"randomLoadBalancer" : {
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
index 2bab80f12496..54a3ba7e0d3d 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
@@ -1033,6 +1033,12 @@
"title" : "Id",
"description" : "The id of this node"
},
+ "inheritErrorHandler" : {
+ "type" : "boolean",
+ "title" : "Inherit Error Handler",
+ "description" : "Whether to inherit Camel error handling during
circuit breaker. By default, Camel error handler is turned off.",
+ "default" : false
+ },
"note" : {
"type" : "string",
"title" : "Note",
@@ -4811,6 +4817,8 @@
}, {
"not" : {
"anyOf" : [ {
+ "required" : [ "expression" ]
+ }, {
"required" : [ "constant" ]
}, {
"required" : [ "datasonnet" ]
@@ -5516,6 +5524,8 @@
}, {
"not" : {
"anyOf" : [ {
+ "required" : [ "expression" ]
+ }, {
"required" : [ "constant" ]
}, {
"required" : [ "datasonnet" ]
@@ -14775,6 +14785,12 @@
"title" : "Id",
"description" : "The id of this node"
},
+ "inheritErrorHandler" : {
+ "type" : "boolean",
+ "title" : "Inherit Error Handler",
+ "description" : "Whether to inherit the error handler. If turned
off, the load balancer will fail over immediately on an error instead of
waiting for Camel error handler to exhaust retries.",
+ "default" : true
+ },
"maximumFailoverAttempts" : {
"type" : "string",
"title" : "Maximum Failover Attempts",