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 2020/07/03 12:45:38 UTC

[camel-spring-boot] branch master updated: CAMEL-14963: Route Template

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 464934a  CAMEL-14963: Route Template
464934a is described below

commit 464934ab8ab1e4c4726801e9e48319654b766bdf
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Jul 3 14:45:05 2020 +0200

    CAMEL-14963: Route Template
---
 .../src/main/docs/spring-boot.adoc                 |  3 +-
 .../spring/boot/SpringBootRoutesCollector.java     | 37 ++++++++++++++++++++--
 docs/modules/ROOT/pages/spring-boot.adoc           |  3 +-
 3 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/core/camel-spring-boot/src/main/docs/spring-boot.adoc b/core/camel-spring-boot/src/main/docs/spring-boot.adoc
index 2b7aa95..df7e8c6 100644
--- a/core/camel-spring-boot/src/main/docs/spring-boot.adoc
+++ b/core/camel-spring-boot/src/main/docs/spring-boot.adoc
@@ -92,7 +92,7 @@ When using spring-boot with Spring Boot make sure to use the following Maven dep
 ----
 
 
-The component supports 148 options, which are listed below.
+The component supports 149 options, which are listed below.
 
 
 
@@ -224,6 +224,7 @@ The component supports 148 options, which are listed below.
 | *camel.springboot.use-mdc-logging* | To turn on MDC logging | false | Boolean
 | *camel.springboot.warn-on-early-shutdown* | Whether to log a WARN if Camel on Spring Boot was immediately shutdown after starting which very likely is because there is no JVM thread to keep the application running. | true | Boolean
 | *camel.springboot.xml-rests* | 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 | classpath:camel-rest/*.x [...]
+| *camel.springboot.xml-route-templates* |  |  | String
 | *camel.springboot.xml-routes* | 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 | classpath:camel/*.xml  [...]
 | *camel.ssl.cert-alias* | An optional certificate alias to use. This is useful when the keystore has multiple certificates. |  | String
 | *camel.ssl.cipher-suites* | The optional explicitly configured cipher suites for this configuration. |  | CipherSuitesParameters
diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/SpringBootRoutesCollector.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/SpringBootRoutesCollector.java
index 6e310d3..d75d278 100644
--- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/SpringBootRoutesCollector.java
+++ b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/SpringBootRoutesCollector.java
@@ -26,6 +26,7 @@ import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.main.DefaultRoutesCollector;
+import org.apache.camel.model.RouteTemplatesDefinition;
 import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.spi.XMLRoutesDefinitionLoader;
@@ -125,7 +126,9 @@ public class SpringBootRoutesCollector extends DefaultRoutesCollector {
                     ExtendedCamelContext extendedCamelContext = camelContext.adapt(ExtendedCamelContext.class);
                     XMLRoutesDefinitionLoader xmlLoader = extendedCamelContext.getXMLRoutesDefinitionLoader();
                     RoutesDefinition routes = (RoutesDefinition) xmlLoader.loadRoutesDefinition(camelContext, xmlRoute.getInputStream());
-                    answer.add(routes);
+                    if (routes != null) {
+                        answer.add(routes);
+                    }
                 }
             } catch (FileNotFoundException e) {
                 log.debug("No XML routes found in {}. Skipping XML routes detection.", part);
@@ -138,6 +141,34 @@ public class SpringBootRoutesCollector extends DefaultRoutesCollector {
     }
 
     @Override
+    public List<RouteTemplatesDefinition> collectXmlRouteTemplatesFromDirectory(CamelContext camelContext, String directory) throws Exception {
+        List<RouteTemplatesDefinition> answer = new ArrayList<>();
+
+        String[] parts = directory.split(",");
+        for (String part : parts) {
+            log.info("Loading additional Camel XML route templates from: {}", part);
+            try {
+                Resource[] xmlRouteTemplates = applicationContext.getResources(part);
+                for (Resource xmlRoute : xmlRouteTemplates) {
+                    log.debug("Found XML route template: {}", xmlRoute);
+                    ExtendedCamelContext extendedCamelContext = camelContext.adapt(ExtendedCamelContext.class);
+                    XMLRoutesDefinitionLoader xmlLoader = extendedCamelContext.getXMLRoutesDefinitionLoader();
+                    RouteTemplatesDefinition templates = (RouteTemplatesDefinition) xmlLoader.loadRouteTemplatesDefinition(camelContext, xmlRoute.getInputStream());
+                    if (templates != null) {
+                        answer.add(templates);
+                    }
+                }
+            } catch (FileNotFoundException e) {
+                log.debug("No XML route templates found in {}. Skipping XML route templates detection.", part);
+            } catch (Exception e) {
+                throw RuntimeCamelException.wrapRuntimeException(e);
+            }
+        }
+
+        return answer;
+    }
+
+    @Override
     public List<RestsDefinition> collectXmlRestsFromDirectory(CamelContext camelContext, String directory) {
         List<RestsDefinition> answer = new ArrayList<>();
 
@@ -150,7 +181,9 @@ public class SpringBootRoutesCollector extends DefaultRoutesCollector {
                     ExtendedCamelContext extendedCamelContext = camelContext.adapt(ExtendedCamelContext.class);
                     XMLRoutesDefinitionLoader xmlLoader = extendedCamelContext.getXMLRoutesDefinitionLoader();
                     RestsDefinition rests = (RestsDefinition) xmlLoader.loadRestsDefinition(camelContext, xmlRest.getInputStream());
-                    answer.add(rests);
+                    if (rests != null) {
+                        answer.add(rests);
+                    }
                 }
             } catch (FileNotFoundException e) {
                 log.debug("No XML rests found in {}. Skipping XML rests detection.", part);
diff --git a/docs/modules/ROOT/pages/spring-boot.adoc b/docs/modules/ROOT/pages/spring-boot.adoc
index 2b7aa95..df7e8c6 100644
--- a/docs/modules/ROOT/pages/spring-boot.adoc
+++ b/docs/modules/ROOT/pages/spring-boot.adoc
@@ -92,7 +92,7 @@ When using spring-boot with Spring Boot make sure to use the following Maven dep
 ----
 
 
-The component supports 148 options, which are listed below.
+The component supports 149 options, which are listed below.
 
 
 
@@ -224,6 +224,7 @@ The component supports 148 options, which are listed below.
 | *camel.springboot.use-mdc-logging* | To turn on MDC logging | false | Boolean
 | *camel.springboot.warn-on-early-shutdown* | Whether to log a WARN if Camel on Spring Boot was immediately shutdown after starting which very likely is because there is no JVM thread to keep the application running. | true | Boolean
 | *camel.springboot.xml-rests* | 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 | classpath:camel-rest/*.x [...]
+| *camel.springboot.xml-route-templates* |  |  | String
 | *camel.springboot.xml-routes* | 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 | classpath:camel/*.xml  [...]
 | *camel.ssl.cert-alias* | An optional certificate alias to use. This is useful when the keystore has multiple certificates. |  | String
 | *camel.ssl.cipher-suites* | The optional explicitly configured cipher suites for this configuration. |  | CipherSuitesParameters