[camel-k] branch master updated: Add support for XML routes #70

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[camel-k] branch master updated: Add support for XML routes #70

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

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


The following commit(s) were added to refs/heads/master by this push:
     new ea382b1  Add support for XML routes #70
ea382b1 is described below

commit ea382b1a966699466ea81ba91745feec6a0ea6e8
Author: lburgazzoli <[hidden email]>
AuthorDate: Fri Sep 14 08:50:03 2018 +0200

    Add support for XML routes #70
---
 .../main/java/org/apache/camel/k/jvm/Routes.java   |  2 +-
 .../java/org/apache/camel/k/jvm/RoutesLoaders.java | 30 ++++++++++++++++++++++
 .../org/apache/camel/k/jvm/RoutesLoadersTest.java  | 17 ++++++++++++
 runtime/jvm/src/test/resources/routes.xml          |  7 +++++
 4 files changed, 55 insertions(+), 1 deletion(-)

diff --git a/runtime/jvm/src/main/java/org/apache/camel/k/jvm/Routes.java b/runtime/jvm/src/main/java/org/apache/camel/k/jvm/Routes.java
index 03c91e4..cfe0f13 100644
--- a/runtime/jvm/src/main/java/org/apache/camel/k/jvm/Routes.java
+++ b/runtime/jvm/src/main/java/org/apache/camel/k/jvm/Routes.java
@@ -36,7 +36,7 @@ public final class Routes {
     }
 
     public static boolean isScripting(String resource) {
-        return resource.endsWith(".java") || resource.endsWith(".js") || resource.endsWith(".groovy");
+        return resource.endsWith(".java") || resource.endsWith(".js") || resource.endsWith(".groovy") || resource.endsWith(".xml");
     }
 
     public static RoutesLoader loaderForLanguage(String language) {
diff --git a/runtime/jvm/src/main/java/org/apache/camel/k/jvm/RoutesLoaders.java b/runtime/jvm/src/main/java/org/apache/camel/k/jvm/RoutesLoaders.java
index 8f9409e..c0489ec 100644
--- a/runtime/jvm/src/main/java/org/apache/camel/k/jvm/RoutesLoaders.java
+++ b/runtime/jvm/src/main/java/org/apache/camel/k/jvm/RoutesLoaders.java
@@ -35,6 +35,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.RoutesDefinition;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.codehaus.groovy.control.CompilerConfiguration;
@@ -168,6 +169,35 @@ public enum RoutesLoaders implements RoutesLoader {
                 }
             };
         }
+    },
+    Xml {
+        @Override
+        public List<String> getSupportedLanguages() {
+            return Arrays.asList("xml");
+        }
+
+        @Override
+        public boolean test(String resource) {
+            String ext = StringUtils.substringAfterLast(resource, ".");
+            List<String> langs = getSupportedLanguages();
+
+            return langs.contains(ext);
+        }
+
+        @Override
+        public RouteBuilder load(String resource) throws Exception {
+            return new RouteBuilder() {
+                @Override
+                public void configure() throws Exception {
+                    try (InputStream is = Routes.loadResourceAsInputStream(resource)) {
+                        final CamelContext context = getContext();
+                        final RoutesDefinition definitions = context.loadRoutesDefinition(is);
+
+                        setRouteCollection(definitions);
+                    }
+                }
+            };
+        }
     };
 
     // ********************************
diff --git a/runtime/jvm/src/test/java/org/apache/camel/k/jvm/RoutesLoadersTest.java b/runtime/jvm/src/test/java/org/apache/camel/k/jvm/RoutesLoadersTest.java
index e083464..d281085 100644
--- a/runtime/jvm/src/test/java/org/apache/camel/k/jvm/RoutesLoadersTest.java
+++ b/runtime/jvm/src/test/java/org/apache/camel/k/jvm/RoutesLoadersTest.java
@@ -112,6 +112,23 @@ public class RoutesLoadersTest {
         assertThat(routes.get(0).getOutputs().get(0)).isInstanceOf(ToDefinition.class);
     }
 
+    @Test
+    public void testLoadXml() throws Exception {
+        String resource = "classpath:routes.xml";
+        RoutesLoader loader = Routes.loaderForResource(resource);
+        RouteBuilder builder = loader.load(resource);
+
+        assertThat(loader).isSameAs(RoutesLoaders.Xml);
+        assertThat(builder).isNotNull();
+
+        builder.configure();
+
+        List<RouteDefinition> routes = builder.getRouteCollection().getRoutes();
+        assertThat(routes).hasSize(1);
+        assertThat(routes.get(0).getInputs().get(0).getEndpointUri()).isEqualTo("timer:tick");
+        assertThat(routes.get(0).getOutputs().get(0)).isInstanceOf(ToDefinition.class);
+    }
+
     @Test(expected = IllegalArgumentException.class)
     public void testResourceWithoutScheme() {
         Routes.loaderForResource("routes.js");
diff --git a/runtime/jvm/src/test/resources/routes.xml b/runtime/jvm/src/test/resources/routes.xml
new file mode 100644
index 0000000..b6672f1
--- /dev/null
+++ b/runtime/jvm/src/test/resources/routes.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<routes xmlns="http://camel.apache.org/schema/spring">
+  <route>
+    <from uri="timer:tick"/>
+    <to uri="log:info"/>
+  </route>
+</routes>
\ No newline at end of file