This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch yaml-from in repository https://gitbox.apache.org/repos/asf/camel.git
commit 33431ea391b5d11f5f548742e1140ba73b055025 Author: Claus Ibsen <[email protected]> AuthorDate: Thu Dec 9 16:11:20 2021 +0100 CAMEL-17304: camel-yaml-dsl - Make from consistent that it requires steps, so when you define routes in yaml dsl - its the same if you have route/from as top level or not - like in java dsl. --- .../apache/camel/dsl/yaml/common/YamlSupport.java | 8 ++- .../dsl/yaml/deserializers/ModelDeserializers.java | 72 +++++++++++----------- .../deserializers/FromDefinitionDeserializer.java | 18 +++++- .../deserializers/RouteDefinitionDeserializer.java | 8 +-- .../RouteFromDefinitionDeserializer.java | 1 + .../dsl/yaml/GenerateYamlDeserializersMojo.java | 2 +- .../src/generated/resources/camel-yaml-dsl.json | 16 ++--- .../camel/dsl/yaml/RouteConfigurationTest.groovy | 16 ++--- .../org/apache/camel/dsl/yaml/RoutesTest.groovy | 31 ++++++++-- 9 files changed, 106 insertions(+), 66 deletions(-) diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlSupport.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlSupport.java index a596677..687d067 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlSupport.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlSupport.java @@ -29,6 +29,7 @@ import org.apache.camel.Component; import org.apache.camel.ExtendedCamelContext; import org.apache.camel.PropertyBindingException; import org.apache.camel.dsl.yaml.common.exception.UnsupportedNodeTypeException; +import org.apache.camel.model.RouteDefinition; import org.apache.camel.spi.CamelContextCustomizer; import org.apache.camel.spi.EndpointUriFactory; import org.apache.camel.spi.PropertyConfigurer; @@ -48,6 +49,7 @@ import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asScalarM import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asText; import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.getDeserializationContext; import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.setDeserializationContext; +import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.setSteps; public final class YamlSupport { private YamlSupport() { @@ -201,7 +203,7 @@ public final class YamlSupport { return node; } - public static String creteEndpointUri(Node node, BiFunction<String, Node, String> endpointResolver) { + public static String creteEndpointUri(Node node, BiFunction<String, Node, String> endpointResolver, RouteDefinition route) { String answer = null; if (node.getNodeType() == NodeType.SCALAR) { @@ -236,6 +238,10 @@ public final class YamlSupport { parameters = asScalarMap(tuple.getValueNode()); break; + case "steps": + // steps must be set on the route + setSteps(route, val); + break; default: String endpointUri = endpointResolver.apply(key, val); if (endpointUri != null) { diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java index 41b636b..e0fee5b 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java @@ -494,7 +494,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -1494,7 +1494,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -1556,7 +1556,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -1639,7 +1639,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -4130,7 +4130,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -5180,7 +5180,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -5242,7 +5242,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -5488,7 +5488,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -5926,7 +5926,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -6449,7 +6449,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -6710,7 +6710,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -6775,7 +6775,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -6852,7 +6852,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -7892,7 +7892,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -8080,7 +8080,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -8658,7 +8658,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -8902,7 +8902,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -9022,7 +9022,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -9081,7 +9081,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -9193,7 +9193,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -9242,7 +9242,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -9672,7 +9672,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -9722,7 +9722,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -9778,7 +9778,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -10047,7 +10047,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -10508,7 +10508,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -11265,7 +11265,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -13035,7 +13035,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -13422,7 +13422,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -14970,7 +14970,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -15079,7 +15079,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -16180,7 +16180,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -16373,7 +16373,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -17406,7 +17406,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -17516,7 +17516,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { @@ -17585,7 +17585,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { break; } case "steps": { - setSteps(target, node);; + setSteps(target, node); break; } default: { diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java index 4df8ddf..3fa8545 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java @@ -19,6 +19,7 @@ package org.apache.camel.dsl.yaml.deserializers; import org.apache.camel.dsl.yaml.common.YamlDeserializerResolver; import org.apache.camel.dsl.yaml.common.YamlSupport; import org.apache.camel.model.FromDefinition; +import org.apache.camel.model.RouteDefinition; import org.apache.camel.spi.annotations.YamlProperty; import org.apache.camel.spi.annotations.YamlType; import org.snakeyaml.engine.v2.api.ConstructNode; @@ -30,16 +31,27 @@ import org.snakeyaml.engine.v2.nodes.Node; order = YamlDeserializerResolver.ORDER_DEFAULT, properties = { @YamlProperty(name = "uri", type = "string", required = true), - @YamlProperty(name = "parameters", type = "object") + @YamlProperty(name = "parameters", type = "object"), + @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition", required = true) }) public class FromDefinitionDeserializer implements ConstructNode { + @Override public Object construct(Node node) { - String uri = YamlSupport.creteEndpointUri(node, EndpointConsumerDeserializersResolver::resolveEndpointUri); + + // from must be wrapped in a route, so use existing route or create a new route + RouteDefinition route = (RouteDefinition) node.getProperty(RouteDefinition.class.getName()); + if (route == null) { + route = new RouteDefinition(); + } + + String uri = YamlSupport.creteEndpointUri(node, EndpointConsumerDeserializersResolver::resolveEndpointUri, route); if (uri == null) { throw new IllegalStateException("The endpoint URI must be set"); } - return new FromDefinition(uri); + FromDefinition answer = new FromDefinition(uri); + route.setInput(answer); + return answer; } } diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteDefinitionDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteDefinitionDeserializer.java index da7ca89..30a1e6a 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteDefinitionDeserializer.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteDefinitionDeserializer.java @@ -38,10 +38,10 @@ import org.snakeyaml.engine.v2.nodes.NodeTuple; @YamlProperty(name = "id", type = "string"), @YamlProperty(name = "group", type = "string"), @YamlProperty(name = "route-configuration-id", type = "string"), - @YamlProperty(name = "from", type = "object:org.apache.camel.model.FromDefinition", required = true), - @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition", required = true) + @YamlProperty(name = "from", type = "object:org.apache.camel.model.FromDefinition", required = true) }) public class RouteDefinitionDeserializer extends YamlDeserializerBase<RouteDefinition> { + public RouteDefinitionDeserializer() { super(RouteDefinition.class); } @@ -62,9 +62,6 @@ public class RouteDefinitionDeserializer extends YamlDeserializerBase<RouteDefin setDeserializationContext(val, dc); switch (key) { - case "steps": - setSteps(target, val); - break; case "id": target.setId(asText(val)); break; @@ -75,6 +72,7 @@ public class RouteDefinitionDeserializer extends YamlDeserializerBase<RouteDefin target.setRouteConfigurationId(asText(val)); break; case "from": + val.setProperty(RouteDefinition.class.getName(), target); target.setInput(asType(val, FromDefinition.class)); break; default: diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteFromDefinitionDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteFromDefinitionDeserializer.java index 6b65b7e..6842493 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteFromDefinitionDeserializer.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteFromDefinitionDeserializer.java @@ -30,6 +30,7 @@ import org.apache.camel.spi.annotations.YamlType; type = "object:org.apache.camel.dsl.yaml.deserializers.OutputAwareFromDefinition") }) public class RouteFromDefinitionDeserializer extends OutputAwareFromDefinitionDeserializer { + public RouteFromDefinitionDeserializer() { } } diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java index 9c490ef..f821fb6 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java @@ -551,7 +551,7 @@ public class GenerateYamlDeserializersMojo extends GenerateYamlSupportMojo { caseAdded = true; setProperty.beginControlFlow("case \"steps\":"); - setProperty.addStatement("setSteps(target, node);"); + setProperty.addStatement("setSteps(target, node)"); setProperty.addStatement("break"); setProperty.endControlFlow(); diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camel-yaml-dsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camel-yaml-dsl.json index 62e992b..7fa4a6e 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camel-yaml-dsl.json +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camel-yaml-dsl.json @@ -944,12 +944,18 @@ "parameters" : { "type" : "object" }, + "steps" : { + "type" : "array", + "items" : { + "$ref" : "#/items/definitions/org.apache.camel.model.ProcessorDefinition" + } + }, "uri" : { "type" : "string" } } } ], - "required" : [ "uri" ] + "required" : [ "steps", "uri" ] }, "org.apache.camel.model.GlobalOptionDefinition" : { "type" : "object", @@ -2205,15 +2211,9 @@ }, "route-configuration-id" : { "type" : "string" - }, - "steps" : { - "type" : "array", - "items" : { - "$ref" : "#/items/definitions/org.apache.camel.model.ProcessorDefinition" - } } }, - "required" : [ "from", "steps" ] + "required" : [ "from" ] }, "org.apache.camel.model.RouteTemplateBeanDefinition" : { "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 15550bf..ba7e9a8 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 @@ -133,16 +133,16 @@ class RouteConfigurationTest extends YamlTestSupport { - route: route-configuration-id: handleError from: - uri: "direct:start" - steps: - - process: - ref: "myFailingProcessor" + uri: "direct:start" + steps: + - process: + ref: "myFailingProcessor" - route: from: - uri: "direct:start2" - steps: - - process: - ref: "myFailingProcessor" + uri: "direct:start2" + steps: + - process: + ref: "myFailingProcessor" """ withMock('mock:on-exception') { diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RoutesTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RoutesTest.groovy index d3baef1..fed813d 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RoutesTest.groovy +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RoutesTest.groovy @@ -101,8 +101,8 @@ class RoutesTest extends YamlTestSupport { - route: from: uri: "direct:info" - steps: - - log: "message" + steps: + - log: "message" ''' then: context.routeDefinitions.size() == 1 @@ -124,8 +124,8 @@ class RoutesTest extends YamlTestSupport { uri: "direct:info" parameters: timeout: 1234 - steps: - - log: "message" + steps: + - log: "message" ''' then: context.routeDefinitions.size() == 1 @@ -138,4 +138,27 @@ class RoutesTest extends YamlTestSupport { } } } + + def "load route inlined"() { + when: + loadRoutes ''' + - route: + id: demo-route + from: + uri: "direct:info" + steps: + - log: "message" + ''' + then: + context.routeDefinitions.size() == 1 + + with(context.routeDefinitions[0], RouteDefinition) { + routeId == 'demo-route' + input.endpointUri == 'direct:info' + + with (outputs[0], LogDefinition) { + message == 'message' + } + } + } }
