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
commit 70e2897f80fbe807a6c19b82df2a13ff606547ef Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Dec 12 21:50:57 2022 +0100 CAMEL-18748: camel-yaml-dsl - Add missing route-configuration in yaml schema. Fixed route-configuration to be correct. --- .../dsl/yaml/common/YamlDeserializerSupport.java | 12 +++ .../RouteConfigurationDefinitionDeserializer.java | 101 ++++++++++----------- .../generated/resources/schema/camel-yaml-dsl.json | 84 ++++++++--------- .../generated/resources/schema/camelYamlDsl.json | 84 ++++++++--------- .../camel/dsl/yaml/RouteConfigurationTest.groovy | 100 ++++++++++---------- 5 files changed, 193 insertions(+), 188 deletions(-) diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerSupport.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerSupport.java index a8f0d0632f8..c5a9f3c1300 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerSupport.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerSupport.java @@ -279,6 +279,13 @@ public class YamlDeserializerSupport { return answer; } + public static <T> List<T> asList(Node node, Class<T> type) throws YamlDeserializationException { + List<T> answer = new ArrayList<>(); + asCollection(node, type, answer); + + return answer; + } + public static <T> Set<T> asFlatSet(Node node, Class<T> type) throws YamlDeserializationException { Set<T> answer = new HashSet<>(); asFlatCollection(node, type, answer); @@ -291,6 +298,11 @@ public class YamlDeserializerSupport { asCollection(node, type, collection, true); } + public static <T> void asCollection(Node node, Class<T> type, Collection<T> collection) + throws YamlDeserializationException { + asCollection(node, type, collection, false); + } + private static <T> void asCollection(Node node, Class<T> type, Collection<T> collection, boolean flat) throws YamlDeserializationException { if (node.getNodeType() != NodeType.SEQUENCE) { diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteConfigurationDefinitionDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteConfigurationDefinitionDeserializer.java index 528358bda93..996bd7abd49 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteConfigurationDefinitionDeserializer.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteConfigurationDefinitionDeserializer.java @@ -27,6 +27,7 @@ import org.apache.camel.model.InterceptSendToEndpointDefinition; import org.apache.camel.model.OnCompletionDefinition; import org.apache.camel.model.OnExceptionDefinition; import org.apache.camel.model.RouteConfigurationDefinition; +import org.apache.camel.model.RouteTemplateParameterDefinition; import org.apache.camel.spi.annotations.YamlIn; import org.apache.camel.spi.annotations.YamlProperty; import org.apache.camel.spi.annotations.YamlType; @@ -35,9 +36,11 @@ import org.snakeyaml.engine.v2.nodes.Node; import org.snakeyaml.engine.v2.nodes.NodeTuple; import org.snakeyaml.engine.v2.nodes.SequenceNode; +import java.util.List; + @YamlIn @YamlType( - inline = true, + inline = false, types = org.apache.camel.model.RouteConfigurationDefinition.class, order = YamlDeserializerResolver.ORDER_DEFAULT, nodes = { "route-configuration", "routeConfiguration" }, @@ -67,60 +70,52 @@ public class RouteConfigurationDefinitionDeserializer extends YamlDeserializerBa final RouteConfigurationDefinition target = newInstance(); final YamlDeserializationContext dc = getDeserializationContext(node); - final SequenceNode sn = asSequenceNode(node); - for (Node item : sn.getValue()) { - final MappingNode bn = asMappingNode(item); - setDeserializationContext(item, dc); + final MappingNode bn = asMappingNode(node); + setDeserializationContext(node, dc); - for (NodeTuple tuple : bn.getValue()) { - final String key = asText(tuple.getKeyNode()); - final Node val = tuple.getValueNode(); - switch (key) { - case "id": { - target.setId(asText(val)); - break; - } - case "precondition": - target.setPrecondition(asText(val)); - break; - case "errorHandler": - case "error-handler": - setDeserializationContext(val, dc); - ErrorHandlerDefinition ehd = asType(val, ErrorHandlerDefinition.class); - target.setErrorHandler(ehd); - break; - case "onException": - case "on-exception": - setDeserializationContext(val, dc); - OnExceptionDefinition oed = asType(val, OnExceptionDefinition.class); - target.getOnExceptions().add(oed); - break; - case "onCompletion": - case "on-completion": - setDeserializationContext(val, dc); - OnCompletionDefinition ocd = asType(val, OnCompletionDefinition.class); - target.getOnCompletions().add(ocd); - break; - case "intercept": - setDeserializationContext(val, dc); - InterceptDefinition id = asType(val, InterceptDefinition.class); - target.getIntercepts().add(id); - break; - case "interceptFrom": - case "intercept-from": - setDeserializationContext(val, dc); - InterceptFromDefinition ifd = asType(val, InterceptFromDefinition.class); - target.getInterceptFroms().add(ifd); - break; - case "interceptSendToEndpoint": - case "intercept-send-to-endpoint": - setDeserializationContext(val, dc); - InterceptSendToEndpointDefinition isted = asType(val, InterceptSendToEndpointDefinition.class); - target.getInterceptSendTos().add(isted); - break; - default: - throw new UnsupportedFieldException(val, key); + for (NodeTuple tuple : bn.getValue()) { + final String key = asText(tuple.getKeyNode()); + final Node val = tuple.getValueNode(); + switch (key) { + case "id": { + target.setId(asText(val)); + break; } + case "precondition": + target.setPrecondition(asText(val)); + break; + case "errorHandler": + case "error-handler": + setDeserializationContext(val, dc); + ErrorHandlerDefinition ehd = asType(val, ErrorHandlerDefinition.class); + target.setErrorHandler(ehd); + break; + case "onException": + case "on-exception": + setDeserializationContext(val, dc); + target.setOnExceptions(asList(val, OnExceptionDefinition.class)); + break; + case "onCompletion": + case "on-completion": + setDeserializationContext(val, dc); + target.setOnCompletions(asList(val, OnCompletionDefinition.class)); + break; + case "intercept": + setDeserializationContext(val, dc); + target.setIntercepts(asList(val, InterceptDefinition.class)); + break; + case "interceptFrom": + case "intercept-from": + setDeserializationContext(val, dc); + target.setInterceptFroms(asList(val, InterceptFromDefinition.class)); + break; + case "interceptSendToEndpoint": + case "intercept-send-to-endpoint": + setDeserializationContext(val, dc); + target.setInterceptSendTos(asList(val, InterceptSendToEndpointDefinition.class)); + break; + default: + throw new UnsupportedFieldException(val, key); } } diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json index 155ff485ef4..0db1e83e3a0 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json @@ -2481,52 +2481,48 @@ "required" : [ "ref" ] }, "org.apache.camel.model.RouteConfigurationDefinition" : { - "oneOf" : [ { - "type" : "string" - }, { - "type" : "object", - "properties" : { - "error-handler" : { - "$ref" : "#/items/definitions/org.apache.camel.model.ErrorHandlerDefinition" - }, - "id" : { - "type" : "string" - }, - "intercept" : { - "type" : "array", - "items" : { - "$ref" : "#/items/definitions/org.apache.camel.model.InterceptDefinition" - } - }, - "intercept-from" : { - "type" : "array", - "items" : { - "$ref" : "#/items/definitions/org.apache.camel.model.InterceptFromDefinition" - } - }, - "intercept-send-to-endpoint" : { - "type" : "array", - "items" : { - "$ref" : "#/items/definitions/org.apache.camel.model.InterceptSendToEndpointDefinition" - } - }, - "on-completion" : { - "type" : "array", - "items" : { - "$ref" : "#/items/definitions/org.apache.camel.model.OnCompletionDefinition" - } - }, - "on-exception" : { - "type" : "array", - "items" : { - "$ref" : "#/items/definitions/org.apache.camel.model.OnExceptionDefinition" - } - }, - "precondition" : { - "type" : "string" + "type" : "object", + "properties" : { + "error-handler" : { + "$ref" : "#/items/definitions/org.apache.camel.model.ErrorHandlerDefinition" + }, + "id" : { + "type" : "string" + }, + "intercept" : { + "type" : "array", + "items" : { + "$ref" : "#/items/definitions/org.apache.camel.model.InterceptDefinition" + } + }, + "intercept-from" : { + "type" : "array", + "items" : { + "$ref" : "#/items/definitions/org.apache.camel.model.InterceptFromDefinition" } + }, + "intercept-send-to-endpoint" : { + "type" : "array", + "items" : { + "$ref" : "#/items/definitions/org.apache.camel.model.InterceptSendToEndpointDefinition" + } + }, + "on-completion" : { + "type" : "array", + "items" : { + "$ref" : "#/items/definitions/org.apache.camel.model.OnCompletionDefinition" + } + }, + "on-exception" : { + "type" : "array", + "items" : { + "$ref" : "#/items/definitions/org.apache.camel.model.OnExceptionDefinition" + } + }, + "precondition" : { + "type" : "string" } - } ] + } }, "org.apache.camel.model.RouteContextRefDefinition" : { "oneOf" : [ { 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 37f021f463b..3c96a564f95 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 @@ -2385,52 +2385,48 @@ "required" : [ "ref" ] }, "org.apache.camel.model.RouteConfigurationDefinition" : { - "oneOf" : [ { - "type" : "string" - }, { - "type" : "object", - "properties" : { - "errorHandler" : { - "$ref" : "#/items/definitions/org.apache.camel.model.ErrorHandlerDefinition" - }, - "id" : { - "type" : "string" - }, - "intercept" : { - "type" : "array", - "items" : { - "$ref" : "#/items/definitions/org.apache.camel.model.InterceptDefinition" - } - }, - "interceptFrom" : { - "type" : "array", - "items" : { - "$ref" : "#/items/definitions/org.apache.camel.model.InterceptFromDefinition" - } - }, - "interceptSendToEndpoint" : { - "type" : "array", - "items" : { - "$ref" : "#/items/definitions/org.apache.camel.model.InterceptSendToEndpointDefinition" - } - }, - "onCompletion" : { - "type" : "array", - "items" : { - "$ref" : "#/items/definitions/org.apache.camel.model.OnCompletionDefinition" - } - }, - "onException" : { - "type" : "array", - "items" : { - "$ref" : "#/items/definitions/org.apache.camel.model.OnExceptionDefinition" - } - }, - "precondition" : { - "type" : "string" + "type" : "object", + "properties" : { + "errorHandler" : { + "$ref" : "#/items/definitions/org.apache.camel.model.ErrorHandlerDefinition" + }, + "id" : { + "type" : "string" + }, + "intercept" : { + "type" : "array", + "items" : { + "$ref" : "#/items/definitions/org.apache.camel.model.InterceptDefinition" + } + }, + "interceptFrom" : { + "type" : "array", + "items" : { + "$ref" : "#/items/definitions/org.apache.camel.model.InterceptFromDefinition" } + }, + "interceptSendToEndpoint" : { + "type" : "array", + "items" : { + "$ref" : "#/items/definitions/org.apache.camel.model.InterceptSendToEndpointDefinition" + } + }, + "onCompletion" : { + "type" : "array", + "items" : { + "$ref" : "#/items/definitions/org.apache.camel.model.OnCompletionDefinition" + } + }, + "onException" : { + "type" : "array", + "items" : { + "$ref" : "#/items/definitions/org.apache.camel.model.OnExceptionDefinition" + } + }, + "precondition" : { + "type" : "string" } - } ] + } }, "org.apache.camel.model.RouteContextRefDefinition" : { "oneOf" : [ { diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteConfigurationTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteConfigurationTest.groovy index 3b8d026a5a5..f7d19095c42 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteConfigurationTest.groovy +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteConfigurationTest.groovy @@ -34,15 +34,16 @@ class RouteConfigurationTest extends YamlTestSupport { - name: myFailingProcessor type: ${MyFailingProcessor.name} - route-configuration: - - on-exception: - handled: - constant: "true" - exception: - - ${MyException.name} - steps: - - transform: - constant: "Sorry" - - to: "mock:on-exception" + on-exception: + - on-exception: + handled: + constant: "true" + exception: + - ${MyException.name} + steps: + - transform: + constant: "Sorry" + - to: "mock:on-exception" - from: uri: "direct:start" steps: @@ -72,32 +73,35 @@ class RouteConfigurationTest extends YamlTestSupport { - name: myFailingProcessor type: ${MyFailingProcessor.name} - route-configuration: - - precondition: "{{!activate}}" - - on-exception: - handled: - constant: "true" - exception: - - ${MyException.name} - steps: - - transform: - constant: "Not Activated" - - to: "mock:on-exception" + precondition: "{{!activate}}" + on-exception: + - on-exception: + handled: + constant: "true" + exception: + - ${MyException.name} + steps: + - transform: + constant: "Not Activated" + - to: "mock:on-exception" - route-configuration: - - precondition: "{{activate}}" - - on-exception: - handled: - constant: "true" - exception: - - ${MyException.name} - steps: - - transform: - constant: "Activated" - - to: "mock:on-exception" - - on-completion: - steps: - - transform: - constant: "Completed" - - to: "mock:on-completion" + precondition: "{{activate}}" + on-exception: + - on-exception: + handled: + constant: "true" + exception: + - ${MyException.name} + steps: + - transform: + constant: "Activated" + - to: "mock:on-exception" + on-completion: + - on-completion: + steps: + - transform: + constant: "Completed" + - to: "mock:on-completion" - from: uri: "direct:start" steps: @@ -136,6 +140,7 @@ class RouteConfigurationTest extends YamlTestSupport { - name: myFailingProcessor type: ${MyFailingProcessor.name} - route-configuration: + on-exception: - on-exception: handled: constant: "true" @@ -183,16 +188,17 @@ class RouteConfigurationTest extends YamlTestSupport { - name: myFailingProcessor type: ${MyFailingProcessor.name} - route-configuration: - - id: handleError - - on-exception: - handled: - constant: "true" - exception: - - ${MyException.name} - steps: - - transform: - constant: "Sorry" - - to: "mock:on-exception" + id: handleError + on-exception: + - on-exception: + handled: + constant: "true" + exception: + - ${MyException.name} + steps: + - transform: + constant: "Sorry" + - to: "mock:on-exception" """ // routes loadRoutes """ @@ -240,9 +246,9 @@ class RouteConfigurationTest extends YamlTestSupport { - name: myFailingProcessor type: ${MyFailingProcessor.name} - route-configuration: - - error-handler: - dead-letter-channel: - dead-letter-uri: "mock:on-error" + error-handler: + dead-letter-channel: + dead-letter-uri: "mock:on-error" """ // routes loadRoutes """