Repository: camel Updated Branches: refs/heads/master 9b1b92cf8 -> 2b6bf5f8c
[CAMEL-8523] Spring Boot should automagically load XML routes definitions from classpath. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2b6bf5f8 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2b6bf5f8 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2b6bf5f8 Branch: refs/heads/master Commit: 2b6bf5f8ca0c509b565a36c98e3e63219b77b7f0 Parents: 9b1b92c Author: Henryk Konsek <hekon...@gmail.com> Authored: Fri Mar 20 16:43:11 2015 +0100 Committer: Henryk Konsek <hekon...@gmail.com> Committed: Fri Mar 20 16:43:11 2015 +0100 ---------------------------------------------------------------------- .../spring/boot/CamelAutoConfiguration.java | 2 +- .../camel/spring/boot/RoutesCollector.java | 25 ++++++++++++++++---- .../spring/boot/CamelAutoConfigurationTest.java | 18 +++++++++++++- .../src/test/resources/camel/camelContext.xml | 7 ++++++ 4 files changed, 46 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/2b6bf5f8/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java index aba9623..5fdac34 100644 --- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java +++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java @@ -63,7 +63,7 @@ public class CamelAutoConfiguration { @ConditionalOnMissingBean(RoutesCollector.class) RoutesCollector routesCollector(ApplicationContext applicationContext) { Collection<CamelContextConfiguration> configurations = applicationContext.getBeansOfType(CamelContextConfiguration.class).values(); - return new RoutesCollector(applicationContext, new ArrayList<CamelContextConfiguration>(configurations)); + return new RoutesCollector(new ArrayList<CamelContextConfiguration>(configurations)); } /** http://git-wip-us.apache.org/repos/asf/camel/blob/2b6bf5f8/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 b0c501a..72c4eda 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 @@ -20,11 +20,13 @@ import java.util.List; import org.apache.camel.CamelContext; import org.apache.camel.RoutesBuilder; +import org.apache.camel.model.RoutesDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.core.io.Resource; public class RoutesCollector implements ApplicationListener<ContextRefreshedEvent> { @@ -32,14 +34,11 @@ public class RoutesCollector implements ApplicationListener<ContextRefreshedEven // Collaborators - private final ApplicationContext applicationContext; - private final List<CamelContextConfiguration> camelContextConfigurations; // Constructors - public RoutesCollector(ApplicationContext applicationContext, List<CamelContextConfiguration> camelContextConfigurations) { - this.applicationContext = applicationContext; + public RoutesCollector(List<CamelContextConfiguration> camelContextConfigurations) { this.camelContextConfigurations = camelContextConfigurations; } @@ -47,6 +46,7 @@ public class RoutesCollector implements ApplicationListener<ContextRefreshedEven @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { + ApplicationContext applicationContext = contextRefreshedEvent.getApplicationContext(); CamelContext camelContext = contextRefreshedEvent.getApplicationContext().getBean(CamelContext.class); LOG.debug("Post-processing CamelContext bean: {}", camelContext.getName()); for (RoutesBuilder routesBuilder : applicationContext.getBeansOfType(RoutesBuilder.class).values()) { @@ -57,6 +57,9 @@ public class RoutesCollector implements ApplicationListener<ContextRefreshedEven throw new RuntimeException(e); } } + + loadXmlRoutes(applicationContext, camelContext); + if (camelContextConfigurations != null) { for (CamelContextConfiguration camelContextConfiguration : camelContextConfigurations) { LOG.debug("CamelContextConfiguration found. Invoking: {}", camelContextConfiguration); @@ -70,4 +73,18 @@ public class RoutesCollector implements ApplicationListener<ContextRefreshedEven } } + // Helpers + + private void loadXmlRoutes(ApplicationContext applicationContext, CamelContext camelContext) { + try { + Resource[] xmlRoutes = applicationContext.getResources("classpath:camel/*.xml"); + for (Resource xmlRoute : xmlRoutes) { + RoutesDefinition xmlDefinition = camelContext.loadRoutesDefinition(xmlRoute.getInputStream()); + camelContext.addRouteDefinitions(xmlDefinition.getRoutes()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/2b6bf5f8/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelAutoConfigurationTest.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelAutoConfigurationTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelAutoConfigurationTest.java index ae04337..2b09479 100644 --- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelAutoConfigurationTest.java +++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelAutoConfigurationTest.java @@ -18,10 +18,12 @@ package org.apache.camel.spring.boot; import org.apache.camel.CamelContext; import org.apache.camel.ConsumerTemplate; +import org.apache.camel.EndpointInject; import org.apache.camel.ProducerTemplate; import org.apache.camel.Route; import org.apache.camel.TypeConverter; import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -65,7 +67,8 @@ public class CamelAutoConfigurationTest extends Assert { // Spring context fixtures - + @EndpointInject(uri = "mock:xmlAutoLoading") + MockEndpoint xmlAutoLoadingMock; // Tests @@ -148,6 +151,19 @@ public class CamelAutoConfigurationTest extends Assert { assertEquals(message, receivedMessage); } + @Test + public void shouldLoadXmlRoutes() throws InterruptedException { + // Given + String message = "msg"; + xmlAutoLoadingMock.expectedBodiesReceived(message); + + // When + producerTemplate.sendBody("direct:xmlAutoLoading", message); + + // Then + xmlAutoLoadingMock.assertIsSatisfied(); + } + } @Configuration http://git-wip-us.apache.org/repos/asf/camel/blob/2b6bf5f8/components/camel-spring-boot/src/test/resources/camel/camelContext.xml ---------------------------------------------------------------------- diff --git a/components/camel-spring-boot/src/test/resources/camel/camelContext.xml b/components/camel-spring-boot/src/test/resources/camel/camelContext.xml new file mode 100644 index 0000000..21b424b --- /dev/null +++ b/components/camel-spring-boot/src/test/resources/camel/camelContext.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<routes xmlns="http://camel.apache.org/schema/spring"> + <route> + <from uri="direct:xmlAutoLoading"/> + <to uri="mock:xmlAutoLoading"/> + </route> +</routes> \ No newline at end of file