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); + } + } + }