This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch kamelet-ctr3
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 5151376c3cf3d05fb9a60edaf6aac5696c4efa44
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Thu May 2 18:49:36 2024 +0200

    CAMEL-20514: camel-model - Add support for bean constructors for beans in 
route templates or kamelets
---
 .../apache/camel/catalog/models/routeTemplate.json |  2 +-
 .../apache/camel/catalog/models/templateBean.json  |  2 +-
 .../apache/camel/catalog/schemas/camel-spring.xsd  | 19 ++++++++++++++++--
 .../java/org/apache/camel/impl/DefaultModel.java   |  3 +--
 .../org/apache/camel/model/routeTemplate.json      |  2 +-
 .../org/apache/camel/model/templateBean.json       |  2 +-
 .../apache/camel/model/BeanFactoryDefinition.java  |  4 +++-
 .../camel/model/RouteTemplateBeanDefinition.java   |  1 +
 .../camel/model/RouteTemplateDefinition.java       | 23 +++++++++++-----------
 .../camel/model/app/RegistryBeanDefinition.java    |  2 +-
 .../java/org/apache/camel/xml/in/ModelParser.java  |  8 ++++----
 .../java/org/apache/camel/xml/out/ModelWriter.java |  4 ++--
 .../org/apache/camel/xml/LwModelToXMLDumper.java   | 12 ++++-------
 .../camel/xml/jaxb/JaxbModelToXMLDumper.java       | 12 ++++-------
 .../org/apache/camel/yaml/out/ModelWriter.java     |  4 ++--
 .../org/apache/camel/yaml/LwModelToYAMLDumper.java | 17 +++++++---------
 .../org/apache/camel/kotlin/RegistryBeanDsl.kt     |  4 ++--
 .../main/kotlin/org/apache/camel/kotlin/RootDsl.kt |  2 +-
 .../RouteTemplateDefinitionDeserializer.java       |  8 +++++---
 .../generated/resources/schema/camelYamlDsl.json   |  2 +-
 .../apache/camel/dsl/yaml/KameletLoaderTest.groovy | 10 +++++-----
 21 files changed, 76 insertions(+), 67 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/routeTemplate.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/routeTemplate.json
index f8f28880cd1..92e66275376 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/routeTemplate.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/routeTemplate.json
@@ -15,7 +15,7 @@
     "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": 
