You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/12/16 10:44:05 UTC
[camel] 01/03: 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.
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 0c043cf7b77b1330eacdb945b2cb41805a11ed98
Author: Claus Ibsen <cl...@gmail.com>
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 +++++-
.../deserializers/FromDefinitionDeserializer.java | 16 ++++++++---
.../deserializers/RouteDefinitionDeserializer.java | 8 +++---
.../RouteFromDefinitionDeserializer.java | 1 +
.../src/generated/resources/camel-yaml-dsl.json | 16 +++++------
.../camel/dsl/yaml/RouteConfigurationTest.groovy | 16 +++++------
.../org/apache/camel/dsl/yaml/RoutesTest.groovy | 31 +++++++++++++++++++---
7 files changed, 67 insertions(+), 29 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/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 ef1767f..1a62278 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,24 +31,33 @@ 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");
}
FromDefinition target = new FromDefinition(uri);
+ // set from as input on the route
+ route.setInput(target);
// enrich model with line number
if (node.getStartMark().isPresent()) {
int line = node.getStartMark().get().getLine();
target.setLineNumber(line);
}
-
return target;
}
}
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/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'
+ }
+ }
+ }
}