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

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

commit 8182b9201f6dd74f8e7148a076d32ab3c91822c0
Author: Luca Burgazzoli <[email protected]>
AuthorDate: Wed Feb 3 09:31:08 2021 +0100

    CAMEL-15560: generic route loader (supported extensions)
---
 .../org/apache/camel/spi/RoutesBuilderLoader.java  |  5 ++++
 .../camel/impl/engine/DefaultRoutesLoader.java     | 25 ++++++++++------
 .../camel/impl/ExtendedCamelContextConfigurer.java |  8 ++++-
 .../camel/{routes-loaders => routes-loader}/xml    |  0
 .../camel/xml/in/XmlRoutesBuilderLoader.java       |  8 ++++-
 .../services/org/apache/camel/routes-loaders/xml   |  2 --
 .../camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java | 35 +++++++++++++++-------
 7 files changed, 59 insertions(+), 24 deletions(-)

diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/RoutesBuilderLoader.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/RoutesBuilderLoader.java
index be17fc7..747e1a5 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RoutesBuilderLoader.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RoutesBuilderLoader.java
@@ -33,6 +33,11 @@ public interface RoutesBuilderLoader {
     String FACTORY_GROUP = "routes-loader";
 
     /**
+     * The supported file extension.
+     */
+    String getSupportedExtension();
+
+    /**
      * Loads {@link RoutesBuilder} from {@link Resource}.
      *
      * @param  resource the resource to be loaded.
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java
index 227d743..5d3b822 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java
@@ -60,37 +60,44 @@ public class DefaultRoutesLoader implements RoutesLoader {
 
         for (Resource resource : resources) {
             // language is derived from the file extension
-            final String language = FileUtil.onlyExt(resource.getLocation(), 
true);
+            final String extension = FileUtil.onlyExt(resource.getLocation(), 
true);
 
-            if (ObjectHelper.isEmpty(language)) {
-                throw new IllegalArgumentException("Unable to determine 
language for resource: " + resource.getLocation());
+            if (ObjectHelper.isEmpty(extension)) {
+                throw new IllegalArgumentException("Unable to determine 
extension for resource: " + resource.getLocation());
             }
 
-            answer.add(getLoader(language).loadRoutesBuilder(resource));
+            answer.add(getLoader(extension).loadRoutesBuilder(resource));
         }
 
         return answer;
     }
 
-    private RoutesBuilderLoader getLoader(String language) {
-        RoutesBuilderLoader answer = 
getCamelContext().getRegistry().lookupByNameAndType(language, 
RoutesBuilderLoader.class);
+    /**
+     *
+     * @param  extension
+     * @return
+     */
+    private RoutesBuilderLoader getLoader(String extension) {
+        RoutesBuilderLoader answer = 
getCamelContext().getRegistry().lookupByNameAndType(extension, 
RoutesBuilderLoader.class);
 
         if (answer == null) {
             final ExtendedCamelContext ecc = 
getCamelContext(ExtendedCamelContext.class);
             final FactoryFinder finder = 
ecc.getFactoryFinder(RoutesBuilderLoader.FACTORY_PATH);
 
             final BaseServiceResolver<RoutesBuilderLoader> resolver
-                    = new BaseServiceResolver<>(language, 
RoutesBuilderLoader.class, finder);
+                    = new BaseServiceResolver<>(extension, 
RoutesBuilderLoader.class, finder);
             final Optional<RoutesBuilderLoader> loader
                     = resolver.resolve(ecc);
 
             if (loader.isPresent()) {
                 return CamelContextAware.trySetCamelContext(loader.get(), ecc);
-            } else {
-                throw new IllegalArgumentException("Unable to fina a 
RoutesBuilderLoader for language " + language);
             }
         }
 
+        if (answer == null) {
+            throw new IllegalArgumentException("Unable to fina a 
RoutesBuilderLoader for extension " + extension);
+        }
+
         return answer;
     }
 }
diff --git 
a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
 
b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
index 5e5e2fa..2310e2e 100644
--- 
a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
+++ 
b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
@@ -1,9 +1,15 @@
 /* Generated by camel build tools - do NOT edit this file! */
 package org.apache.camel.impl;
 
+import java.util.Map;
+
 import org.apache.camel.CamelContext;
-import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
 import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.ExtendedCamelContext;
 
 /**
  * Generated by camel build tools - do NOT edit this file!
diff --git 
a/core/camel-xml-io/src/generated/resources/META-INF/services/org/apache/camel/routes-loaders/xml
 
b/core/camel-xml-io/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/xml
similarity index 100%
rename from 
core/camel-xml-io/src/generated/resources/META-INF/services/org/apache/camel/routes-loaders/xml
rename to 
core/camel-xml-io/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/xml
diff --git 
a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/XmlRoutesBuilderLoader.java
 
b/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/XmlRoutesBuilderLoader.java
index 99457d1..21c345d 100644
--- 
a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/XmlRoutesBuilderLoader.java
+++ 
b/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/XmlRoutesBuilderLoader.java
@@ -29,8 +29,9 @@ import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.RoutesBuilderLoader;
 import org.apache.camel.spi.annotations.JdkService;
 
-@JdkService(RoutesBuilderLoader.FACTORY_GROUP + "/xml")
+@JdkService(RoutesBuilderLoader.FACTORY_GROUP + "/" + 
XmlRoutesBuilderLoader.EXTENSION)
 public class XmlRoutesBuilderLoader implements RoutesBuilderLoader, 
CamelContextAware {
+    public static final String EXTENSION = "xml";
     public static final String NAMESPACE = 
"http://camel.apache.org/schema/spring";;
 
     private CamelContext camelContext;
@@ -46,6 +47,11 @@ public class XmlRoutesBuilderLoader implements 
RoutesBuilderLoader, CamelContext
     }
 
     @Override
+    public String getSupportedExtension() {
+        return EXTENSION;
+    }
+
+    @Override
     public RoutesBuilder loadRoutesBuilder(Resource resource) throws Exception 
{
         return new RouteBuilder() {
             @Override
diff --git 
a/core/camel-xml-jaxb/src/generated/resources/META-INF/services/org/apache/camel/routes-loaders/xml
 
b/core/camel-xml-jaxb/src/generated/resources/META-INF/services/org/apache/camel/routes-loaders/xml
deleted file mode 100644
index daa444e..0000000
--- 
a/core/camel-xml-jaxb/src/generated/resources/META-INF/services/org/apache/camel/routes-loaders/xml
+++ /dev/null
@@ -1,2 +0,0 @@
-# Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.xml.jaxb.JaxbXmlRoutesBuilderLoader
diff --git 
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
 
b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
index 619ce56..e17037b 100644
--- 
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
+++ 
b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.xml.jaxb;
 
+import java.io.InputStream;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.RoutesBuilder;
@@ -31,9 +33,9 @@ import static 
org.apache.camel.xml.jaxb.JaxbHelper.loadRestsDefinition;
 import static 
org.apache.camel.xml.jaxb.JaxbHelper.loadRouteTemplatesDefinition;
 import static org.apache.camel.xml.jaxb.JaxbHelper.loadRoutesDefinition;
 
-@JdkService(RoutesBuilderLoader.FACTORY_GROUP + "/xml")
+@JdkService(RoutesBuilderLoader.FACTORY_GROUP + "/" + 
JaxbXmlRoutesBuilderLoader.EXTENSION)
 public class JaxbXmlRoutesBuilderLoader implements RoutesBuilderLoader, 
CamelContextAware {
-    public static final String NAMESPACE = 
"http://camel.apache.org/schema/spring";;
+    public static final String EXTENSION = "xml";
 
     private CamelContext camelContext;
 
@@ -48,23 +50,34 @@ public class JaxbXmlRoutesBuilderLoader implements 
RoutesBuilderLoader, CamelCon
     }
 
     @Override
+    public String getSupportedExtension() {
+        return EXTENSION;
+    }
+
+    @Override
     public RoutesBuilder loadRoutesBuilder(Resource resource) throws Exception 
{
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                RouteTemplatesDefinition templates = 
loadRouteTemplatesDefinition(getCamelContext(), resource.getInputStream());
-                if (templates != null) {
-                    setRouteTemplateCollection(templates);
+                try (InputStream is = resource.getInputStream()) {
+                    RouteTemplatesDefinition templates = 
loadRouteTemplatesDefinition(getCamelContext(), is);
+                    if (templates != null) {
+                        setRouteTemplateCollection(templates);
+                    }
                 }
 
-                RestsDefinition rests = loadRestsDefinition(getCamelContext(), 
resource.getInputStream());
-                if (rests != null) {
-                    setRestCollection(rests);
+                try (InputStream is = resource.getInputStream()) {
+                    RestsDefinition rests = 
loadRestsDefinition(getCamelContext(), is);
+                    if (rests != null) {
+                        setRestCollection(rests);
+                    }
                 }
 
-                RoutesDefinition routes = 
loadRoutesDefinition(getCamelContext(), resource.getInputStream());
-                if (routes != null) {
-                    setRouteCollection(routes);
+                try (InputStream is = resource.getInputStream()) {
+                    RoutesDefinition routes = 
loadRoutesDefinition(getCamelContext(), is);
+                    if (routes != null) {
+                        setRouteCollection(routes);
+                    }
                 }
             }
         };

Reply via email to