"common", "required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the id of this node" },
     "description": { "index": 1, "kind": "attribute", "displayName": 
"Description", "group": "common", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Sets the description of this node" },
     "templateParameter": { "index": 2, "kind": "element", "displayName": 
"Template Parameter", "group": "common", "required": false, "type": "array", 
"javaType": 
"java.util.List<org.apache.camel.model.RouteTemplateParameterDefinition>", 
"deprecated": false, "autowired": false, "secret": false, "description": "Adds 
a template parameter the route template uses" },
-    "templateBean": { "index": 3, "kind": "element", "displayName": "Template 
Bean", "group": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.RouteTemplateBeanDefinition>", 
"deprecated": false, "autowired": false, "secret": false, "description": "Adds 
a local bean the route template uses" },
+    "templateBean": { "index": 3, "kind": "element", "displayName": "Template 
Bean", "group": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.app.RegistryBeanDefinition<org.apache.camel.model.RouteTemplateDefinition>>",
 "deprecated": false, "autowired": false, "secret": false, "description": "Adds 
a local bean the route template uses" },
     "route": { "index": 4, "kind": "element", "displayName": "Route", "group": 
"common", "required": true, "type": "object", "javaType": 
"org.apache.camel.model.RouteDefinition", "deprecated": false, "autowired": 
false, "secret": false, "description": "To define the route in the template" }
   }
 }
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/templateBean.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/templateBean.json
index 1ceca0e8443..75e1336ad48 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/templateBean.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/templateBean.json
@@ -4,7 +4,7 @@
     "name": "templateBean",
     "title": "Template Bean",
     "description": "A route template bean (local bean)",
-    "deprecated": false,
+    "deprecated": true,
     "label": "configuration",
     "javaType": "org.apache.camel.model.RouteTemplateBeanDefinition",
     "abstract": false,
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
index 464bc3108ca..ed2e0edffc1 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
@@ -1927,7 +1927,7 @@ Configures a ProducerTemplate
     <xs:annotation>
       <xs:documentation xml:lang="en">
 <![CDATA[
-A route template bean (local bean)
+Deprecated: A route template bean (local bean)
 ]]>
       </xs:documentation>
     </xs:annotation>
@@ -12545,7 +12545,15 @@ Reference to the route templates in the xml dsl.
       <xs:extension base="tns:optionalIdentifiedDefinition">
         <xs:sequence>
           <xs:element maxOccurs="unbounded" minOccurs="0" 
ref="tns:templateParameter"/>
-          <xs:element maxOccurs="unbounded" minOccurs="0" 
ref="tns:templateBean"/>
+          <xs:element maxOccurs="unbounded" minOccurs="0" name="templateBean" 
type="tns:registryBeanDefinition">
+            <xs:annotation>
+              <xs:documentation xml:lang="en">
+<![CDATA[
+Adds a local bean the route template uses.
+]]>
+              </xs:documentation>
+            </xs:annotation>
+          </xs:element>
           <xs:element ref="tns:route"/>
         </xs:sequence>
       </xs:extension>
@@ -12591,6 +12599,13 @@ Description of the parameter.
       </xs:annotation>
     </xs:attribute>
   </xs:complexType>
+  <xs:complexType name="registryBeanDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:beanFactoryDefinition">
+        <xs:sequence/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
   <xs:complexType name="routeTemplatesDefinition">
     <xs:complexContent>
       <xs:extension base="tns:optionalIdentifiedDefinition">
diff --git 
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java 
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
index 6014afea38d..ea41f2587b4 100644
--- 
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
+++ 
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
@@ -44,7 +44,6 @@ import org.apache.camel.model.RouteConfigurationDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RouteDefinitionHelper;
 import org.apache.camel.model.RouteFilters;
-import org.apache.camel.model.RouteTemplateBeanDefinition;
 import org.apache.camel.model.RouteTemplateDefinition;
 import org.apache.camel.model.RouteTemplateParameterDefinition;
 import org.apache.camel.model.RoutesDefinition;
@@ -546,7 +545,7 @@ public class DefaultModel implements Model {
 
     private static void addTemplateBeans(RouteTemplateContext 
routeTemplateContext, RouteTemplateDefinition target)
             throws Exception {
-        for (RouteTemplateBeanDefinition b : target.getTemplateBeans()) {
+        for (RegistryBeanDefinition b : target.getTemplateBeans()) {
             BeanModelHelper.bind(b, routeTemplateContext);
         }
     }
diff --git 
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/routeTemplate.json
 
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/routeTemplate.json
index f8f28880cd1..92e66275376 100644
--- 
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/routeTemplate.json
+++ 
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/routeTemplate.json
@@ -15,7 +15,7 @@
     "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": 
"common", "required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the id of this node" },
     "description": { "index": 1, "kind": "attribute", "displayName": 
"Description", "group": "common", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Sets the description of this node" },
     "templateParameter": { "index": 2, "kind": "element", "displayName": 
"Template Parameter", "group": "common", "required": false, "type": "array", 
"javaType": 
"java.util.List<org.apache.camel.model.RouteTemplateParameterDefinition>", 
"deprecated": false, "autowired": false, "secret": false, "description": "Adds 
a template parameter the route template uses" },
-    "templateBean": { "index": 3, "kind": "element", "displayName": "Template 
Bean", "group": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.RouteTemplateBeanDefinition>", 
"deprecated": false, "autowired": false, "secret": false, "description": "Adds 
a local bean the route template uses" },
+    "templateBean": { "index": 3, "kind": "element", "displayName": "Template 
Bean", "group": "common", "required": false, "type": "array", "javaType": 
"java.util.List<org.apache.camel.model.app.RegistryBeanDefinition<org.apache.camel.model.RouteTemplateDefinition>>",
 "deprecated": false, "autowired": false, "secret": false, "description": "Adds 
a local bean the route template uses" },
     "route": { "index": 4, "kind": "element", "displayName": "Route", "group": 
"common", "required": true, "type": "object", "javaType": 
"org.apache.camel.model.RouteDefinition", "deprecated": false, "autowired": 
false, "secret": false, "description": "To define the route in the template" }
   }
 }
diff --git 
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/templateBean.json
 
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/templateBean.json
index 1ceca0e8443..75e1336ad48 100644
--- 
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/templateBean.json
+++ 
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/templateBean.json
@@ -4,7 +4,7 @@
     "name": "templateBean",
     "title": "Template Bean",
     "description": "A route template bean (local bean)",
-    "deprecated": false,
+    "deprecated": true,
     "label": "configuration",
     "javaType": "org.apache.camel.model.RouteTemplateBeanDefinition",
     "abstract": false,
diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/BeanFactoryDefinition.java
 
b/core/camel-core-model/src/main/java/org/apache/camel/model/BeanFactoryDefinition.java
index 07a8022ca5d..dd9d009ef06 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/BeanFactoryDefinition.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/BeanFactoryDefinition.java
@@ -44,6 +44,8 @@ import org.apache.camel.spi.ResourceAware;
 public abstract class BeanFactoryDefinition<
         T extends BeanFactoryDefinition<T, P>, P> implements ResourceAware {
 
+    // TODO: only 1 class of this
+
     @XmlTransient
     private Resource resource;
     @XmlTransient
@@ -84,7 +86,7 @@ public abstract class BeanFactoryDefinition<
     @Metadata(label = "advanced")
     private String script;
 
-    void setParent(P parent) {
+    public void setParent(P parent) {
         this.parent = parent;
     }
 
diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateBeanDefinition.java
 
b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateBeanDefinition.java
index bcb2d1a985c..d72e31ee43b 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateBeanDefinition.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateBeanDefinition.java
@@ -28,6 +28,7 @@ import org.apache.camel.spi.Metadata;
 @Metadata(label = "configuration")
 @XmlRootElement(name = "templateBean")
 @XmlAccessorType(XmlAccessType.FIELD)
+@Deprecated
 public class RouteTemplateBeanDefinition
         extends BeanFactoryDefinition<RouteTemplateBeanDefinition, 
RouteTemplateDefinition> {
 }
diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java
 
b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java
index 6d1730fbba7..e8849d78b11 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java
@@ -33,6 +33,7 @@ import jakarta.xml.bind.annotation.XmlType;
 import org.apache.camel.Endpoint;
 import org.apache.camel.RouteTemplateContext;
 import org.apache.camel.builder.EndpointConsumerBuilder;
+import org.apache.camel.model.app.RegistryBeanDefinition;
 import org.apache.camel.spi.AsEndpointUri;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.Resource;
@@ -55,7 +56,7 @@ public class RouteTemplateDefinition extends 
OptionalIdentifiedDefinition<RouteT
     private List<RouteTemplateParameterDefinition> templateParameters;
     @XmlElement(name = "templateBean")
     @Metadata(description = "Adds a local bean the route template uses")
-    private List<RouteTemplateBeanDefinition> templateBeans;
+    private List<RegistryBeanDefinition<RouteTemplateDefinition>> 
templateBeans;
     @XmlElement(name = "route", required = true)
     private RouteDefinition route = new RouteDefinition();
     @XmlTransient
@@ -69,11 +70,11 @@ public class RouteTemplateDefinition extends 
OptionalIdentifiedDefinition<RouteT
         this.templateParameters = templateParameters;
     }
 
-    public List<RouteTemplateBeanDefinition> getTemplateBeans() {
+    public List<RegistryBeanDefinition<RouteTemplateDefinition>> 
getTemplateBeans() {
         return templateBeans;
     }
 
-    public void setTemplateBeans(List<RouteTemplateBeanDefinition> 
templateBeans) {
+    public void 
setTemplateBeans(List<RegistryBeanDefinition<RouteTemplateDefinition>> 
templateBeans) {
         this.templateBeans = templateBeans;
     }
 
@@ -224,7 +225,7 @@ public class RouteTemplateDefinition extends 
OptionalIdentifiedDefinition<RouteT
         if (templateBeans == null) {
             templateBeans = new ArrayList<>();
         }
-        RouteTemplateBeanDefinition def = new RouteTemplateBeanDefinition();
+        RegistryBeanDefinition def = new RegistryBeanDefinition();
         def.setName(name);
         def.setBeanType(type);
         templateBeans.add(def);
@@ -242,7 +243,7 @@ public class RouteTemplateDefinition extends 
OptionalIdentifiedDefinition<RouteT
         if (templateBeans == null) {
             templateBeans = new ArrayList<>();
         }
-        RouteTemplateBeanDefinition def = new RouteTemplateBeanDefinition();
+        RegistryBeanDefinition def = new RegistryBeanDefinition();
         def.setName(name);
         if (bean instanceof RouteTemplateContext.BeanSupplier) {
             def.setBeanSupplier((RouteTemplateContext.BeanSupplier<Object>) 
bean);
@@ -268,7 +269,7 @@ public class RouteTemplateDefinition extends 
OptionalIdentifiedDefinition<RouteT
         if (templateBeans == null) {
             templateBeans = new ArrayList<>();
         }
-        RouteTemplateBeanDefinition def = new RouteTemplateBeanDefinition();
+        RegistryBeanDefinition def = new RegistryBeanDefinition();
         def.setName(name);
         def.setBeanSupplier(ctx -> ((Supplier<?>) bean).get());
         templateBeans.add(def);
@@ -286,7 +287,7 @@ public class RouteTemplateDefinition extends 
OptionalIdentifiedDefinition<RouteT
         if (templateBeans == null) {
             templateBeans = new ArrayList<>();
         }
-        RouteTemplateBeanDefinition def = new RouteTemplateBeanDefinition();
+        RegistryBeanDefinition def = new RegistryBeanDefinition();
         def.setName(name);
         def.setBeanType(type);
         def.setBeanSupplier(bean);
@@ -305,7 +306,7 @@ public class RouteTemplateDefinition extends 
OptionalIdentifiedDefinition<RouteT
         if (templateBeans == null) {
             templateBeans = new ArrayList<>();
         }
-        RouteTemplateBeanDefinition def = new RouteTemplateBeanDefinition();
+        RegistryBeanDefinition<RouteTemplateDefinition> def = new 
RegistryBeanDefinition<>();
         def.setName(name);
         def.setScriptLanguage(language);
         def.setScript(script);
@@ -325,7 +326,7 @@ public class RouteTemplateDefinition extends 
OptionalIdentifiedDefinition<RouteT
         if (templateBeans == null) {
             templateBeans = new ArrayList<>();
         }
-        RouteTemplateBeanDefinition def = new RouteTemplateBeanDefinition();
+        RegistryBeanDefinition<RouteTemplateDefinition> def = new 
RegistryBeanDefinition<>();
         def.setName(name);
         def.setBeanType(type);
         def.setScriptLanguage(language);
@@ -340,11 +341,11 @@ public class RouteTemplateDefinition extends 
OptionalIdentifiedDefinition<RouteT
      * @param  name the name of the bean
      * @return      fluent builder to choose which language and script to use 
for creating the bean
      */
-    public RouteTemplateBeanDefinition templateBean(String name) {
+    public RegistryBeanDefinition<RouteTemplateDefinition> templateBean(String 
name) {
         if (templateBeans == null) {
             templateBeans = new ArrayList<>();
         }
-        RouteTemplateBeanDefinition def = new RouteTemplateBeanDefinition();
+        RegistryBeanDefinition<RouteTemplateDefinition> def = new 
RegistryBeanDefinition<>();
         def.setParent(this);
         def.setName(name);
         templateBeans.add(def);
diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/app/RegistryBeanDefinition.java
 
b/core/camel-core-model/src/main/java/org/apache/camel/model/app/RegistryBeanDefinition.java
index 7d698384f0d..e7a239d3863 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/app/RegistryBeanDefinition.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/app/RegistryBeanDefinition.java
@@ -29,6 +29,6 @@ import org.apache.camel.spi.Metadata;
 @Metadata(label = "configuration")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-public class RegistryBeanDefinition extends 
BeanFactoryDefinition<RegistryBeanDefinition, RegistryBeanDefinition> {
+public class RegistryBeanDefinition<P> extends 
BeanFactoryDefinition<RegistryBeanDefinition<P>, P> {
 
 }
diff --git 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
index d3463869c5d..ab5f821a711 100644
--- 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
+++ 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
@@ -940,7 +940,7 @@ public class ModelParser extends BaseParser {
     protected RouteTemplateDefinition doParseRouteTemplateDefinition() throws 
IOException, XmlPullParserException {
         return doParse(new RouteTemplateDefinition(), 
optionalIdentifiedDefinitionAttributeHandler(), (def, key) -> switch (key) {
                 case "route": def.setRoute(doParseRouteDefinition()); yield 
true;
-                case "templateBean": 
doAdd(doParseRouteTemplateBeanDefinition(), def.getTemplateBeans(), 
def::setTemplateBeans); yield true;
+                case "templateBean": doAdd(doParseRegistryBeanDefinition(), 
def.getTemplateBeans(), def::setTemplateBeans); yield true;
                 case "templateParameter": 
doAdd(doParseRouteTemplateParameterDefinition(), def.getTemplateParameters(), 
def::setTemplateParameters); yield true;
                 default: yield 
optionalIdentifiedDefinitionElementHandler().accept(def, key);
             }, noValueHandler());
@@ -954,6 +954,9 @@ public class ModelParser extends BaseParser {
                 default: yield false;
             }, noElementHandler(), noValueHandler());
     }
+    protected RegistryBeanDefinition doParseRegistryBeanDefinition() throws 
IOException, XmlPullParserException {
+        return doParse(new RegistryBeanDefinition(), 
beanFactoryDefinitionAttributeHandler(), beanFactoryDefinitionElementHandler(), 
noValueHandler());
+    }
     protected RouteTemplatesDefinition doParseRouteTemplatesDefinition() 
throws IOException, XmlPullParserException {
         return doParse(new RouteTemplatesDefinition(), 
optionalIdentifiedDefinitionAttributeHandler(), (def, key) -> switch (key) {
                 case "routeTemplate": doAdd(doParseRouteTemplateDefinition(), 
def.getRouteTemplates(), def::setRouteTemplates); yield true;
@@ -1348,9 +1351,6 @@ public class ModelParser extends BaseParser {
                 default: yield false;
             }, noElementHandler(), noValueHandler());
     }
-    protected RegistryBeanDefinition doParseRegistryBeanDefinition() throws 
IOException, XmlPullParserException {
-        return doParse(new RegistryBeanDefinition(), 
beanFactoryDefinitionAttributeHandler(), beanFactoryDefinitionElementHandler(), 
noValueHandler());
-    }
     protected RestConfigurationDefinition doParseRestConfigurationDefinition() 
throws IOException, XmlPullParserException {
         return doParse(new RestConfigurationDefinition(), (def, key, val) -> 
switch (key) {
                 case "apiComponent": def.setApiComponent(val); yield true;
diff --git 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
index 90c30a09cbb..fd0e25c72da 100644
--- 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
+++ 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
@@ -1582,7 +1582,7 @@ public class ModelWriter extends BaseWriter {
         doWriteOptionalIdentifiedDefinitionAttributes(def);
         doWriteList(null, "templateParameter", def.getTemplateParameters(), 
this::doWriteRouteTemplateParameterDefinition);
         doWriteElement("route", def.getRoute(), this::doWriteRouteDefinition);
-        doWriteList(null, "templateBean", def.getTemplateBeans(), 
this::doWriteRouteTemplateBeanDefinition);
+        doWriteList(null, "templateBean", def.getTemplateBeans(), 
this::doWriteRegistryBeanDefinition);
         endElement(name);
     }
     protected void doWriteRouteTemplateParameterDefinition(String name, 
RouteTemplateParameterDefinition def) throws IOException {
@@ -1987,7 +1987,7 @@ public class ModelWriter extends BaseWriter {
         doWriteAttribute("base-package", def.getBasePackage());
         endElement(name);
     }
-    protected void doWriteRegistryBeanDefinition(String name, 
RegistryBeanDefinition def) throws IOException {
+    protected void doWriteRegistryBeanDefinition(String name, 
RegistryBeanDefinition<?> def) throws IOException {
         startElement(name);
         doWriteBeanFactoryDefinitionAttributes(def);
         doWriteBeanFactoryDefinitionElements(def);
diff --git 
a/core/camel-xml-io/src/main/java/org/apache/camel/xml/LwModelToXMLDumper.java 
b/core/camel-xml-io/src/main/java/org/apache/camel/xml/LwModelToXMLDumper.java
index cb14b3e4110..8e7d69b1d89 100644
--- 
a/core/camel-xml-io/src/main/java/org/apache/camel/xml/LwModelToXMLDumper.java
+++ 
b/core/camel-xml-io/src/main/java/org/apache/camel/xml/LwModelToXMLDumper.java
@@ -355,24 +355,20 @@ public class LwModelToXMLDumper implements 
ModelToXMLDumper {
             buffer.write(">\n");
             if (b.getConstructors() != null && !b.getConstructors().isEmpty()) 
{
                 buffer.write(String.format("        <constructors>%n"));
-                for (Map.Entry<Integer, Object> entry : 
b.getConstructors().entrySet()) {
-                    Integer idx = entry.getKey();
-                    Object value = entry.getValue();
+                b.getConstructors().forEach((idx, value) -> {
                     if (idx != null) {
                         buffer.write(String.format("            <constructor 
index=\"%d\" value=\"%s\"/>%n", idx, value));
                     } else {
                         buffer.write(String.format("            <constructor 
value=\"%s\"/>%n", value));
                     }
-                }
+                });
                 buffer.write(String.format("        </constructors>%n"));
             }
             if (b.getProperties() != null && !b.getProperties().isEmpty()) {
                 buffer.write(String.format("        <properties>%n"));
-                for (Map.Entry<String, Object> entry : 
b.getProperties().entrySet()) {
-                    String key = entry.getKey();
-                    Object value = entry.getValue();
+                b.getProperties().forEach((key, value) -> {
                     buffer.write(String.format("            <property 
key=\"%s\" value=\"%s\"/>%n", key, value));
-                }
+                });
                 buffer.write(String.format("        </properties>%n"));
             }
             buffer.write(String.format("    </bean>%n"));
diff --git 
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbModelToXMLDumper.java
 
b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbModelToXMLDumper.java
index 5b3cea30587..aa7099929a1 100644
--- 
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbModelToXMLDumper.java
+++ 
b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbModelToXMLDumper.java
@@ -340,24 +340,20 @@ public class JaxbModelToXMLDumper implements 
ModelToXMLDumper {
             buffer.write(">\n");
             if (b.getConstructors() != null && !b.getConstructors().isEmpty()) 
{
                 buffer.write(String.format("        <constructors>%n"));
-                for (Map.Entry<Integer, Object> entry : 
b.getConstructors().entrySet()) {
-                    Integer idx = entry.getKey();
-                    Object value = entry.getValue();
+                b.getConstructors().forEach((idx, value) -> {
                     if (idx != null) {
                         buffer.write(String.format("            <constructor 
index=\"%d\" value=\"%s\"/>%n", idx, value));
                     } else {
                         buffer.write(String.format("            <constructor 
value=\"%s\"/>%n", value));
                     }
-                }
+                });
                 buffer.write(String.format("        </constructors>%n"));
             }
             if (b.getProperties() != null && !b.getProperties().isEmpty()) {
                 buffer.write(String.format("        <properties>%n"));
-                for (Map.Entry<String, Object> entry : 
b.getProperties().entrySet()) {
-                    String key = entry.getKey();
-                    Object value = entry.getValue();
+                b.getProperties().forEach((key, value) -> {
                     buffer.write(String.format("            <property 
key=\"%s\" value=\"%s\"/>%n", key, value));
-                }
+                });
                 buffer.write(String.format("        </properties>%n"));
             }
             buffer.write(String.format("    </bean>%n"));
diff --git 
a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
 
b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
index b230ecb8b3a..befc857d865 100644
--- 
a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
+++ 
b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
@@ -1582,7 +1582,7 @@ public class ModelWriter extends BaseWriter {
         doWriteOptionalIdentifiedDefinitionAttributes(def);
         doWriteList(null, "templateParameter", def.getTemplateParameters(), 
this::doWriteRouteTemplateParameterDefinition);
         doWriteElement("route", def.getRoute(), this::doWriteRouteDefinition);
-        doWriteList(null, "templateBean", def.getTemplateBeans(), 
this::doWriteRouteTemplateBeanDefinition);
+        doWriteList(null, "templateBean", def.getTemplateBeans(), 
this::doWriteRegistryBeanDefinition);
         endElement(name);
     }
     protected void doWriteRouteTemplateParameterDefinition(String name, 
RouteTemplateParameterDefinition def) throws IOException {
@@ -1987,7 +1987,7 @@ public class ModelWriter extends BaseWriter {
         doWriteAttribute("base-package", def.getBasePackage());
         endElement(name);
     }
-    protected void doWriteRegistryBeanDefinition(String name, 
RegistryBeanDefinition def) throws IOException {
+    protected void doWriteRegistryBeanDefinition(String name, 
RegistryBeanDefinition<?> def) throws IOException {
         startElement(name);
         doWriteBeanFactoryDefinitionAttributes(def);
         doWriteBeanFactoryDefinitionElements(def);
diff --git 
a/core/camel-yaml-io/src/main/java/org/apache/camel/yaml/LwModelToYAMLDumper.java
 
b/core/camel-yaml-io/src/main/java/org/apache/camel/yaml/LwModelToYAMLDumper.java
index e8581cd572b..d4376b550ae 100644
--- 
a/core/camel-yaml-io/src/main/java/org/apache/camel/yaml/LwModelToYAMLDumper.java
+++ 
b/core/camel-yaml-io/src/main/java/org/apache/camel/yaml/LwModelToYAMLDumper.java
@@ -25,6 +25,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Consumer;
 
 import org.apache.camel.CamelContext;
@@ -340,27 +341,23 @@ public class LwModelToYAMLDumper implements 
ModelToYAMLDumper {
             }
             if (b.getConstructors() != null && !b.getConstructors().isEmpty()) 
{
                 buffer.write(String.format("      constructors:%n"));
-                int counter = 0;
-                for (Map.Entry<Integer, Object> entry : 
b.getConstructors().entrySet()) {
-                    Integer key = entry.getKey();
-                    Object value = entry.getValue();
+                final AtomicInteger counter = new AtomicInteger();
+                b.getConstructors().forEach((key, value) -> {
                     if (key == null) {
-                        key = counter++;
+                        key = counter.getAndIncrement();
                     }
                     buffer.write(String.format("        %d: \"%s\"%n", key, 
value));
-                }
+                });
             }
             if (b.getProperties() != null && !b.getProperties().isEmpty()) {
                 buffer.write(String.format("      properties:%n"));
-                for (Map.Entry<String, Object> entry : 
b.getProperties().entrySet()) {
-                    String key = entry.getKey();
-                    Object value = entry.getValue();
+                b.getProperties().forEach((key, value) -> {
                     if (value instanceof String) {
                         buffer.write(String.format("        %s: \"%s\"%n", 
key, value));
                     } else {
                         buffer.write(String.format("        %s: %s%n", key, 
value));
                     }
-                }
+                });
             }
         }
     }
diff --git 
a/dsl/camel-kotlin-api/src/main/kotlin/org/apache/camel/kotlin/RegistryBeanDsl.kt
 
b/dsl/camel-kotlin-api/src/main/kotlin/org/apache/camel/kotlin/RegistryBeanDsl.kt
index ee0cc6bc663..e641710d6cc 100644
--- 
a/dsl/camel-kotlin-api/src/main/kotlin/org/apache/camel/kotlin/RegistryBeanDsl.kt
+++ 
b/dsl/camel-kotlin-api/src/main/kotlin/org/apache/camel/kotlin/RegistryBeanDsl.kt
@@ -20,7 +20,7 @@ import org.apache.camel.model.app.RegistryBeanDefinition
 
 @CamelDslMarker
 class RegistryBeanDsl(
-    val def: RegistryBeanDefinition
+    val def: RegistryBeanDefinition<Any>
 ) {
 
     init {
@@ -28,7 +28,7 @@ class RegistryBeanDsl(
     }
 
     fun name(name: String) {
-        def.name = name
+        def.name = name;
     }
 
     fun type(type: String) {
diff --git 
a/dsl/camel-kotlin-api/src/main/kotlin/org/apache/camel/kotlin/RootDsl.kt 
b/dsl/camel-kotlin-api/src/main/kotlin/org/apache/camel/kotlin/RootDsl.kt
index 7e9d240ae90..68944d42db5 100644
--- a/dsl/camel-kotlin-api/src/main/kotlin/org/apache/camel/kotlin/RootDsl.kt
+++ b/dsl/camel-kotlin-api/src/main/kotlin/org/apache/camel/kotlin/RootDsl.kt
@@ -58,7 +58,7 @@ class RootDsl(
     }
 
     fun bean(i: RegistryBeanDsl.() -> Unit) {
-        val def = RegistryBeanDefinition()
+        val def = RegistryBeanDefinition<Any>()
         RegistryBeanDsl(def).apply(i)
         val type = ctx.classResolver.resolveMandatoryClass(def.type)
         val instance = ctx.injector.newInstance(type)
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateDefinitionDeserializer.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateDefinitionDeserializer.java
index f801ee8d31d..e841c2db6d9 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateDefinitionDeserializer.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateDefinitionDeserializer.java
@@ -21,9 +21,9 @@ import java.util.List;
 import org.apache.camel.dsl.yaml.common.YamlDeserializerBase;
 import org.apache.camel.dsl.yaml.common.exception.InvalidRouteException;
 import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.RouteTemplateBeanDefinition;
 import org.apache.camel.model.RouteTemplateDefinition;
 import org.apache.camel.model.RouteTemplateParameterDefinition;
+import org.apache.camel.model.app.RegistryBeanDefinition;
 import org.apache.camel.spi.annotations.YamlIn;
 import org.apache.camel.spi.annotations.YamlProperty;
 import org.apache.camel.spi.annotations.YamlType;
@@ -46,7 +46,7 @@ import org.snakeyaml.engine.v2.nodes.Node;
                   @YamlProperty(name = "parameters",
                                 type = 
"array:org.apache.camel.model.RouteTemplateParameterDefinition"),
                   @YamlProperty(name = "beans",
-                                type = 
"array:org.apache.camel.model.RouteTemplateBeanDefinition")
+                                type = 
"array:org.apache.camel.model.app.RegistryBeanDefinition")
           })
 public class RouteTemplateDefinitionDeserializer extends 
YamlDeserializerBase<RouteTemplateDefinition> {
 
@@ -60,6 +60,7 @@ public class RouteTemplateDefinitionDeserializer extends 
YamlDeserializerBase<Ro
     }
 
     @Override
+    @SuppressWarnings("unchecked")
     protected boolean setProperty(
             RouteTemplateDefinition target, String propertyKey, String 
propertyName, Node node) {
 
@@ -92,7 +93,8 @@ public class RouteTemplateDefinitionDeserializer extends 
YamlDeserializerBase<Ro
                 break;
             }
             case "beans": {
-                List<RouteTemplateBeanDefinition> items = asFlatList(node, 
RouteTemplateBeanDefinition.class);
+                List<RegistryBeanDefinition<RouteTemplateDefinition>> items
+                        = (List) asFlatList(node, 
RegistryBeanDefinition.class);
                 target.setTemplateBeans(items);
                 break;
             }
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 9bcc0866225..2532c162d92 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
@@ -5237,7 +5237,7 @@
           "beans" : {
             "type" : "array",
             "items" : {
-              "$ref" : 
"#/items/definitions/org.apache.camel.model.RouteTemplateBeanDefinition"
+              "$ref" : 
"#/items/definitions/org.apache.camel.model.app.RegistryBeanDefinition"
             }
           },
           "description" : {
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletLoaderTest.groovy
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletLoaderTest.groovy
index 868a7e07880..aa081e1f6e0 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletLoaderTest.groovy
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletLoaderTest.groovy
@@ -416,8 +416,8 @@ class KameletLoaderTest extends YamlTestSupport {
                 it.type == 'org.apache.camel.dsl.yaml.KameletBean'
                 it.properties == null
                 it.constructors.size() == 2
-                it.constructors[0] == '123'
-                it.constructors[1] == 'Hello World'
+                it.constructors['0'] == '123'
+                it.constructors['1']== 'Hello World'
             }
             with(it.templateBeans[1]) {
                 it.name == 'kameletBean2'
@@ -425,9 +425,9 @@ class KameletLoaderTest extends YamlTestSupport {
                 it.properties.size() == 1
                 it.properties['kbProp2'] == 'kbValue2'
                 it.constructors.size() == 3
-                it.constructors[0] == '123'
-                it.constructors[1] == 'Hello World'
-                it.constructors[2] == '#bean:kameletBean'
+                it.constructors['0'] == '123'
+                it.constructors['1'] == 'Hello World'
+                it.constructors['2'] == '#bean:kameletBean'
             }
 
             with(route) {


Reply via email to