You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/12/04 10:54:43 UTC

[camel] 04/04: CAMEL-17272: camel-spring-xml - Classic Spring XML add support for external route configuration XML files

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 <cl...@gmail.com>
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;
+    }
+}