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