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 f6f122954698bd32c6f90c1c7bfc7fe20d685c3d Author: Claus Ibsen <[email protected]> AuthorDate: Sat Dec 4 11:45:16 2021 +0100 CAMEL-17272: camel-spring-xml - Classic Spring XML add support for external route configuration XML files --- .../resources/org/apache/camel/cdi/xml/jaxb.index | 1 + .../org/apache/camel/cdi/XmlCdiBeanFactory.java | 26 +++++++++++++ .../cdi/xml/ApplicationContextFactoryBean.java | 11 ++++++ .../camel/cdi/xml/CamelContextFactoryBean.java | 13 +++++++ .../xml/RouteConfigurationContextDefinition.java | 44 ++++++++++++++++++++++ 5 files changed, 95 insertions(+) diff --git a/components/camel-cdi/src/generated/resources/org/apache/camel/cdi/xml/jaxb.index b/components/camel-cdi/src/generated/resources/org/apache/camel/cdi/xml/jaxb.index index d36f889..438a9be 100644 --- a/components/camel-cdi/src/generated/resources/org/apache/camel/cdi/xml/jaxb.index +++ b/components/camel-cdi/src/generated/resources/org/apache/camel/cdi/xml/jaxb.index @@ -9,6 +9,7 @@ ImportDefinition ProducerTemplateFactoryBean RedeliveryPolicyFactoryBean RestContextDefinition +RouteConfigurationContextDefinition RouteContextDefinition RouteTemplateContextDefinition ThreadPoolFactoryBean diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlCdiBeanFactory.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlCdiBeanFactory.java index 8cd204e..58af540 100644 --- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlCdiBeanFactory.java +++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlCdiBeanFactory.java @@ -41,6 +41,7 @@ import org.apache.camel.cdi.xml.ErrorHandlerDefinition; import org.apache.camel.cdi.xml.ErrorHandlerType; import org.apache.camel.cdi.xml.ImportDefinition; import org.apache.camel.cdi.xml.RestContextDefinition; +import org.apache.camel.cdi.xml.RouteConfigurationContextDefinition; import org.apache.camel.cdi.xml.RouteContextDefinition; import org.apache.camel.cdi.xml.RouteTemplateContextDefinition; import org.apache.camel.core.xml.AbstractCamelFactoryBean; @@ -48,6 +49,7 @@ import org.apache.camel.core.xml.CamelServiceExporterDefinition; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.model.IdentifiedType; import org.apache.camel.model.OptionalIdentifiedDefinition; +import org.apache.camel.model.RouteConfigurationDefinition; import org.apache.camel.model.RouteDefinition; import org.apache.camel.model.RouteTemplateDefinition; import org.apache.camel.model.RoutesDefinition; @@ -128,6 +130,9 @@ final class XmlCdiBeanFactory { for (RouteContextDefinition factory : app.getRouteContexts()) { beans.add(routeContextBean(factory, url)); } + for (RouteConfigurationContextDefinition factory : app.getRouteConfigurationContexts()) { + beans.add(routeConfigurationContextBean(factory, url)); + } for (RouteTemplateContextDefinition factory : app.getRouteTemplateContexts()) { beans.add(routeTemplateContextBean(factory, url)); } @@ -346,6 +351,27 @@ final class XmlCdiBeanFactory { + bean.getQualifiers()); } + private SyntheticBean<?> routeConfigurationContextBean(RouteConfigurationContextDefinition definition, URL url) { + requireNonNull(definition.getId(), + () -> format("Missing [%s] attribute for imported bean [%s] from resource [%s]", + "id", "routeContext", url)); + + return new SyntheticBean<>( + manager, + new SyntheticAnnotated( + List.class, + Stream.of(List.class, new ListParameterizedType(RouteConfigurationDefinition.class)) + .collect(toSet()), + ANY, NamedLiteral.of(definition.getId())), + List.class, + new SyntheticInjectionTarget<>(definition::getRouteConfigurations), + bean -> "imported route configuration context with " + + "id [" + definition.getId() + "] " + + "from resource [" + url + "] " + + "with qualifiers " + + bean.getQualifiers()); + } + private SyntheticBean<?> routeContextBean(RouteContextDefinition definition, URL url) { requireNonNull(definition.getId(), () -> format("Missing [%s] attribute for imported bean [%s] from resource [%s]", diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ApplicationContextFactoryBean.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ApplicationContextFactoryBean.java index 60eb50a..9dde7dc 100644 --- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ApplicationContextFactoryBean.java +++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ApplicationContextFactoryBean.java @@ -40,6 +40,9 @@ public class ApplicationContextFactoryBean { @XmlElement(name = "import") private List<ImportDefinition> imports = new ArrayList<>(); + @XmlElement(name = "routeConfigurationContext") + private List<RouteConfigurationContextDefinition> routeConfigurationContexts = new ArrayList<>(); + @XmlElement(name = "restContext") private List<RestContextDefinition> restContexts = new ArrayList<>(); @@ -98,6 +101,14 @@ public class ApplicationContextFactoryBean { this.routeContexts = routeContexts; } + public List<RouteConfigurationContextDefinition> getRouteConfigurationContexts() { + return routeConfigurationContexts; + } + + public void setRouteConfigurationContexts(List<RouteConfigurationContextDefinition> routeConfigurationContexts) { + this.routeConfigurationContexts = routeConfigurationContexts; + } + public List<RouteTemplateContextDefinition> getRouteTemplateContexts() { return routeTemplateContexts; } diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/CamelContextFactoryBean.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/CamelContextFactoryBean.java index 4eceb35..dc4b15d 100644 --- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/CamelContextFactoryBean.java +++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/CamelContextFactoryBean.java @@ -58,6 +58,7 @@ import org.apache.camel.model.PackageScanDefinition; import org.apache.camel.model.Resilience4jConfigurationDefinition; import org.apache.camel.model.RestContextRefDefinition; import org.apache.camel.model.RouteBuilderDefinition; +import org.apache.camel.model.RouteConfigurationContextRefDefinition; import org.apache.camel.model.RouteConfigurationDefinition; import org.apache.camel.model.RouteContextRefDefinition; import org.apache.camel.model.RouteDefinition; @@ -245,6 +246,9 @@ public class CamelContextFactoryBean extends AbstractCamelContextFactoryBean<Def @XmlElement(name = "export", type = CamelServiceExporterDefinition.class) private List<CamelServiceExporterDefinition> exports; + @XmlElement(name = "routeConfigurationContextRef") + private List<RouteConfigurationContextRefDefinition> routeConfigurationRefs = new ArrayList<>(); + @XmlElement(name = "routeTemplateContextRef") private List<RouteTemplateContextRefDefinition> routeTemplateRefs = new ArrayList<>(); @@ -942,6 +946,15 @@ public class CamelContextFactoryBean extends AbstractCamelContextFactoryBean<Def } @Override + public List<RouteConfigurationContextRefDefinition> getRouteConfigurationRefs() { + return routeConfigurationRefs; + } + + public void setRouteConfigurationRefs(List<RouteConfigurationContextRefDefinition> routeConfigurationRefs) { + this.routeConfigurationRefs = routeConfigurationRefs; + } + + @Override public List<RouteTemplateContextRefDefinition> getRouteTemplateRefs() { return routeTemplateRefs; } diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/RouteConfigurationContextDefinition.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/RouteConfigurationContextDefinition.java new file mode 100644 index 0000000..0a6fcb1 --- /dev/null +++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/RouteConfigurationContextDefinition.java @@ -0,0 +1,44 @@ +/* + * 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.cdi.xml; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.camel.model.IdentifiedType; +import org.apache.camel.model.RouteConfigurationDefinition; + +@XmlRootElement(name = "routeConfigurationContext") +@XmlAccessorType(XmlAccessType.FIELD) +public class RouteConfigurationContextDefinition extends IdentifiedType { + + @XmlElement(name = "routeConfiguration", required = true) + private List<RouteConfigurationDefinition> routeConfigurations = new ArrayList<>(); + + public List<RouteConfigurationDefinition> getRouteConfigurations() { + return routeConfigurations; + } + + public void setRouteConfigurations(List<RouteConfigurationDefinition> routeConfigurations) { + this.routeConfigurations = routeConfigurations; + } +}
