This is an automated email from the ASF dual-hosted git repository.
lburgazzoli 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 a8a540a yaml-dsl: make it simple to configure route local beans
a8a540a is described below
commit a8a540acfc1168a59d6c27cf86d4bc24ed98cea0
Author: Luca Burgazzoli <[email protected]>
AuthorDate: Fri Jun 11 17:03:44 2021 +0200
yaml-dsl: make it simple to configure route local beans
---
.../camel-yaml-dsl-deserializers/pom.xml | 1 +
.../dsl/yaml/deserializers/ModelDeserializers.java | 66 -------------
.../deserializers/ModelDeserializersResolver.java | 2 -
.../dsl/yaml/deserializers/CustomResolver.java | 2 +
.../RouteTemplateBeanDefinitionDeserializer.java | 102 +++++++++++++++++++++
.../src/generated/resources/camel-yaml-dsl.json | 3 +
.../org/apache/camel/dsl/yaml/KameletTest.groovy | 72 +++++++++++++++
.../apache/camel/dsl/yaml/RouteTemplateTest.groovy | 90 ++++++++++++++++++
8 files changed, 270 insertions(+), 68 deletions(-)
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/pom.xml
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/pom.xml
index d905c97..830a186 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/pom.xml
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/pom.xml
@@ -131,6 +131,7 @@
<bannedDefinition>org.apache.camel.model.RouteTemplateDefinition</bannedDefinition>
<bannedDefinition>org.apache.camel.model.RouteTemplateContextRefDefinition</bannedDefinition>
<bannedDefinition>org.apache.camel.model.RouteTemplatesDefinition</bannedDefinition>
+
<bannedDefinition>org.apache.camel.model.RouteTemplateBeanDefinition</bannedDefinition>
<bannedDefinition>org.apache.camel.model.RoutesDefinition</bannedDefinition>
<bannedDefinition>org.apache.camel.model.RestsDefinition</bannedDefinition>
</bannedDefinitions>
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 224868e..73b408c 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
@@ -71,7 +71,6 @@ import org.apache.camel.model.RollbackDefinition;
import org.apache.camel.model.RouteBuilderDefinition;
import org.apache.camel.model.RouteContextRefDefinition;
import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.RouteTemplateBeanDefinition;
import org.apache.camel.model.RouteTemplateParameterDefinition;
import org.apache.camel.model.RouteTemplateScriptDefinition;
import org.apache.camel.model.RoutingSlipDefinition;
@@ -12195,71 +12194,6 @@ public final class ModelDeserializers extends
YamlDeserializerSupport {
}
@YamlType(
- inline = true,
- types = org.apache.camel.model.RouteTemplateBeanDefinition.class,
- order =
org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
- nodes = "template-bean",
- properties = {
- @YamlProperty(name = "bean-type", type = "string"),
- @YamlProperty(name = "name", type = "string", required =
true),
- @YamlProperty(name = "property", type =
"array:org.apache.camel.model.PropertyDefinition"),
- @YamlProperty(name = "script", type =
"object:org.apache.camel.model.RouteTemplateScriptDefinition"),
- @YamlProperty(name = "type", type = "string", required =
true)
- }
- )
- public static class RouteTemplateBeanDefinitionDeserializer extends
YamlDeserializerBase<RouteTemplateBeanDefinition> {
- public RouteTemplateBeanDefinitionDeserializer() {
- super(RouteTemplateBeanDefinition.class);
- }
-
- @Override
- protected RouteTemplateBeanDefinition newInstance() {
- return new RouteTemplateBeanDefinition();
- }
-
- @Override
- protected RouteTemplateBeanDefinition newInstance(String value) {
- return new RouteTemplateBeanDefinition(value);
- }
-
- @Override
- protected boolean setProperty(RouteTemplateBeanDefinition target,
String propertyKey,
- String propertyName, Node node) {
- switch(propertyKey) {
- case "bean-type": {
- String val = asText(node);
- target.setBeanType(val);
- break;
- }
- case "name": {
- String val = asText(node);
- target.setName(val);
- break;
- }
- case "property": {
- java.util.List<org.apache.camel.model.PropertyDefinition>
val = asFlatList(node, org.apache.camel.model.PropertyDefinition.class);
- target.setProperties(val);
- break;
- }
- case "script": {
- org.apache.camel.model.RouteTemplateScriptDefinition val =
asType(node, org.apache.camel.model.RouteTemplateScriptDefinition.class);
- target.setScript(val);
- break;
- }
- case "type": {
- String val = asText(node);
- target.setType(val);
- break;
- }
- default: {
- return false;
- }
- }
- return true;
- }
- }
-
- @YamlType(
types =
org.apache.camel.model.RouteTemplateParameterDefinition.class,
order =
org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
nodes = "template-parameter",
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
index eae4520..965e470 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
@@ -300,8 +300,6 @@ public final class ModelDeserializersResolver implements
YamlDeserializerResolve
case "org.apache.camel.model.RouteContextRefDefinition": return
new ModelDeserializers.RouteContextRefDefinitionDeserializer();
case "route": return new
ModelDeserializers.RouteDefinitionDeserializer();
case "org.apache.camel.model.RouteDefinition": return new
ModelDeserializers.RouteDefinitionDeserializer();
- case "template-bean": return new
ModelDeserializers.RouteTemplateBeanDefinitionDeserializer();
- case "org.apache.camel.model.RouteTemplateBeanDefinition": return
new ModelDeserializers.RouteTemplateBeanDefinitionDeserializer();
case "template-parameter": return new
ModelDeserializers.RouteTemplateParameterDefinitionDeserializer();
case "org.apache.camel.model.RouteTemplateParameterDefinition":
return new ModelDeserializers.RouteTemplateParameterDefinitionDeserializer();
case "template-script": return new
ModelDeserializers.RouteTemplateScriptDefinitionDeserializer();
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
index f962eb3..08ac067 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
@@ -41,6 +41,8 @@ public class CustomResolver implements
YamlDeserializerResolver {
case "template":
case "org.apache.camel.model.RouteTemplateDefinition":
return new RouteTemplateDefinitionDeserializer();
+ case "org.apache.camel.model.RouteTemplateBeanDefinition":
+ return new RouteTemplateBeanDefinitionDeserializer();
case "org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition":
return new NamedBeanDeserializer();
case
"org.apache.camel.dsl.yaml.deserializers.OutputAwareFromDefinition":
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateBeanDefinitionDeserializer.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateBeanDefinitionDeserializer.java
new file mode 100644
index 0000000..b3ec26b
--- /dev/null
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateBeanDefinitionDeserializer.java
@@ -0,0 +1,102 @@
+/*
+ * 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.deserializers;
+
+import java.util.stream.Collectors;
+
+import org.apache.camel.dsl.yaml.common.YamlDeserializerBase;
+import org.apache.camel.dsl.yaml.common.YamlDeserializerResolver;
+import org.apache.camel.model.PropertyDefinition;
+import org.apache.camel.model.RouteTemplateBeanDefinition;
+import org.apache.camel.spi.annotations.YamlProperty;
+import org.apache.camel.spi.annotations.YamlType;
+import org.snakeyaml.engine.v2.nodes.Node;
+
+@YamlType(
+ inline = true,
+ types = org.apache.camel.model.RouteTemplateBeanDefinition.class,
+ order = YamlDeserializerResolver.ORDER_DEFAULT,
+ nodes = "template-bean",
+ properties = {
+ @YamlProperty(name = "bean-type", type = "string"),
+ @YamlProperty(name = "name", type = "string", required =
true),
+ @YamlProperty(name = "property", type =
"array:org.apache.camel.model.PropertyDefinition"),
+ @YamlProperty(name = "properties", type = "object"),
+ @YamlProperty(name = "script", type =
"object:org.apache.camel.model.RouteTemplateScriptDefinition"),
+ @YamlProperty(name = "type", type = "string", required =
true)
+ })
+public class RouteTemplateBeanDefinitionDeserializer extends
YamlDeserializerBase<RouteTemplateBeanDefinition> {
+ public RouteTemplateBeanDefinitionDeserializer() {
+ super(RouteTemplateBeanDefinition.class);
+ }
+
+ @Override
+ protected RouteTemplateBeanDefinition newInstance() {
+ return new RouteTemplateBeanDefinition();
+ }
+
+ @Override
+ protected RouteTemplateBeanDefinition newInstance(String value) {
+ return new RouteTemplateBeanDefinition(value);
+ }
+
+ @Override
+ protected boolean setProperty(
+ RouteTemplateBeanDefinition target, String propertyKey,
+ String propertyName, Node node) {
+ switch (propertyKey) {
+ case "bean-type": {
+ String val = asText(node);
+ target.setBeanType(val);
+ break;
+ }
+ case "name": {
+ String val = asText(node);
+ target.setName(val);
+ break;
+ }
+ case "property": {
+ java.util.List<org.apache.camel.model.PropertyDefinition> val
+ = asFlatList(node,
org.apache.camel.model.PropertyDefinition.class);
+ target.setProperties(val);
+ break;
+ }
+ case "properties": {
+ target.setProperties(
+ asMap(node).entrySet().stream()
+ .map(e -> new PropertyDefinition(e.getKey(),
(String) e.getValue()))
+ .collect(Collectors.toList()));
+ break;
+ }
+ case "script": {
+ org.apache.camel.model.RouteTemplateScriptDefinition val
+ = asType(node,
org.apache.camel.model.RouteTemplateScriptDefinition.class);
+ target.setScript(val);
+ break;
+ }
+ case "type": {
+ String val = asText(node);
+ target.setType(val);
+ break;
+ }
+ default: {
+ return false;
+ }
+ }
+ return true;
+ }
+}
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 39388e3..77628a7 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
@@ -2071,6 +2071,9 @@
"name" : {
"type" : "string"
},
+ "properties" : {
+ "type" : "object"
+ },
"property" : {
"type" : "array",
"items" : {
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletTest.groovy
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletTest.groovy
index f4bfbb4..6d6b223 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletTest.groovy
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletTest.groovy
@@ -19,6 +19,7 @@ package org.apache.camel.dsl.yaml
import org.apache.camel.component.mock.MockEndpoint
import org.apache.camel.dsl.yaml.common.YamlDeserializationMode
import org.apache.camel.dsl.yaml.support.YamlTestSupport
+import org.apache.camel.dsl.yaml.support.model.MySetBody
import org.apache.camel.dsl.yaml.support.model.MyUppercaseProcessor
import org.apache.camel.processor.aggregate.UseLatestAggregationStrategy
import org.apache.camel.spi.Resource
@@ -283,6 +284,77 @@ class KameletTest extends YamlTestSupport {
MockEndpoint.assertIsSatisfied(context)
}
+ def "kamelet (definition with local bean and properties)"() {
+ setup:
+ loadRoutes """
+ - template:
+ id: "myTemplate"
+ beans:
+ - name: "myProcessor"
+ type: "#class:${MySetBody.class.name}"
+ properties:
+ payload: "test-payload"
+ from:
+ uri: "kamelet:source"
+ steps:
+ - process:
+ ref: "{{myProcessor}}"
+ - from:
+ uri: "direct:start"
+ steps:
+ - to: "kamelet:myTemplate"
+ - to: "mock:result"
+ """
+
+ withMock('mock:result') {
+ expectedMessageCount 1
+ expectedBodiesReceived 'test-payload'
+ }
+ when:
+ withTemplate {
+ to('direct:start').withBody('hello').send()
+ }
+
+ then:
+ MockEndpoint.assertIsSatisfied(context)
+ }
+
+ def "kamelet (definition with local bean and property)"() {
+ setup:
+ loadRoutes """
+ - template:
+ id: "myTemplate"
+ beans:
+ - name: "myProcessor"
+ type: "#class:${MySetBody.class.name}"
+ property:
+ - key: "payload"
+ value: "test-payload"
+ from:
+ uri: "kamelet:source"
+ steps:
+ - process:
+ ref: "{{myProcessor}}"
+ - from:
+ uri: "direct:start"
+ steps:
+ - to: "kamelet:myTemplate"
+ - to: "mock:result"
+ """
+
+ withMock('mock:result') {
+ expectedMessageCount 1
+ expectedBodiesReceived 'test-payload'
+ }
+ when:
+ withTemplate {
+ to('direct:start').withBody('hello').send()
+ }
+
+ then:
+ MockEndpoint.assertIsSatisfied(context)
+ }
+
def "kamelet (definition with default parameters)"() {
setup:
loadRoutes """
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteTemplateTest.groovy
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteTemplateTest.groovy
index 74f030a..a09f3d1 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteTemplateTest.groovy
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteTemplateTest.groovy
@@ -18,6 +18,7 @@ package org.apache.camel.dsl.yaml
import org.apache.camel.component.mock.MockEndpoint
import org.apache.camel.dsl.yaml.support.YamlTestSupport
+import org.apache.camel.dsl.yaml.support.model.MySetBody
import org.apache.camel.dsl.yaml.support.model.MyUppercaseProcessor
import org.apache.camel.model.LogDefinition
import org.apache.camel.model.RouteTemplateDefinition
@@ -151,6 +152,95 @@ class RouteTemplateTest extends YamlTestSupport {
]
}
+ def "create template with bean and properties"() {
+ setup:
+ loadRoutes """
+ - template:
+ id: "myTemplate"
+ beans:
+ - name: "myProcessor"
+ type: "#class:${MySetBody.class.name}"
+ properties:
+ payload: "test-payload"
+ from:
+ uri: "direct:{{directName}}"
+ steps:
+ - process:
+ ref: "{{myProcessor}}"
+ - from:
+ uri: "direct:start"
+ steps:
+ - to: "direct:myId"
+ - to: "mock:result"
+ """
+
+ withMock('mock:result') {
+ expectedMessageCount 1
+ expectedBodiesReceived 'test-payload'
+ }
+ when:
+ context.addRouteFromTemplate('myId', 'myTemplate', ['directName':
'myId'])
+ context.start()
+
+ withTemplate {
+ to('direct:start').withBody('hello').send()
+ }
+ then:
+ context.routeTemplateDefinitions.size() == 1
+
+ with(context.routeTemplateDefinitions[0], RouteTemplateDefinition)
{
+ id == 'myTemplate'
+ templateBeans.size() == 1
+ }
+
+ MockEndpoint.assertIsSatisfied(context)
+ }
+
+ def "create template with bean and property"() {
+ setup:
+ loadRoutes """
+ - template:
+ id: "myTemplate"
+ beans:
+ - name: "myProcessor"
+ type: "#class:${MySetBody.class.name}"
+ property:
+ - key: "payload"
+ value: "test-payload"
+ from:
+ uri: "direct:{{directName}}"
+ steps:
+ - process:
+ ref: "{{myProcessor}}"
+ - from:
+ uri: "direct:start"
+ steps:
+ - to: "direct:myId"
+ - to: "mock:result"
+ """
+
+ withMock('mock:result') {
+ expectedMessageCount 1
+ expectedBodiesReceived 'test-payload'
+ }
+ when:
+ context.addRouteFromTemplate('myId', 'myTemplate', ['directName':
'myId'])
+ context.start()
+
+ withTemplate {
+ to('direct:start').withBody('hello').send()
+ }
+ then:
+ context.routeTemplateDefinitions.size() == 1
+
+ with(context.routeTemplateDefinitions[0], RouteTemplateDefinition)
{
+ id == 'myTemplate'
+ templateBeans.size() == 1
+ }
+
+ MockEndpoint.assertIsSatisfied(context)
+ }
+
def "create template with properties"() {
when:
loadRoutes """