You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2021/02/09 09:38:32 UTC

[camel-quarkus] 01/08: Adapt to latest API changes

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

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

commit 2c4961073f41f0e95faac2ed3855b3b191517ebc
Author: Luca Burgazzoli <lb...@gmail.com>
AuthorDate: Thu Feb 4 17:04:25 2021 +0100

    Adapt to latest API changes
---
 docs/modules/ROOT/pages/user-guide/bootstrap.adoc  |  44 +++-----
 .../quarkus/core/deployment/CamelProcessor.java    |   2 +
 .../camel/quarkus/core/FastCamelContext.java       | 125 ++++++++++++---------
 .../quarkus/core/FastFactoryFinderResolver.java    |   5 +
 .../quarkus/main/deployment/CamelMainHelper.java   |  50 +++++++++
 .../CamelMainHotDeploymentProcessor.java           |  27 +----
 .../deployment/CamelMainNativeImageProcessor.java  |  28 +++--
 .../CamelMainLambdaRouteBuilderDiscoveryTest.java  |   2 -
 .../deployment/CamelMainRouteTemplateTest.java     |   1 -
 .../org/apache/camel/quarkus/main/CamelMain.java   |  24 ++--
 .../camel/quarkus/main/CamelMainRecorder.java      |   6 -
 .../csimple/deployment/CSimpleXmlProcessor.java    | 108 +++++++-----------
 .../runtime/support/CustomRoutesCollector.java     |  20 +---
 .../src/main/resources/application.properties      |   2 +-
 .../src/main/resources/application.properties      |   2 +-
 integration-tests/main-devmode/pom.xml             |  14 ++-
 .../camel/quarkus/main/CamelDevModeTest.java       |   2 +-
 .../camel/quarkus/main/CoreMainXmlIoResource.java  |  19 +---
 .../src/main/resources/application.properties      |   4 +-
 .../camel/quarkus/main/CoreMainXmlIoTest.java      |   7 +-
 integration-tests/main-xml-jaxb/pom.xml            |   4 +-
 .../quarkus/main/CoreMainXmlJaxbResource.java      |  19 +---
 .../src/main/resources/application.properties      |   4 +-
 .../camel/quarkus/main/CoreMainXmlJaxbTest.java    |  10 +-
 24 files changed, 262 insertions(+), 267 deletions(-)

diff --git a/docs/modules/ROOT/pages/user-guide/bootstrap.adoc b/docs/modules/ROOT/pages/user-guide/bootstrap.adoc
index 0780575..62d5c52 100644
--- a/docs/modules/ROOT/pages/user-guide/bootstrap.adoc
+++ b/docs/modules/ROOT/pages/user-guide/bootstrap.adoc
@@ -37,7 +37,7 @@ public class Configurations {
     }
 }
 ----
-<1> Camel uses the component URI scheme to look-up components from its registry, this requires you to add the `@Named` annotation to the method, otherwise the CDI container would create an anonymous bean and Camel would not be able to look it up.  
+<1> Camel uses the component URI scheme to look-up components from its registry, this requires you to add the `@Named` annotation to the method, otherwise the CDI container would create an anonymous bean and Camel would not be able to look it up.
 
 In Camel Quarkus the Camel components are discovered during the augmentation phase, producing a new component as shown in the example above would invalidate any optimization that may have been made.
 
@@ -96,7 +96,7 @@ public class Main {
     }
 }
 ----
-<1> Start Quarkus and the Camel Quarkus runtime 
+<1> Start Quarkus and the Camel Quarkus runtime
 
 [NOTE]
 ====
@@ -105,25 +105,23 @@ It is recommended to perform very little logic in the Java Main.
 
 === XML Configuration
 
-In order to configure Camel routes, rests or templates in XML, you must add a Camel XML parser dependency to the classpath. E.g either `camel-quarkus-xml-io` or 
+In order to configure Camel routes, rests or templates in XML, you must add a Camel XML parser dependency to the classpath. E.g either `camel-quarkus-xml-io` or
 `camel-quarkus-xml-jaxb`. `camel-quarkus-xml-io` is preferred due to its lightweight implementation.
 
-==== Routes
-
-With Camel Main, you can set a property that points to the location of route XML files:
+With Camel Main, you can set a property that points to the location of resources XML files such as routes, xref:latest@manual::rest-dsl.adoc[REST DSL] and xref:latest@manual::route-template.adoc[Route templates]:
 
 [source,properties]
 ----
-camel.main.xml-routes = routes/routes.xml, file:src/main/routes/other-routes.xml
+camel.main.routes-include-pattern = routes/routes.xml, file:src/main/routes/rests.xml, file:src/main/rests/route-template.xml
 ----
 
 [NOTE]
 ====
-Path globbing like `camel.main.xml-routes = *./routes.xml` currently does not work in native mode.
+Path globbing like `camel.main.routes-include-pattern = *./routes.xml` currently does not work in native mode.
 ====
 
-Spring XML with `<beans>` or Blueprint XML with `<blueprint>` elements are not supported. The route XML should be in the simplified version like:
 
+.Route
 [source,xml]
 ----
 <routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
@@ -139,18 +137,12 @@ Spring XML with `<beans>` or Blueprint XML with `<blueprint>` elements are not s
 
 </routes>
 ----
+[NOTE]
+====
+Spring XML with `<beans>` or Blueprint XML with `<blueprint>` elements are not supported. The route XML should be in the simplified version like:
+====
 
-==== REST DSL
-
-The Camel xref:latest@manual::rest-dsl.adoc[REST DSL] can be defined in XML and configured with Camel Main via a property:
-
-[source,properties]
-----
-camel.main.xml-rests = rests/rests.xml, file:src/main/rests/other-rests.xml
-----
-
-The XML for the REST configuration looks like:
-
+.Rest DSL
 [source,xml]
 ----
 <rests xmlns="http://camel.apache.org/schema/spring">
@@ -164,17 +156,7 @@ The XML for the REST configuration looks like:
 </rests>
 ----
 
-==== Route Templates
-
-xref:latest@manual::route-template.adoc[Route templates] can be defined in XML and configured with Camel Main via a property:
-
-[source,properties]
-----
-camel.main.xml-route-templates = templates/route-template.xml, file:src/main/rests/other-route-template.xml
-----
-
-The XML for the route template configuration looks like:
-
+.Route Templates
 [source,xml]
 ----
 <routeTemplates xmlns="http://camel.apache.org/schema/spring">
diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
index 7efea5e..f755f1b 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
@@ -150,6 +150,8 @@ class CamelProcessor {
                 CamelServiceDestination.DISCOVERY,
                 true,
                 "META-INF/services/org/apache/camel/*",
+                "META-INF/services/org/apache/camel/routes-loader/*",
+                "META-INF/services/org/apache/camel/invoke-on-header/*",
                 "META-INF/services/org/apache/camel/management/*",
                 "META-INF/services/org/apache/camel/model/*",
                 "META-INF/services/org/apache/camel/configurer/*",
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
index 2a30802..16d6cee 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
@@ -41,7 +41,6 @@ import org.apache.camel.catalog.impl.DefaultRuntimeCamelCatalog;
 import org.apache.camel.component.microprofile.config.CamelMicroProfilePropertiesSource;
 import org.apache.camel.health.HealthCheckRegistry;
 import org.apache.camel.impl.engine.AbstractCamelContext;
-import org.apache.camel.impl.engine.BaseServiceResolver;
 import org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager;
 import org.apache.camel.impl.engine.DefaultBeanIntrospection;
 import org.apache.camel.impl.engine.DefaultCamelBeanPostProcessor;
@@ -65,6 +64,7 @@ import org.apache.camel.impl.engine.DefaultPackageScanResourceResolver;
 import org.apache.camel.impl.engine.DefaultReactiveExecutor;
 import org.apache.camel.impl.engine.DefaultRouteController;
 import org.apache.camel.impl.engine.DefaultRouteFactory;
+import org.apache.camel.impl.engine.DefaultRoutesLoader;
 import org.apache.camel.impl.engine.DefaultStreamCachingStrategy;
 import org.apache.camel.impl.engine.DefaultTracer;
 import org.apache.camel.impl.engine.DefaultTransformerRegistry;
@@ -141,6 +141,7 @@ import org.apache.camel.spi.RestBindingJaxbDataFormatFactory;
 import org.apache.camel.spi.RestRegistryFactory;
 import org.apache.camel.spi.RouteController;
 import org.apache.camel.spi.RouteFactory;
+import org.apache.camel.spi.RoutesLoader;
 import org.apache.camel.spi.ShutdownStrategy;
 import org.apache.camel.spi.StreamCachingStrategy;
 import org.apache.camel.spi.Tracer;
@@ -154,15 +155,16 @@ import org.apache.camel.spi.Validator;
 import org.apache.camel.spi.ValidatorRegistry;
 import org.apache.camel.spi.XMLRoutesDefinitionLoader;
 import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.ResolverHelper;
 import org.apache.camel.support.VanillaUuidGenerator;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
 
 public class FastCamelContext extends AbstractCamelContext implements CatalogCamelContext, ModelCamelContext {
-    private Model model;
     private final String version;
     private final XMLRoutesDefinitionLoader xmlLoader;
     private final ModelToXMLDumper modelDumper;
+    private Model model;
 
     public FastCamelContext(FactoryFinderResolver factoryFinderResolver, String version, XMLRoutesDefinitionLoader xmlLoader,
             ModelToXMLDumper modelDumper) {
@@ -179,6 +181,15 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
         setMessageHistory(Boolean.FALSE);
     }
 
+    private static ValueHolder<String> createValidatorKey(ValidatorDefinition def) {
+        return new ValidatorKey(new DataType(def.getType()));
+    }
+
+    private static ValueHolder<String> createTransformerKey(TransformerDefinition def) {
+        return ObjectHelper.isNotEmpty(def.getScheme()) ? new TransformerKey(def.getScheme())
+                : new TransformerKey(new DataType(def.getFromType()), new DataType(def.getToType()));
+    }
+
     @Override
     public void build() {
         super.build();
@@ -350,11 +361,13 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
 
     @Override
     protected BeanProxyFactory createBeanProxyFactory() {
-        return new BaseServiceResolver<>(BeanProxyFactory.FACTORY, BeanProxyFactory.class,
-                getBootstrapFactoryFinder())
-                        .resolve(getCamelContextReference())
-                        .orElseThrow(() -> new IllegalArgumentException("Cannot find BeanProxyFactory on classpath. "
-                                + "Add camel-bean to classpath."));
+        return ResolverHelper.resolveService(
+                getCamelContextReference(),
+                getBootstrapFactoryFinder(),
+                BeanProxyFactory.FACTORY,
+                BeanProxyFactory.class)
+                .orElseThrow(() -> new IllegalArgumentException(
+                        "Cannot find BeanProxyFactory on classpath. Add camel-bean to classpath."));
     }
 
     @Override
@@ -369,11 +382,13 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
 
     @Override
     protected BeanProcessorFactory createBeanProcessorFactory() {
-        return new BaseServiceResolver<>(BeanProcessorFactory.FACTORY, BeanProcessorFactory.class,
-                getBootstrapFactoryFinder())
-                        .resolve(getCamelContextReference())
-                        .orElseThrow(() -> new IllegalArgumentException("Cannot find BeanProcessorFactory on classpath. "
-                                + "Add camel-bean to classpath."));
+        return ResolverHelper.resolveService(
+                getCamelContextReference(),
+                getBootstrapFactoryFinder(),
+                BeanProcessorFactory.FACTORY,
+                BeanProcessorFactory.class)
+                .orElseThrow(() -> new IllegalArgumentException(
+                        "Cannot find BeanProcessorFactory on classpath. Add camel-bean to classpath."));
     }
 
     @Override
@@ -402,6 +417,11 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
     }
 
     @Override
+    protected RoutesLoader createRoutesLoader() {
+        return new DefaultRoutesLoader();
+    }
+
+    @Override
     protected ModelToXMLDumper createModelToXMLDumper() {
         return modelDumper;
     }
@@ -435,11 +455,13 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
 
     @Override
     protected RestRegistryFactory createRestRegistryFactory() {
-        return new BaseServiceResolver<>(RestRegistryFactory.FACTORY, RestRegistryFactory.class,
-                getBootstrapFactoryFinder())
-                        .resolve(getCamelContextReference())
-                        .orElseThrow(() -> new IllegalArgumentException("Cannot find RestRegistryFactory on classpath. "
-                                + "Add camel-rest to classpath."));
+        return ResolverHelper.resolveService(
+                getCamelContextReference(),
+                getBootstrapFactoryFinder(),
+                RestRegistryFactory.FACTORY,
+                RestRegistryFactory.class)
+                .orElseThrow(() -> new IllegalArgumentException(
+                        "Cannot find RestRegistryFactory on classpath. Add camel-rest to classpath."));
     }
 
     @Override
@@ -479,9 +501,12 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
 
     @Override
     protected HealthCheckRegistry createHealthCheckRegistry() {
-        return new BaseServiceResolver<>(HealthCheckRegistry.FACTORY, HealthCheckRegistry.class,
-                getBootstrapFactoryFinder())
-                        .resolve(getCamelContextReference()).orElse(null);
+        return ResolverHelper.resolveService(
+                getCamelContextReference(),
+                getBootstrapFactoryFinder(),
+                HealthCheckRegistry.FACTORY,
+                HealthCheckRegistry.class)
+                .orElse(null);
     }
 
     @Override
@@ -491,12 +516,13 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
 
     @Override
     protected RestBindingJaxbDataFormatFactory createRestBindingJaxbDataFormatFactory() {
-        return new BaseServiceResolver<>(RestBindingJaxbDataFormatFactory.FACTORY, RestBindingJaxbDataFormatFactory.class,
-                getBootstrapFactoryFinder())
-                        .resolve(getCamelContextReference())
-                        .orElseThrow(
-                                () -> new IllegalArgumentException("Cannot find RestBindingJaxbDataFormatFactory on classpath. "
-                                        + "Add camel-jaxb to classpath."));
+        return ResolverHelper.resolveService(
+                getCamelContextReference(),
+                getBootstrapFactoryFinder(),
+                RestBindingJaxbDataFormatFactory.FACTORY,
+                RestBindingJaxbDataFormatFactory.class)
+                .orElseThrow(() -> new IllegalArgumentException(
+                        "Cannot find RestBindingJaxbDataFormatFactory on classpath. Add camel-jaxb to classpath."));
     }
 
     @Override
@@ -608,6 +634,10 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
         return null;
     }
 
+    //
+    // ModelCamelContext
+    //
+
     @Override
     public Processor createErrorHandler(Route route, Processor processor) throws Exception {
         return ErrorHandlerReifier.reifier(route, route.getErrorHandlerFactory())
@@ -619,10 +649,6 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
         this.model = null;
     }
 
-    //
-    // ModelCamelContext
-    //
-
     @Override
     public void startRouteDefinitions() throws Exception {
         List<RouteDefinition> routeDefinitions = model.getRouteDefinitions();
@@ -707,13 +733,13 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
     }
 
     @Override
-    public void setDataFormats(Map<String, DataFormatDefinition> dataFormats) {
-        model.setDataFormats(dataFormats);
+    public Map<String, DataFormatDefinition> getDataFormats() {
+        return model.getDataFormats();
     }
 
     @Override
-    public Map<String, DataFormatDefinition> getDataFormats() {
-        return model.getDataFormats();
+    public void setDataFormats(Map<String, DataFormatDefinition> dataFormats) {
+        model.setDataFormats(dataFormats);
     }
 
     @Override
@@ -732,11 +758,6 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
     }
 
     @Override
-    public void setValidators(List<ValidatorDefinition> validators) {
-        model.setValidators(validators);
-    }
-
-    @Override
     public HystrixConfigurationDefinition getHystrixConfiguration(String id) {
         return model.getHystrixConfiguration(id);
     }
@@ -802,8 +823,8 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
     }
 
     @Override
-    public void setTransformers(List<TransformerDefinition> transformers) {
-        model.setTransformers(transformers);
+    public void setValidators(List<ValidatorDefinition> validators) {
+        model.setValidators(validators);
     }
 
     @Override
@@ -812,6 +833,11 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
     }
 
     @Override
+    public void setTransformers(List<TransformerDefinition> transformers) {
+        model.setTransformers(transformers);
+    }
+
+    @Override
     public ServiceCallConfigurationDefinition getServiceCallConfiguration(String serviceName) {
         return model.getServiceCallConfiguration(serviceName);
     }
@@ -837,13 +863,13 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
     }
 
     @Override
