Load REST DSL from XML files

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b43c01c4
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b43c01c4
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b43c01c4

Branch: refs/heads/master
Commit: b43c01c4c4a8c9e2671726e04a987df1d2c09a44
Parents: 976ae69
Author: Askannon <askan...@flexarc.com>
Authored: Tue Jan 5 13:33:11 2016 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Tue Jan 5 17:40:45 2016 +0100

----------------------------------------------------------------------
 .../boot/CamelConfigurationProperties.java      | 15 +++++++++
 .../camel/spring/boot/RoutesCollector.java      | 33 ++++++++++++++++++--
 2 files changed, 45 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/b43c01c4/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelConfigurationProperties.java
----------------------------------------------------------------------
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 0aa0da3..be07ff1 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
@@ -54,6 +54,12 @@ public class CamelConfigurationProperties {
      */
     private String xmlRoutes = "classpath:camel/*.xml";
 
+    /**
+     * Directory to scan for adding additional XML rests.
+     * You can turn this off by setting the value to <tt>false</tt>
+     */
+    private String xmlRests = "classpath:camel-rest/*.xml";
+
     // Getters & setters
 
     public boolean isJmxEnabled() {
@@ -103,4 +109,13 @@ public class CamelConfigurationProperties {
     public void setXmlRoutes(String xmlRoutes) {
         this.xmlRoutes = xmlRoutes;
     }
+
+       public String getXmlRests() {
+               return xmlRests;
+       }
+
+       public void setXmlRests(String xmlRests) {
+               this.xmlRests = xmlRests;
+       }
+    
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/b43c01c4/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java
----------------------------------------------------------------------
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 49a9015..33947c0 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
@@ -23,7 +23,10 @@ import java.util.List;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
+import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RoutesDefinition;
+import org.apache.camel.model.rest.RestDefinition;
+import org.apache.camel.model.rest.RestsDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.ApplicationContext;
@@ -32,8 +35,8 @@ import 
org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.core.io.Resource;
 
 /**
- * Collects routes from the various sources (like Spring application context 
beans registry or opinionated classpath
- * locations) and injects these into the Camel context.
+ * Collects routes and rests from the various sources (like Spring application 
context beans registry or opinionated
+ * classpath locations) and injects these into the Camel context.
  */
 public class RoutesCollector implements 
ApplicationListener<ContextRefreshedEvent> {
 
@@ -91,6 +94,11 @@ public class RoutesCollector implements 
ApplicationListener<ContextRefreshedEven
                         loadXmlRoutes(applicationContext, camelContext, 
configurationProperties.getXmlRoutes());
                     }
 
+                    boolean scanRests = 
!configurationProperties.getXmlRests().equals("false");
+                    if (scanRests) {
+                       loadXmlRests(applicationContext, camelContext, 
configurationProperties.getXmlRests());
+                    }
+                    
                     for (CamelContextConfiguration camelContextConfiguration : 
camelContextConfigurations) {
                         LOG.debug("CamelContextConfiguration found. Invoking: 
{}", camelContextConfiguration);
                         
camelContextConfiguration.beforeApplicationStart(camelContext);
@@ -125,8 +133,27 @@ public class RoutesCollector implements 
ApplicationListener<ContextRefreshedEven
                 camelContext.addRouteDefinitions(xmlDefinition.getRoutes());
             }
         } catch (FileNotFoundException e) {
-            LOG.debug("No XMl routes found in {}. Skipping XML routes 
detection.", directory);
+            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);
+                       }
+               }
+       } catch (FileNotFoundException e) {
+            LOG.debug("No XML rests found in {}. Skipping XML rests 
detection.", directory);
+       } catch (Exception e) {
+               throw new RuntimeException(e);
+       }
+    }
+    
 }

Reply via email to