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) {