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 2018/12/20 12:28:13 UTC

[camel] branch camel-2.22.x updated: CAMEL-13015: camel-spring-boot - xml routes/rests can now load from multiple paths separated by comma.

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

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


The following commit(s) were added to refs/heads/camel-2.22.x by this push:
     new b28b3ff  CAMEL-13015: camel-spring-boot - xml routes/rests can now load from multiple paths separated by comma.
b28b3ff is described below

commit b28b3ffda90caa3e2784d8cb273d7fa8181ccea6
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Dec 20 12:56:41 2018 +0100

    CAMEL-13015: camel-spring-boot - xml routes/rests can now load from multiple paths separated by comma.
---
 .../spring/boot/CamelConfigurationProperties.java  | 12 +++++
 .../apache/camel/spring/boot/RoutesCollector.java  | 50 +++++++++--------
 .../camel/spring/boot/CamelXmlRoutesTest.java      | 62 ++++++++++++++++++++++
 .../src/test/resources/routes/bar.xml              | 25 +++++++++
 .../src/test/resources/routes/foo.xml              | 25 +++++++++
 5 files changed, 151 insertions(+), 23 deletions(-)

diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelConfigurationProperties.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelConfigurationProperties.java
index d00f597..039ee0d 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelConfigurationProperties.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelConfigurationProperties.java
@@ -128,12 +128,24 @@ public class CamelConfigurationProperties {
     /**
      * Directory to scan for adding additional XML routes.
      * You can turn this off by setting the value to false.
+     *
+     * Files can be loaded from either classpath or file by prefixing with classpath: or file:
+     * Wildcards is supported using a ANT pattern style paths, such as classpath:&#42;&#42;/&#42;camel&#42;.xml
+     *
+     * Multiple directories can be specified and separated by comma, such as:
+     * file:/myapp/mycamel/&#42;.xml,file:/myapp/myothercamel/&#42;.xml
      */
     private String xmlRoutes = "classpath:camel/*.xml";
 
     /**
      * Directory to scan for adding additional XML rests.
      * You can turn this off by setting the value to false.
+     *
+     * Files can be loaded from either classpath or file by prefixing with classpath: or file:
+     * Wildcards is supported using a ANT pattern style paths, such as classpath:&#42;&#42;/&#42;camel&#42;.xml
+     *
+     * Multiple directories can be specified and separated by comma, such as:
+     * file:/myapp/mycamel/&#42;.xml,file:/myapp/myothercamel/&#42;.xml
      */
     private String xmlRests = "classpath:camel-rest/*.xml";
 
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java
index 54f2064..ea8bfe4 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java
@@ -273,35 +273,39 @@ public class RoutesCollector implements ApplicationListener<ContextRefreshedEven
     // Helpers
 
     private void loadXmlRoutes(ApplicationContext applicationContext, CamelContext camelContext, String directory) throws Exception {
-        LOG.info("Loading additional Camel XML routes from: {}", directory);
-        try {
-            Resource[] xmlRoutes = applicationContext.getResources(directory);
-            for (Resource xmlRoute : xmlRoutes) {
-                LOG.debug("Found XML route: {}", xmlRoute);
-                RoutesDefinition xmlDefinition = camelContext.loadRoutesDefinition(xmlRoute.getInputStream());
-                camelContext.addRouteDefinitions(xmlDefinition.getRoutes());
+        String[] parts = directory.split(",");
+        for (String part : parts) {
+            LOG.info("Loading additional Camel XML routes from: {}", part);
+            try {
+                Resource[] xmlRoutes = applicationContext.getResources(part);
+                for (Resource xmlRoute : xmlRoutes) {
+                    LOG.debug("Found XML route: {}", xmlRoute);
+                    RoutesDefinition xmlDefinition = camelContext.loadRoutesDefinition(xmlRoute.getInputStream());
+                    camelContext.addRouteDefinitions(xmlDefinition.getRoutes());
+                }
+            } catch (FileNotFoundException e) {
+                LOG.debug("No XML routes found in {}. Skipping XML routes detection.", part);
             }
-        } catch (FileNotFoundException e) {
-            LOG.debug("No XML routes found in {}. Skipping XML routes detection.", directory);
         }
     }
 
-    private void loadXmlRests(ApplicationContext applicationContext, CamelContext camelContext, String directory) {
-        LOG.info("Loading additional Camel XML rests from: {}", directory);
-        try {
-            final Resource[] xmlRests = applicationContext.getResources(directory);
-            for (final Resource xmlRest : xmlRests) {
-                final RestsDefinition xmlDefinitions = camelContext.loadRestsDefinition(xmlRest.getInputStream());
-                camelContext.addRestDefinitions(xmlDefinitions.getRests());
-                for (final RestDefinition xmlDefinition : xmlDefinitions.getRests()) {
-                    final List<RouteDefinition> routeDefinitions = xmlDefinition.asRouteDefinition(camelContext);
-                    camelContext.addRouteDefinitions(routeDefinitions);
+    private void loadXmlRests(ApplicationContext applicationContext, CamelContext camelContext, String directory) throws Exception {
+        String[] parts = directory.split(",");
+        for (String part : parts) {
+            LOG.info("Loading additional Camel XML rests from: {}", part);
+            try {
+                final Resource[] xmlRests = applicationContext.getResources(part);
+                for (final Resource xmlRest : xmlRests) {
+                    final RestsDefinition xmlDefinitions = camelContext.loadRestsDefinition(xmlRest.getInputStream());
+                    camelContext.addRestDefinitions(xmlDefinitions.getRests());
+                    for (final RestDefinition xmlDefinition : xmlDefinitions.getRests()) {
+                        final List<RouteDefinition> routeDefinitions = xmlDefinition.asRouteDefinition(camelContext);
+                        camelContext.addRouteDefinitions(routeDefinitions);
+                    }
                 }
+            } catch (FileNotFoundException e) {
+                LOG.debug("No XML rests found in {}. Skipping XML rests detection.", part);
             }
-        } catch (FileNotFoundException e) {
-            LOG.debug("No XML rests found in {}. Skipping XML rests detection.", directory);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
         }
     }
 
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelXmlRoutesTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelXmlRoutesTest.java
new file mode 100644
index 0000000..3ebff4e
--- /dev/null
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelXmlRoutesTest.java
@@ -0,0 +1,62 @@
+/**
+ * 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.spring.boot;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@DirtiesContext
+@RunWith(SpringRunner.class)
+@EnableAutoConfiguration
+@SpringBootTest(
+    classes = {
+        CamelXmlRoutesTest.class,
+        RouteConfigWithCamelContextInjected.class },
+    properties = {
+        "camel.springboot.xml-routes=file:src/test/resources/routes/foo.xml,file:src/test/resources/routes/bar.xml"}
+)
+public class CamelXmlRoutesTest extends Assert {
+
+    // Collaborators fixtures
+
+    @Autowired
+    CamelContext camelContext;
+
+    @Test
+    public void shouldDetectRoutes() {
+        // When
+        Route route = camelContext.getRoute("foo");
+
+        // Then
+        assertNotNull(route);
+
+        // When
+        route = camelContext.getRoute("bar");
+
+        // Then
+        assertNotNull(route);
+    }
+
+}
\ No newline at end of file
diff --git a/components/camel-spring-boot/src/test/resources/routes/bar.xml b/components/camel-spring-boot/src/test/resources/routes/bar.xml
new file mode 100644
index 0000000..63ee6df
--- /dev/null
+++ b/components/camel-spring-boot/src/test/resources/routes/bar.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<routes xmlns="http://camel.apache.org/schema/spring">
+  <route id="bar">
+    <from uri="direct:bar"/>
+    <to uri="mock:bar"/>
+  </route>
+</routes>
diff --git a/components/camel-spring-boot/src/test/resources/routes/foo.xml b/components/camel-spring-boot/src/test/resources/routes/foo.xml
new file mode 100644
index 0000000..99f798b
--- /dev/null
+++ b/components/camel-spring-boot/src/test/resources/routes/foo.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<routes xmlns="http://camel.apache.org/schema/spring">
+  <route id="foo">
+    <from uri="direct:foo"/>
+    <to uri="mock:foo"/>
+  </route>
+</routes>