Repository: camel Updated Branches: refs/heads/master 018d9849e -> 1a26ccf58
[CAMEL-9333] KuraRouter should try to load XML routes from ConfigAdmin Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1a26ccf5 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1a26ccf5 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1a26ccf5 Branch: refs/heads/master Commit: 1a26ccf58ddcf34fa04b13bff5fbce04b6f1ff6e Parents: 018d984 Author: Henryk Konsek <hekon...@gmail.com> Authored: Tue Nov 17 11:27:29 2015 +0100 Committer: Henryk Konsek <hekon...@gmail.com> Committed: Tue Nov 17 11:27:58 2015 +0100 ---------------------------------------------------------------------- components/camel-kura/pom.xml | 5 ++++ .../apache/camel/component/kura/KuraRouter.java | 22 ++++++++++++++ .../camel/component/kura/KuraRouterTest.java | 30 +++++++++++++++++++- .../camel-kura/src/test/resources/route.xml | 6 ++++ 4 files changed, 62 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/1a26ccf5/components/camel-kura/pom.xml ---------------------------------------------------------------------- diff --git a/components/camel-kura/pom.xml b/components/camel-kura/pom.xml index 4bf22e8..35580b9 100644 --- a/components/camel-kura/pom.xml +++ b/components/camel-kura/pom.xml @@ -71,6 +71,11 @@ <artifactId>mockito-core</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <scope>test</scope> + </dependency> </dependencies> </project> http://git-wip-us.apache.org/repos/asf/camel/blob/1a26ccf5/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java ---------------------------------------------------------------------- diff --git a/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java b/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java index b3f16ca..ea10ae1 100644 --- a/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java +++ b/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java @@ -16,14 +16,20 @@ */ package org.apache.camel.component.kura; +import java.io.ByteArrayInputStream; +import java.io.InputStream; + import org.apache.camel.CamelContext; import org.apache.camel.ConsumerTemplate; import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.core.osgi.OsgiDefaultCamelContext; +import org.apache.camel.model.RoutesDefinition; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; +import org.osgi.service.cm.Configuration; +import org.osgi.service.cm.ConfigurationAdmin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,6 +57,16 @@ public abstract class KuraRouter extends RouteBuilder implements BundleActivator camelContext = createCamelContext(); camelContext.addRoutes(this); + ConfigurationAdmin configurationAdmin = requiredService(ConfigurationAdmin.class); + Configuration camelKuraConfig = configurationAdmin.getConfiguration("kura.camel"); + if (camelKuraConfig != null && camelKuraConfig.getProperties() != null) { + Object routePropertyValue = camelKuraConfig.getProperties().get(camelXmlRoutesProperty()); + if (routePropertyValue != null) { + InputStream routesXml = new ByteArrayInputStream(routePropertyValue.toString().getBytes()); + RoutesDefinition loadedRoutes = camelContext.loadRoutesDefinition(routesXml); + camelContext.addRouteDefinitions(loadedRoutes.getRoutes()); + } + } beforeStart(camelContext); log.debug("About to start Camel Kura router: {}", getClass().getName()); @@ -102,4 +118,10 @@ public abstract class KuraRouter extends RouteBuilder implements BundleActivator return (T) bundleContext.getService(reference); } + // Private helpers + + private String camelXmlRoutesProperty() { + return "kura.camel." + bundleContext.getBundle().getSymbolicName() + ".route"; + } + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/1a26ccf5/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java ---------------------------------------------------------------------- diff --git a/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java b/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java index 97822bd..b184af9 100644 --- a/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java +++ b/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java @@ -16,19 +16,26 @@ */ package org.apache.camel.component.kura; +import java.util.Dictionary; +import java.util.Hashtable; + import org.apache.camel.CamelContext; import org.apache.camel.ServiceStatus; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.impl.DefaultCamelContext; +import org.apache.commons.io.IOUtils; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.osgi.service.cm.Configuration; import org.osgi.service.cm.ConfigurationAdmin; import static org.mockito.BDDMockito.given; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; @@ -38,16 +45,22 @@ public class KuraRouterTest extends Assert { BundleContext bundleContext = mock(BundleContext.class, RETURNS_DEEP_STUBS); + ConfigurationAdmin configurationAdmin = mock(ConfigurationAdmin.class); + + Configuration configuration = mock(Configuration.class); + @Before public void before() throws Exception { given(bundleContext.getBundle().getVersion().toString()).willReturn("version"); + given(bundleContext.getBundle().getSymbolicName()).willReturn("symbolic_name"); + given(bundleContext.getService(any(ServiceReference.class))).willReturn(configurationAdmin); router.start(bundleContext); } @After public void after() throws Exception { - router.start(bundleContext); + router.stop(bundleContext); } @Test @@ -95,6 +108,21 @@ public class KuraRouterTest extends Assert { router.requiredService(ConfigurationAdmin.class); } + @Test + public void shouldLoadXmlRoutes() throws Exception { + // Given + given(configurationAdmin.getConfiguration(anyString())).willReturn(configuration); + Dictionary<String, Object> properties = new Hashtable<>(); + properties.put("kura.camel.symbolic_name.route", IOUtils.toString(getClass().getResource("/route.xml"))); + given(configuration.getProperties()).willReturn(properties); + + // When + router.start(router.bundleContext); + + // Then + assertNotNull(router.camelContext.getRouteDefinition("loaded")); + } + static class TestKuraRouter extends KuraRouter { @Override http://git-wip-us.apache.org/repos/asf/camel/blob/1a26ccf5/components/camel-kura/src/test/resources/route.xml ---------------------------------------------------------------------- diff --git a/components/camel-kura/src/test/resources/route.xml b/components/camel-kura/src/test/resources/route.xml new file mode 100644 index 0000000..ca034ea --- /dev/null +++ b/components/camel-kura/src/test/resources/route.xml @@ -0,0 +1,6 @@ +<routes xmlns="http://camel.apache.org/schema/spring"> + <route id="loaded"> + <from uri="direct:bar"/> + <to uri="mock:bar"/> + </route> +</routes> \ No newline at end of file