-    public void setRouteFilter(Function<RouteDefinition, Boolean> filter) {
-        model.setRouteFilter(filter);
+    public Function<RouteDefinition, Boolean> getRouteFilter() {
+        return model.getRouteFilter();
     }
 
     @Override
-    public Function<RouteDefinition, Boolean> getRouteFilter() {
-        return model.getRouteFilter();
+    public void setRouteFilter(Function<RouteDefinition, Boolean> filter) {
+        model.setRouteFilter(filter);
     }
 
     @Override
@@ -924,10 +950,6 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
         getValidatorRegistry().put(createValidatorKey(def), validator);
     }
 
-    private static ValueHolder<String> createValidatorKey(ValidatorDefinition def) {
-        return new ValidatorKey(new DataType(def.getType()));
-    }
-
     @SuppressWarnings("unchecked")
     @Override
     public void registerTransformer(TransformerDefinition def) {
@@ -936,11 +958,6 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
         getTransformerRegistry().put(createTransformerKey(def), transformer);
     }
 
-    private static ValueHolder<String> createTransformerKey(TransformerDefinition def) {
-        return ObjectHelper.isNotEmpty(def.getScheme()) ? new TransformerKey(def.getScheme())
-                : new TransformerKey(new DataType(def.getFromType()), new DataType(def.getToType()));
-    }
-
     @Override
     public void addModelLifecycleStrategy(ModelLifecycleStrategy modelLifecycleStrategy) {
         model.addModelLifecycleStrategy(modelLifecycleStrategy);
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastFactoryFinderResolver.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastFactoryFinderResolver.java
index 5713886..421a386 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastFactoryFinderResolver.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastFactoryFinderResolver.java
@@ -63,6 +63,11 @@ public class FastFactoryFinderResolver extends DefaultFactoryFinderResolver {
         return new FastFactoryFinder(resourcePath);
     }
 
+    @Override
+    public FactoryFinder resolveBootstrapFactoryFinder(ClassResolver classResolver, String resourcePath) {
+        return new FastFactoryFinder(resourcePath);
+    }
+
     // exposed for testing purpose
     public Map<String, Class<?>> getClassMap() {
         return Collections.unmodifiableMap(this.classMap);
diff --git a/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainHelper.java b/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainHelper.java
new file mode 100644
index 0000000..6f60192
--- /dev/null
+++ b/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainHelper.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.main.deployment;
+
+import java.util.stream.Stream;
+
+import org.apache.camel.quarkus.core.deployment.util.CamelSupport;
+
+public final class CamelMainHelper {
+    private static final String[] EMPTY_STRING_ARRAY = new String[0];
+
+    private CamelMainHelper() {
+    }
+
+    public static Stream<String> routesIncludePatter() {
+        final String[] i1 = CamelSupport.getOptionalConfigValue(
+                "camel.main.routes-include-pattern", String[].class, EMPTY_STRING_ARRAY);
+        final String[] i2 = CamelSupport.getOptionalConfigValue(
+                "camel.main.routesIncludePattern", String[].class, EMPTY_STRING_ARRAY);
+
+        return i1.length == 0 && i2.length == 0
+                ? Stream.empty()
+                : Stream.concat(Stream.of(i1), Stream.of(i2)).filter(location -> !"false".equals(location));
+    }
+
+    public static Stream<String> routesExcludePatter() {
+        final String[] i1 = CamelSupport.getOptionalConfigValue(
+                "camel.main.routes-exclude-pattern", String[].class, EMPTY_STRING_ARRAY);
+        final String[] i2 = CamelSupport.getOptionalConfigValue(
+                "camel.main.routesExcludePattern", String[].class, EMPTY_STRING_ARRAY);
+
+        return i1.length == 0 && i2.length == 0
+                ? Stream.empty()
+                : Stream.concat(Stream.of(i1), Stream.of(i2)).filter(location -> !"false".equals(location));
+    }
+}
diff --git a/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainHotDeploymentProcessor.java b/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainHotDeploymentProcessor.java
index d207ea5..8325147 100644
--- a/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainHotDeploymentProcessor.java
+++ b/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainHotDeploymentProcessor.java
@@ -21,40 +21,19 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem;
-import org.apache.camel.quarkus.core.deployment.util.CamelSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/*
- * camel-main does not yet support filtering with pattern/glob so
- * each entry of camel.main.xml-[routes|rests] is a path thus can
- * be safely added to the list of files to watch to trigger hot
- * deployment.
- *
- * See https://issues.apache.org/jira/browse/CAMEL-14100
- */
 class CamelMainHotDeploymentProcessor {
     private static final Logger LOGGER = LoggerFactory.getLogger(CamelMainHotDeploymentProcessor.class);
-    private static final String[] EMPTY_STRING_ARRAY = new String[0];
     private static final String FILE_PREFIX = "file:";
 
     @BuildStep
-    List<HotDeploymentWatchedFileBuildItem> xmlRoutes() {
-        return locations("camel.main.xml-routes");
-    }
-
-    @BuildStep
-    List<HotDeploymentWatchedFileBuildItem> xmlRests() {
-        return locations("camel.main.xml-rests");
-    }
-
-    private static List<HotDeploymentWatchedFileBuildItem> locations(String property) {
-        String[] locations = CamelSupport.getOptionalConfigValue(property, String[].class, EMPTY_STRING_ARRAY);
-        List<HotDeploymentWatchedFileBuildItem> items = Stream.of(locations)
+    List<HotDeploymentWatchedFileBuildItem> locations() {
+        List<HotDeploymentWatchedFileBuildItem> items = CamelMainHelper.routesIncludePatter()
                 .filter(location -> location.startsWith(FILE_PREFIX))
                 .map(location -> location.substring(FILE_PREFIX.length()))
                 .distinct()
@@ -66,7 +45,7 @@ class CamelMainHotDeploymentProcessor {
                 .collect(Collectors.toList());
 
         if (!items.isEmpty()) {
-            LOGGER.info("HotDeployment files ({}):", property);
+            LOGGER.info("HotDeployment files:");
             for (HotDeploymentWatchedFileBuildItem item : items) {
                 LOGGER.info("- {}", item.getLocation());
             }
diff --git a/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainNativeImageProcessor.java b/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainNativeImageProcessor.java
index 453f473..bab94d6 100644
--- a/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainNativeImageProcessor.java
+++ b/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainNativeImageProcessor.java
@@ -16,19 +16,19 @@
  */
 package org.apache.camel.quarkus.main.deployment;
 
+import java.util.stream.Collectors;
+
 import io.quarkus.deployment.Capabilities;
 import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
-import org.apache.camel.quarkus.core.deployment.util.CamelSupport;
 import org.apache.camel.quarkus.support.common.CamelCapabilities;
 import org.apache.camel.support.ResourceHelper;
 import org.apache.camel.util.AntPathMatcher;
 import org.jboss.logging.Logger;
 
 public class CamelMainNativeImageProcessor {
-
     private static final Logger LOG = Logger.getLogger(CamelMainNativeImageProcessor.class);
 
     @BuildStep
@@ -46,27 +46,25 @@ public class CamelMainNativeImageProcessor {
     }
 
     @BuildStep
-    void camelNativeImageResources(Capabilities capabilities, BuildProducer<NativeImageResourceBuildItem> nativeResource) {
-        if (capabilities.isCapabilityPresent(CamelCapabilities.XML)) {
-            String prefix = "camel.main.";
-            String[] properties = new String[] { "xml-rests", "xml-routes", "xml-route-templates" };
-            for (String property : properties) {
-                embedCamelResource(prefix + property, nativeResource);
-            }
+    private void camelNativeImageResources(
+            Capabilities capabilities,
+            BuildProducer<NativeImageResourceBuildItem> nativeResource) {
+
+        if (!capabilities.isCapabilityPresent(CamelCapabilities.XML)) {
+            return;
         }
-    }
 
-    private void embedCamelResource(String propertyName, BuildProducer<NativeImageResourceBuildItem> nativeResource) {
-        for (String path : CamelSupport.getOptionalConfigValue(propertyName, String[].class, new String[0])) {
+        for (String path : CamelMainHelper.routesIncludePatter().collect(Collectors.toList())) {
             String scheme = ResourceHelper.getScheme(path);
 
             // Null scheme is equivalent to classpath scheme
             if (scheme == null || scheme.equals("classpath:")) {
                 if (AntPathMatcher.INSTANCE.isPattern(path)) {
-                    // Classpath directory traversal via wildcard paths does not work on GraalVM. The exact path to the resource has to be looked up
+                    // Classpath directory traversal via wildcard paths does not work on GraalVM.
+                    // The exact path to the resource has to be looked up
                     // https://github.com/oracle/graal/issues/1108
-                    LOG.warnf("%s classpath wildcards does not work in native mode. Resources matching %s will not be loaded.",
-                            propertyName, path);
+                    LOG.warnf("Classpath wildcards does not work in native mode. Resources matching %s will not be loaded.",
+                            path);
                 } else {
                     nativeResource.produce(new NativeImageResourceBuildItem(path.replace("classpath:", "")));
                 }
diff --git a/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainLambdaRouteBuilderDiscoveryTest.java b/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainLambdaRouteBuilderDiscoveryTest.java
index 3697f7e..f2e951d 100644
--- a/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainLambdaRouteBuilderDiscoveryTest.java
+++ b/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainLambdaRouteBuilderDiscoveryTest.java
@@ -63,12 +63,10 @@ public class CamelMainLambdaRouteBuilderDiscoveryTest {
     @Test
     public void testRoutesDiscovery() {
         assertThat(main.getCamelContext().getRoutes()).isNotEmpty();
-        assertThat(main.configure().getRoutesBuilders()).isNotEmpty();
     }
 
     @Produces
     public LambdaRouteBuilder myRoute() {
         return rb -> rb.from("direct:in").routeId("my-route").to("log:out");
     }
-
 }
diff --git a/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainRouteTemplateTest.java b/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainRouteTemplateTest.java
index 3925fb2..e91c15d 100644
--- a/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainRouteTemplateTest.java
+++ b/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainRouteTemplateTest.java
@@ -76,7 +76,6 @@ public class CamelMainRouteTemplateTest {
         main.getCamelContext().addRouteFromTemplate("second", "myTemplate", parameters);
 
         assertThat(main.getCamelContext().getRoutes()).isNotEmpty();
-        assertThat(main.configure().getRoutesBuilders()).isNotEmpty();
 
         FluentProducerTemplate p = main.getCamelContext().createFluentProducerTemplate();
         String out1 = p.withBody("body1").to("direct:one").request(String.class);
diff --git a/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMain.java b/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMain.java
index 135b309..a77fdb0 100644
--- a/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMain.java
+++ b/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMain.java
@@ -24,13 +24,12 @@ import io.quarkus.runtime.Quarkus;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.ProducerTemplate;
-import org.apache.camel.RoutesBuilder;
 import org.apache.camel.main.MainCommandLineSupport;
 import org.apache.camel.main.MainConfigurationProperties;
 import org.apache.camel.main.MainListener;
 import org.apache.camel.main.MainShutdownStrategy;
+import org.apache.camel.main.RoutesConfigurer;
 import org.apache.camel.main.SimpleMainShutdownStrategy;
-import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.HasCamelContext;
 import org.apache.camel.support.service.ServiceHelper;
 import org.slf4j.Logger;
@@ -46,14 +45,21 @@ public final class CamelMain extends MainCommandLineSupport implements HasCamelC
         this.engineStarted = new AtomicBoolean();
     }
 
-    @Override
-    protected void loadRouteBuilders(CamelContext camelContext) throws Exception {
-        // routes are discovered and pre-instantiated which allow to post process them to support Camel's DI
-        CamelBeanPostProcessor postProcessor = camelContext.adapt(ExtendedCamelContext.class).getBeanPostProcessor();
-        for (RoutesBuilder builder : mainConfigurationProperties.getRoutesBuilders()) {
-            postProcessor.postProcessBeforeInitialization(builder, builder.getClass().getName());
-            postProcessor.postProcessAfterInitialization(builder, builder.getClass().getName());
+    protected void configureRoutes(CamelContext camelContext) throws Exception {
+        // then configure and add the routes
+        RoutesConfigurer configurer = new RoutesConfigurer();
+
+        if (mainConfigurationProperties.isRoutesCollectorEnabled()) {
+            configurer.setRoutesCollector(routesCollector);
         }
+
+        configurer.setBeanPostProcessor(camelContext.adapt(ExtendedCamelContext.class).getBeanPostProcessor());
+        configurer.setRoutesBuilders(mainConfigurationProperties.getRoutesBuilders());
+        configurer.setRoutesExcludePattern(mainConfigurationProperties.getRoutesExcludePattern());
+        configurer.setRoutesIncludePattern(mainConfigurationProperties.getRoutesIncludePattern());
+        configurer.setJavaRoutesExcludePattern(mainConfigurationProperties.getJavaRoutesExcludePattern());
+        configurer.setJavaRoutesIncludePattern(mainConfigurationProperties.getJavaRoutesIncludePattern());
+        configurer.configureRoutes(camelContext);
     }
 
     @Override
diff --git a/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java b/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java
index 0b3e65c..37ef711 100644
--- a/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java
+++ b/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java
@@ -46,12 +46,6 @@ public class CamelMainRecorder {
         // no need to look for sources.
         main.setDefaultPropertyPlaceholderLocation("false");
 
-        // xml rest/routes/templates should be explicitly configured as an
-        // additional dependency is required thus, disable auto discovery
-        main.configure().setXmlRoutes("false");
-        main.configure().setXmlRests("false");
-        main.configure().setXmlRouteTemplates("false");
-
         // register to the container
         container.instance(CamelMainProducers.class).setMain(main);
 
diff --git a/extensions/csimple/deployment/src/main/java/org/apache/camel/quarkus/component/csimple/deployment/CSimpleXmlProcessor.java b/extensions/csimple/deployment/src/main/java/org/apache/camel/quarkus/component/csimple/deployment/CSimpleXmlProcessor.java
index 2718247..f5c2d29 100644
--- a/extensions/csimple/deployment/src/main/java/org/apache/camel/quarkus/component/csimple/deployment/CSimpleXmlProcessor.java
+++ b/extensions/csimple/deployment/src/main/java/org/apache/camel/quarkus/component/csimple/deployment/CSimpleXmlProcessor.java
@@ -16,23 +16,14 @@
  */
 package org.apache.camel.quarkus.component.csimple.deployment;
 
-import java.io.Closeable;
 import java.io.FileNotFoundException;
-import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
 import java.util.List;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
-import org.xml.sax.SAXException;
-
 import io.quarkus.deployment.Capabilities;
 import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
@@ -43,10 +34,11 @@ import org.apache.camel.quarkus.core.deployment.LanguageExpressionContentHandler
 import org.apache.camel.quarkus.core.deployment.spi.CamelRoutesBuilderClassBuildItem;
 import org.apache.camel.quarkus.core.deployment.util.CamelSupport;
 import org.apache.camel.quarkus.support.common.CamelCapabilities;
+import org.apache.camel.spi.Resource;
+import org.apache.camel.util.AntPathMatcher;
 import org.jboss.logging.Logger;
 
 public class CSimpleXmlProcessor {
-
     private static final Logger LOG = Logger.getLogger(CSimpleXmlProcessor.class);
 
     @BuildStep
@@ -55,78 +47,56 @@ public class CSimpleXmlProcessor {
             List<CamelRoutesBuilderClassBuildItem> routesBuilderClasses,
             BuildProducer<CSimpleExpressionSourceBuildItem> csimpleExpressions,
             Capabilities capabilities)
-            throws ParserConfigurationException, SAXException, IOException {
+            throws Exception {
 
         if (capabilities.isCapabilityPresent(CamelCapabilities.MAIN)) {
-            final List<String> locations = Stream.of("camel.main.xml-routes", "camel.main.xml-rests")
+            final String[] includes = Stream.of(
+                    "camel.main.routesIncludePattern",
+                    "camel.main.routes-include-pattern")
+                    .map(prop -> CamelSupport.getOptionalConfigValue(prop, String[].class, new String[0]))
+                    .flatMap(Stream::of)
+                    .filter(path -> !path.equals("false"))
+                    .toArray(String[]::new);
+
+            final String[] excludes = Stream.of(
+                    "camel.main.routesExcludePattern",
+                    "camel.main.routes-exclude-pattern")
                     .map(prop -> CamelSupport.getOptionalConfigValue(prop, String[].class, new String[0]))
                     .flatMap(Stream::of)
-                    .collect(Collectors.toList());
+                    .filter(path -> !path.equals("false"))
+                    .toArray(String[]::new);
 
             try (DefaultPackageScanResourceResolver resolver = new DefaultPackageScanResourceResolver()) {
                 resolver.setCamelContext(new DefaultCamelContext());
+
                 final SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
                 saxParserFactory.setNamespaceAware(true);
-                SAXParser saxParser = saxParserFactory.newSAXParser();
-                for (String part : locations) {
-                    try {
-                        try (CloseableCollection<InputStream> set = new CloseableCollection<InputStream>(
-                                resolver.findResources(part))) {
-                            for (InputStream is : set) {
-                                LOG.debugf("Found XML routes from location: %s", part);
-                                try {
-                                    saxParser.parse(
-                                            is,
-                                            new LanguageExpressionContentHandler(
-                                                    "csimple",
-                                                    (script, isPredicate) -> csimpleExpressions.produce(
-                                                            new CSimpleExpressionSourceBuildItem(
-                                                                    script,
-                                                                    isPredicate,
-                                                                    "org.apache.camel.language.csimple.XmlRouteBuilder"))));
-                                } finally {
-                                    if (is != null) {
-                                        is.close();
-                                    }
-                                }
-                            }
-                        }
-                    } catch (FileNotFoundException e) {
-                        LOG.debugf("No XML routes found in %s. Skipping XML routes detection.", part);
-                    } catch (Exception e) {
-                        throw new RuntimeException("Could not analyze CSimple expressions in " + part, e);
-                    }
-                }
-            }
-        }
+                final SAXParser saxParser = saxParserFactory.newSAXParser();
 
-    }
-
-    static class CloseableCollection<E extends Closeable> implements Closeable, Iterable<E> {
-        private final Collection<E> delegate;
-
-        public CloseableCollection(Collection<E> delegate) {
-            this.delegate = delegate;
-        }
+                for (String include : includes) {
+                    for (Resource resource : resolver.findResources(include)) {
+                        if (AntPathMatcher.INSTANCE.anyMatch(excludes, resource.getLocation())) {
+                            continue;
+                        }
 
-        @Override
-        public void close() throws IOException {
-            List<Exception> exceptions = new ArrayList<>();
-            for (Closeable closeable : delegate) {
-                try {
-                    closeable.close();
-                } catch (Exception e) {
-                    exceptions.add(e);
+                        try (InputStream is = resource.getInputStream()) {
+                            saxParser.parse(
+                                    is,
+                                    new LanguageExpressionContentHandler(
+                                            "csimple",
+                                            (script, isPredicate) -> csimpleExpressions.produce(
+                                                    new CSimpleExpressionSourceBuildItem(
+                                                            script,
+                                                            isPredicate,
+                                                            "org.apache.camel.language.csimple.XmlRouteBuilder"))));
+                        } catch (FileNotFoundException e) {
+                            LOG.debugf("No XML routes found in %s. Skipping XML routes detection.", resource.getLocation());
+                        } catch (Exception e) {
+                            throw new RuntimeException("Could not analyze CSimple expressions in " + resource.getLocation(), e);
+                        }
+                    }
                 }
             }
-            if (!exceptions.isEmpty()) {
-                throw new IOException("Could not close a resource", exceptions.get(0));
-            }
-        }
-
-        @Override
-        public Iterator<E> iterator() {
-            return delegate.iterator();
         }
     }
 }
diff --git a/integration-tests-support/custom-routes-collector/runtime/src/main/java/org/apache/camel/quarkus/main/runtime/support/CustomRoutesCollector.java b/integration-tests-support/custom-routes-collector/runtime/src/main/java/org/apache/camel/quarkus/main/runtime/support/CustomRoutesCollector.java
index 34f58be..f87c704 100644
--- a/integration-tests-support/custom-routes-collector/runtime/src/main/java/org/apache/camel/quarkus/main/runtime/support/CustomRoutesCollector.java
+++ b/integration-tests-support/custom-routes-collector/runtime/src/main/java/org/apache/camel/quarkus/main/runtime/support/CustomRoutesCollector.java
@@ -16,15 +16,13 @@
  */
 package org.apache.camel.quarkus.main.runtime.support;
 
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.main.RoutesCollector;
-import org.apache.camel.model.RouteTemplatesDefinition;
-import org.apache.camel.model.RoutesDefinition;
-import org.apache.camel.model.rest.RestsDefinition;
 
 public class CustomRoutesCollector implements RoutesCollector {
     @Override
@@ -36,18 +34,10 @@ public class CustomRoutesCollector implements RoutesCollector {
     }
 
     @Override
-    public List<RoutesDefinition> collectXmlRoutesFromDirectory(CamelContext camelContext, String directory) throws Exception {
-        return Collections.emptyList();
-    }
-
-    @Override
-    public List<RouteTemplatesDefinition> collectXmlRouteTemplatesFromDirectory(CamelContext camelContext, String directory)
-            throws Exception {
-        return Collections.emptyList();
-    }
-
-    @Override
-    public List<RestsDefinition> collectXmlRestsFromDirectory(CamelContext camelContext, String directory) throws Exception {
+    public Collection<RoutesBuilder> collectRoutesFromDirectory(
+            CamelContext camelContext,
+            String excludePattern,
+            String includePattern) {
         return Collections.emptyList();
     }
 }
diff --git a/integration-tests/csimple/src/main/resources/application.properties b/integration-tests/csimple/src/main/resources/application.properties
index 0ee16d9..5a35e45 100644
--- a/integration-tests/csimple/src/main/resources/application.properties
+++ b/integration-tests/csimple/src/main/resources/application.properties
@@ -15,4 +15,4 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 
-camel.main.xml-routes = classpath:routes/my-routes.xml
+camel.main.routes-include-pattern = classpath:routes/my-routes.xml
diff --git a/integration-tests/dataformats-json/src/main/resources/application.properties b/integration-tests/dataformats-json/src/main/resources/application.properties
index 1767f72..f928ec0 100644
--- a/integration-tests/dataformats-json/src/main/resources/application.properties
+++ b/integration-tests/dataformats-json/src/main/resources/application.properties
@@ -27,4 +27,4 @@ camel.context.name = camel-quarkus-integration-tests-dataformats-json
 #
 # Main
 #
-camel.main.xml-routes = classpath:routes/jsonb-routes.xml,classpath:routes/jackson-routes.xml,classpath:routes/johnzon-routes.xml,classpath:routes/gson-routes.xml
+camel.main.routes-include-pattern = classpath:routes/jsonb-routes.xml,classpath:routes/jackson-routes.xml,classpath:routes/johnzon-routes.xml,classpath:routes/gson-routes.xml
diff --git a/integration-tests/main-devmode/pom.xml b/integration-tests/main-devmode/pom.xml
index c496a90..6e562dd 100644
--- a/integration-tests/main-devmode/pom.xml
+++ b/integration-tests/main-devmode/pom.xml
@@ -161,6 +161,18 @@
             </exclusions>
         </dependency>
     </dependencies>
-
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <systemPropertyVariables>
+                        <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
+                    </systemPropertyVariables>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 
 </project>
diff --git a/integration-tests/main-devmode/src/test/java/org/apache/camel/quarkus/main/CamelDevModeTest.java b/integration-tests/main-devmode/src/test/java/org/apache/camel/quarkus/main/CamelDevModeTest.java
index 5257d4c..80303e9 100644
--- a/integration-tests/main-devmode/src/test/java/org/apache/camel/quarkus/main/CamelDevModeTest.java
+++ b/integration-tests/main-devmode/src/test/java/org/apache/camel/quarkus/main/CamelDevModeTest.java
@@ -74,7 +74,7 @@ public class CamelDevModeTest {
 
         Properties props = new Properties();
         props.setProperty("quarkus.banner.enabled", "false");
-        props.setProperty("camel.main.xml-routes", "file:" + BASE.toAbsolutePath().toString() + "/routes.xml");
+        props.setProperty("camel.main.routes-include-pattern", "file:" + BASE.toAbsolutePath().toString() + "/routes.xml");
 
         try {
             props.store(writer, "");
diff --git a/integration-tests/main-xml-io/src/main/java/org/apache/camel/quarkus/main/CoreMainXmlIoResource.java b/integration-tests/main-xml-io/src/main/java/org/apache/camel/quarkus/main/CoreMainXmlIoResource.java
index 75a3014..54b3dee 100644
--- a/integration-tests/main-xml-io/src/main/java/org/apache/camel/quarkus/main/CoreMainXmlIoResource.java
+++ b/integration-tests/main-xml-io/src/main/java/org/apache/camel/quarkus/main/CoreMainXmlIoResource.java
@@ -21,7 +21,6 @@ import javax.inject.Inject;
 import javax.json.Json;
 import javax.json.JsonArrayBuilder;
 import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
@@ -32,6 +31,8 @@ import javax.ws.rs.core.MediaType;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.TemplatedRouteBuilder;
+import org.apache.camel.spi.RoutesBuilderLoader;
+import org.apache.camel.xml.in.XmlRoutesBuilderLoader;
 
 @Path("/test")
 @ApplicationScoped
@@ -63,23 +64,15 @@ public class CoreMainXmlIoResource {
         JsonArrayBuilder routes = Json.createArrayBuilder();
         main.getCamelContext().getRoutes().forEach(route -> routes.add(route.getId()));
 
-        JsonObjectBuilder collector = Json.createObjectBuilder();
-        collector.add("type", main.getRoutesCollector().getClass().getName());
-        if (main.getRoutesCollector() instanceof CamelMainRoutesCollector) {
-            CamelMainRoutesCollector crc = (CamelMainRoutesCollector) main.getRoutesCollector();
-            collector.add("type-registry", crc.getRegistryRoutesLoader().getClass().getName());
-            collector.add("type-xml", camelContext.getXMLRoutesDefinitionLoader().getClass().getName());
-        }
-
         return Json.createObjectBuilder()
-                .add("xml-loader", camelContext.getXMLRoutesDefinitionLoader().getClass().getName())
+                .add("xml-routes-definitions-loader", camelContext.getXMLRoutesDefinitionLoader().getClass().getName())
+                .add("xml-routes-builder-loader",
+                        camelContext.getBootstrapFactoryFinder(RoutesBuilderLoader.FACTORY_PATH)
+                                .findClass(XmlRoutesBuilderLoader.EXTENSION).get().getName())
                 .add("xml-model-dumper", camelContext.getModelToXMLDumper().getClass().getName())
                 .add("xml-model-factory", camelContext.getModelJAXBContextFactory().getClass().getName())
-                .add("routes-collector", collector)
-                .add("listeners", listeners)
                 .add("routeBuilders", routeBuilders)
                 .add("routes", routes)
-                .add("autoConfigurationLogSummary", main.getMainConfigurationProperties().isAutoConfigurationLogSummary())
                 .build();
     }
 
diff --git a/integration-tests/main-xml-io/src/main/resources/application.properties b/integration-tests/main-xml-io/src/main/resources/application.properties
index de06ddb..e9d12eb 100644
--- a/integration-tests/main-xml-io/src/main/resources/application.properties
+++ b/integration-tests/main-xml-io/src/main/resources/application.properties
@@ -28,6 +28,4 @@ camel.rest.component = platform-http
 #
 # Main
 #
-camel.main.xml-routes = classpath:routes/my-routes.xml
-camel.main.xml-rests = classpath:rests/my-rests.xml
-camel.main.xml-route-templates = classpath:templates/my-templates.xml
+camel.main.routes-include-pattern = classpath:routes/my-routes.xml,classpath:rests/my-rests.xml,classpath:templates/my-templates.xml
diff --git a/integration-tests/main-xml-io/src/test/java/org/apache/camel/quarkus/main/CoreMainXmlIoTest.java b/integration-tests/main-xml-io/src/test/java/org/apache/camel/quarkus/main/CoreMainXmlIoTest.java
index 9a6fd6f..239e9b1 100644
--- a/integration-tests/main-xml-io/src/test/java/org/apache/camel/quarkus/main/CoreMainXmlIoTest.java
+++ b/integration-tests/main-xml-io/src/test/java/org/apache/camel/quarkus/main/CoreMainXmlIoTest.java
@@ -27,6 +27,7 @@ import io.restassured.path.json.JsonPath;
 import org.apache.camel.quarkus.core.DisabledModelJAXBContextFactory;
 import org.apache.camel.quarkus.core.DisabledModelToXMLDumper;
 import org.apache.camel.xml.in.ModelParserXMLRoutesDefinitionLoader;
+import org.apache.camel.xml.in.XmlRoutesBuilderLoader;
 import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -45,10 +46,14 @@ public class CoreMainXmlIoTest {
                 .body()
                 .jsonPath();
 
-        assertThat(p.getString("xml-loader")).isEqualTo(ModelParserXMLRoutesDefinitionLoader.class.getName());
         assertThat(p.getString("xml-model-dumper")).isEqualTo(DisabledModelToXMLDumper.class.getName());
         assertThat(p.getString("xml-model-factory")).isEqualTo(DisabledModelJAXBContextFactory.class.getName());
 
+        assertThat(p.getString("xml-routes-definitions-loader"))
+                .isEqualTo(ModelParserXMLRoutesDefinitionLoader.class.getName());
+        assertThat(p.getString("xml-routes-builder-loader"))
+                .isEqualTo(XmlRoutesBuilderLoader.class.getName());
+
         assertThat(p.getList("routeBuilders", String.class))
                 .isEmpty();
 
diff --git a/integration-tests/main-xml-jaxb/pom.xml b/integration-tests/main-xml-jaxb/pom.xml
index ec0955a..2f0bae0 100644
--- a/integration-tests/main-xml-jaxb/pom.xml
+++ b/integration-tests/main-xml-jaxb/pom.xml
@@ -36,11 +36,11 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-xml-io</artifactId>
+            <artifactId>camel-quarkus-xml-jaxb</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-xml-jaxb</artifactId>
+            <artifactId>camel-quarkus-xml-io</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
diff --git a/integration-tests/main-xml-jaxb/src/main/java/org/apache/camel/quarkus/main/CoreMainXmlJaxbResource.java b/integration-tests/main-xml-jaxb/src/main/java/org/apache/camel/quarkus/main/CoreMainXmlJaxbResource.java
index dab9cf1..9645e7b 100644
--- a/integration-tests/main-xml-jaxb/src/main/java/org/apache/camel/quarkus/main/CoreMainXmlJaxbResource.java
+++ b/integration-tests/main-xml-jaxb/src/main/java/org/apache/camel/quarkus/main/CoreMainXmlJaxbResource.java
@@ -21,7 +21,6 @@ import javax.inject.Inject;
 import javax.json.Json;
 import javax.json.JsonArrayBuilder;
 import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
@@ -29,6 +28,8 @@ import javax.ws.rs.core.MediaType;
 
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.builder.TemplatedRouteBuilder;
+import org.apache.camel.spi.RoutesBuilderLoader;
+import org.apache.camel.xml.in.XmlRoutesBuilderLoader;
 
 @Path("/test")
 @ApplicationScoped
@@ -57,23 +58,15 @@ public class CoreMainXmlJaxbResource {
         JsonArrayBuilder routes = Json.createArrayBuilder();
         main.getCamelContext().getRoutes().forEach(route -> routes.add(route.getId()));
 
-        JsonObjectBuilder collector = Json.createObjectBuilder();
-        collector.add("type", main.getRoutesCollector().getClass().getName());
-        if (main.getRoutesCollector() instanceof CamelMainRoutesCollector) {
-            CamelMainRoutesCollector crc = (CamelMainRoutesCollector) main.getRoutesCollector();
-            collector.add("type-registry", crc.getRegistryRoutesLoader().getClass().getName());
-            collector.add("type-xml", camelContext.getXMLRoutesDefinitionLoader().getClass().getName());
-        }
-
         return Json.createObjectBuilder()
-                .add("xml-loader", camelContext.getXMLRoutesDefinitionLoader().getClass().getName())
+                .add("xml-routes-definitions-loader", camelContext.getXMLRoutesDefinitionLoader().getClass().getName())
+                .add("xml-routes-builder-loader",
+                        camelContext.getBootstrapFactoryFinder(RoutesBuilderLoader.FACTORY_PATH)
+                                .findClass(XmlRoutesBuilderLoader.EXTENSION).get().getName())
                 .add("xml-model-dumper", camelContext.getModelToXMLDumper().getClass().getName())
                 .add("xml-model-factory", camelContext.getModelJAXBContextFactory().getClass().getName())
-                .add("routes-collector", collector)
-                .add("listeners", listeners)
                 .add("routeBuilders", routeBuilders)
                 .add("routes", routes)
-                .add("autoConfigurationLogSummary", main.getMainConfigurationProperties().isAutoConfigurationLogSummary())
                 .build();
     }
 }
diff --git a/integration-tests/main-xml-jaxb/src/main/resources/application.properties b/integration-tests/main-xml-jaxb/src/main/resources/application.properties
index de06ddb..e9d12eb 100644
--- a/integration-tests/main-xml-jaxb/src/main/resources/application.properties
+++ b/integration-tests/main-xml-jaxb/src/main/resources/application.properties
@@ -28,6 +28,4 @@ camel.rest.component = platform-http
 #
 # Main
 #
-camel.main.xml-routes = classpath:routes/my-routes.xml
-camel.main.xml-rests = classpath:rests/my-rests.xml
-camel.main.xml-route-templates = classpath:templates/my-templates.xml
+camel.main.routes-include-pattern = classpath:routes/my-routes.xml,classpath:rests/my-rests.xml,classpath:templates/my-templates.xml
diff --git a/integration-tests/main-xml-jaxb/src/test/java/org/apache/camel/quarkus/main/CoreMainXmlJaxbTest.java b/integration-tests/main-xml-jaxb/src/test/java/org/apache/camel/quarkus/main/CoreMainXmlJaxbTest.java
index f5f6b24..a1accb2 100644
--- a/integration-tests/main-xml-jaxb/src/test/java/org/apache/camel/quarkus/main/CoreMainXmlJaxbTest.java
+++ b/integration-tests/main-xml-jaxb/src/test/java/org/apache/camel/quarkus/main/CoreMainXmlJaxbTest.java
@@ -24,6 +24,8 @@ import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.path.json.JsonPath;
 import org.apache.camel.xml.in.ModelParserXMLRoutesDefinitionLoader;
+import org.apache.camel.xml.in.XmlRoutesBuilderLoader;
+import org.apache.camel.xml.jaxb.DefaultModelJAXBContextFactory;
 import org.apache.camel.xml.jaxb.JaxbModelToXMLDumper;
 import org.junit.jupiter.api.Test;
 
@@ -42,9 +44,13 @@ public class CoreMainXmlJaxbTest {
                 .body()
                 .jsonPath();
 
-        assertThat(p.getString("xml-loader")).isEqualTo(ModelParserXMLRoutesDefinitionLoader.class.getName());
         assertThat(p.getString("xml-model-dumper")).isEqualTo(JaxbModelToXMLDumper.class.getName());
-        assertThat(p.getString("xml-model-factory")).isEqualTo("org.apache.camel.xml.jaxb.DefaultModelJAXBContextFactory");
+        assertThat(p.getString("xml-model-factory")).isEqualTo(DefaultModelJAXBContextFactory.class.getName());
+
+        assertThat(p.getString("xml-routes-definitions-loader"))
+                .isEqualTo(ModelParserXMLRoutesDefinitionLoader.class.getName());
+        assertThat(p.getString("xml-routes-builder-loader"))
+                .isEqualTo(XmlRoutesBuilderLoader.class.getName());
 
         assertThat(p.getList("routeBuilders", String.class))
                 .isEmpty();