You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2021/03/02 08:34:11 UTC

[camel] 09/10: CAMEL-16275: move RouteBuilderLoader implementations to dedicated artefact

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

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

commit fe83fcd926a329af4b5d05bf07929c76843a1ea1
Author: Luca Burgazzoli <lb...@gmail.com>
AuthorDate: Mon Mar 1 14:05:00 2021 +0100

    CAMEL-16275: move RouteBuilderLoader implementations to dedicated artefact
---
 bom/camel-bom/pom.xml                              |  15 +++
 .../services/org/apache/camel/routes-loader/java   |   2 -
 .../services/org/apache/camel/routes-loader/xml    |   2 -
 .../camel-yaml-dsl => camel-java-joor-dsl}/pom.xml | 117 ++++++--------------
 .../services/org/apache/camel/routes-loader/java   |   2 +
 .../src/main/docs/java-joor-dsl.adoc               |  15 +++
 .../dsl/java/joor/JavaRoutesBuilderLoader.java     |  18 +--
 .../camel/dsl/java/joor/JavaMainRestsTest.java     |  20 ++--
 .../camel/dsl/java/joor/JavaMainTemplateTest.java  |  16 +--
 .../apache/camel/dsl/java/joor/JavaMainTest.java   |  45 +++-----
 .../dsl/java/joor/JavaRoutesBuilderLoaderTest.java |  36 +++---
 .../java/joor/support/MockRestConsumerFactory.java |  40 +++----
 .../apache/camel/dsl/java/joor/support/MyUser.java |  27 +++--
 .../src/test/resources/log4j2-test.properties      |  31 ++++++
 .../org/apache/camel/main/java/MyRoutesDummy.java  |   6 +-
 .../org/apache/camel/main/java/MyRoutesScan.java   |   6 +-
 .../apache/camel/main/java/MyRoutesWithRest.java   |   9 +-
 .../camel/main/java/MyRoutesWithTemplate.java      |  10 +-
 .../src/test/resources/routes/MyRoutes.java        |   0
 .../test/resources/routes/MyRoutesWithBeans.java   |   0
 .../test/resources/routes/MyRoutesWithModel.java   |   2 +-
 .../resources/routes/MyRoutesWithNestedClass.java  |   0
 .../resources/routes/MyRoutesWithNestedTypes.java  |   0
 .../test/resources/routes/MyRoutesWithPackage.java |   0
 .../routes/MyRoutesWithPackageAndComment.java      |   0
 .../routes/MyRoutesWithPackageAndLineComment.java  |   0
 .../routes/MyRoutesWithRestConfiguration.java      |   0
 .../camel-yaml-dsl => camel-xml-io-dsl}/pom.xml    | 122 ++++++---------------
 .../services/org/apache/camel/routes-loader/xml    |   2 +-
 .../src/main/docs/java-xml-io-dsl.adoc             |  11 ++
 .../camel/dsl/xml/io}/XmlRoutesBuilderLoader.java  |   3 +-
 .../apache/camel/dsl/xml/io/XmlMainRestsTest.java  |   6 +-
 .../camel/dsl/xml/io/XmlMainTemplateTest.java      |   6 +-
 .../org/apache/camel/dsl/xml/io/XmlMainTest.java   |   6 +-
 .../dsl/xml/io}/XmlRoutesBuilderLoaderTest.java    |   2 +-
 .../xml/io/support/MockRestConsumerFactory.java    |  40 +++----
 .../src/test/resources/log4j2-test.properties      |  31 ++++++
 .../org/apache/camel/main/xml/camel-dummy.xml      |   2 +-
 .../org/apache/camel/main/xml/camel-rests.xml      |   0
 .../org/apache/camel/main/xml/camel-scan.xml       |   2 +-
 .../org/apache/camel/main/xml/camel-template.xml   |  10 +-
 .../camel-yaml-dsl => camel-xml-jaxb-dsl}/pom.xml  | 120 ++++++--------------
 .../services/org/apache/camel/routes-loader/xml    |   2 +
 .../src/main/docs/java-xml-jaxb-dsl.adoc           |  11 ++
 .../dsl}/xml/jaxb/JaxbXmlRoutesBuilderLoader.java  |   2 +-
 .../camel/dsl/xml/jaxb/JaxbXmlMainRestsTest.java   |   6 +-
 .../dsl/xml/jaxb/JaxbXmlMainTemplateTest.java      |   6 +-
 .../apache/camel/dsl/xml/jaxb/JaxbXmlMainTest.java |   6 +-
 .../xml/jaxb/JaxbXmlRoutesBuilderLoaderTest.java   |  28 +++--
 .../xml/jaxb/support/MockRestConsumerFactory.java  |  40 +++----
 .../src/test/resources/log4j2-test.properties      |  31 ++++++
 .../org/apache/camel/main/xml/camel-dummy.xml      |   0
 .../org/apache/camel/main/xml/camel-rests.xml      |   0
 .../org/apache/camel/main/xml/camel-scan.xml       |   0
 .../org/apache/camel/main/xml/camel-template.xml   |  10 +-
 .../services/org/apache/camel/other.properties     |   7 --
 dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml          |   5 +
 .../services/org/apache/camel/other.properties     |   7 --
 .../src/generated/resources/yaml-dsl.json          |  14 ---
 .../camel-yaml-dsl/src/main/docs/yaml-dsl.adoc     |   4 +-
 .../camel/dsl/yaml/YamlRoutesBuilderLoader.java    |  23 +++-
 .../org/apache/camel/dsl/yaml/MainTest.groovy      |  39 +++++++
 .../src/test/resources/routes/routes.yaml          |  20 ++++
 dsl/pom.xml                                        |   3 +
 parent/pom.xml                                     |  39 +++++--
 65 files changed, 589 insertions(+), 496 deletions(-)

diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index bcbe59c..a3f524a 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -947,6 +947,11 @@
         <artifactId>camel-jasypt</artifactId>
         <version>${project.version}</version>
       </dependency>
+			<dependency>
+				<groupId>org.apache.camel</groupId>
+				<artifactId>camel-java-joor-dsl</artifactId>
+				<version>${project.version}</version>
+			</dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
         <artifactId>camel-jaxb</artifactId>
@@ -2000,11 +2005,21 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-xml-io-dsl</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-xml-jaxb</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-xml-jaxb-dsl</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-xml-jaxp</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/components/camel-joor/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/java b/components/camel-joor/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/java
deleted file mode 100644
index d1968d0..0000000
--- a/components/camel-joor/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/java
+++ /dev/null
@@ -1,2 +0,0 @@
-# Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.language.joor.JoorRoutesBuilderLoader
diff --git a/core/camel-xml-jaxb/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/xml b/core/camel-xml-jaxb/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/xml
deleted file mode 100644
index daa444e..0000000
--- a/core/camel-xml-jaxb/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/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/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml b/dsl/camel-java-joor-dsl/pom.xml
similarity index 56%
copy from dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml
copy to dsl/camel-java-joor-dsl/pom.xml
index 298b94c..15fde31 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml
+++ b/dsl/camel-java-joor-dsl/pom.xml
@@ -24,19 +24,19 @@
 
     <parent>
         <groupId>org.apache.camel</groupId>
-        <artifactId>camel-yaml-dsl-parent</artifactId>
+        <artifactId>dsl</artifactId>
         <version>3.9.0-SNAPSHOT</version>
     </parent>
 
-    <artifactId>camel-yaml-dsl</artifactId>
+    <artifactId>camel-java-joor-dsl</artifactId>
     <packaging>jar</packaging>
-    <name>Camel :: YAML DSL</name>
-    <description>Camel DSL with YAML</description>
+    <name>Camel :: Java DSL with jOOR</name>
+    <description>Camel Java DSL with jOOR</description>
 
     <properties>
         <firstVersion>3.9.0</firstVersion>
         <sourcecheckExcludes>
-            **/*.groovy
+            **/resources/**/My*.java
         </sourcecheckExcludes>
         <sourcecheckExcludesComma>
             ${sourcecheckExcludes},
@@ -46,42 +46,25 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-yaml-dsl-common</artifactId>
-            <version>${project.version}</version>
+            <artifactId>camel-support</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-yaml-dsl-deserializers</artifactId>
-            <version>${project.version}</version>
+            <artifactId>camel-core-model</artifactId>
         </dependency>
 
+        <!-- requires Java 11 or 14 -->
         <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
-            <scope>test</scope>
+            <groupId>org.jooq</groupId>
+            <artifactId>joor</artifactId>
+            <version>${joor-version}</version>
         </dependency>
+
         <dependency>
-            <groupId>org.spockframework</groupId>
-            <artifactId>spock-core</artifactId>
-            <version>${spock-version}</version>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-main</artifactId>
             <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.codehaus.groovy</groupId>
-                    <artifactId>*</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>junit</groupId>
-                    <artifactId>*</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
-
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-direct</artifactId>
@@ -124,34 +107,17 @@
         </dependency>
 
         <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy</artifactId>
-            <version>${groovy-version}</version>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy-test</artifactId>
-            <version>${groovy-version}</version>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test-junit5</artifactId>
             <scope>test</scope>
         </dependency>
 
         <dependency>
-            <groupId>com.github.java-json-tools</groupId>
-            <artifactId>json-schema-validator</artifactId>
-            <version>${json-schema-validator-version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-yaml</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-core</artifactId>
             <scope>test</scope>
@@ -173,40 +139,6 @@
         <plugins>
             <plugin>
                 <groupId>org.apache.camel</groupId>
-                <artifactId>camel-yaml-dsl-maven-plugin</artifactId>
-                <version>${project.version}</version>
-                <executions>
-                    <execution>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>generate-yaml-schema</goal>
-                        </goals>
-                        <configuration>
-                            <bannedDefinitions>
-                                <bannedDefinition>org.apache.camel.model.FromDefinition</bannedDefinition>
-                            </bannedDefinitions>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.codehaus.gmavenplus</groupId>
-                <artifactId>gmavenplus-plugin</artifactId>
-                <version>${gmavenplus-plugin-version}</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addTestSources</goal>
-                            <goal>compileTests</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.camel</groupId>
                 <artifactId>camel-package-maven-plugin</artifactId>
                 <executions>
                     <execution>
@@ -220,4 +152,17 @@
         </plugins>
     </build>
 
+    <!-- skip testing on java 8 -->
+    <profiles>
+        <profile>
+            <id>jdk8</id>
+            <activation>
+                <jdk>[,8)</jdk>
+            </activation>
+            <properties>
+                <maven.test.skip.exec>true</maven.test.skip.exec>
+            </properties>
+        </profile>
+    </profiles>
+
 </project>
\ No newline at end of file
diff --git a/dsl/camel-java-joor-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/java b/dsl/camel-java-joor-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/java
new file mode 100644
index 0000000..a1c82c7
--- /dev/null
+++ b/dsl/camel-java-joor-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/java
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.dsl.java.joor.JavaRoutesBuilderLoader
diff --git a/dsl/camel-java-joor-dsl/src/main/docs/java-joor-dsl.adoc b/dsl/camel-java-joor-dsl/src/main/docs/java-joor-dsl.adoc
new file mode 100644
index 0000000..179cd72
--- /dev/null
+++ b/dsl/camel-java-joor-dsl/src/main/docs/java-joor-dsl.adoc
@@ -0,0 +1,15 @@
+[[java-joor-dsl-other]]
+= Java DSL based on joor
+:docTitle: XML Dsl
+:artifactId: camel-java-joor-dsl
+:description: Camel DSL with YAML
+:supportLevel: Stable
+:since: 3.
+:supportLevel: Preview
+include::{cq-version}@camel-quarkus:ROOT:partial$reference/others/java-joor-dsl.adoc[opts=optional]
+//Manually maintained attributes
+:group: DSL
+
+xml-io-
+
+See https://camel.apache.org/manual/latest/dsl.html
\ No newline at end of file
diff --git a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorRoutesBuilderLoader.java b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java
similarity index 85%
rename from components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorRoutesBuilderLoader.java
rename to dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java
index 0ebf95f..949618b 100644
--- a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorRoutesBuilderLoader.java
+++ b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.language.joor;
+package org.apache.camel.dsl.java.joor;
 
 import java.io.InputStream;
 import java.util.regex.Matcher;
@@ -35,8 +35,8 @@ import org.apache.camel.util.IOHelper;
 import org.joor.Reflect;
 
 @ManagedResource(description = "Managed JavaRoutesBuilderLoader")
-@RoutesLoader(JoorRoutesBuilderLoader.EXTENSION)
-public class JoorRoutesBuilderLoader extends RoutesBuilderLoaderSupport {
+@RoutesLoader(JavaRoutesBuilderLoader.EXTENSION)
+public class JavaRoutesBuilderLoader extends RoutesBuilderLoaderSupport {
     public static final String EXTENSION = "java";
     public static final Pattern PACKAGE_PATTERN = Pattern.compile(
             "^\\s*package\\s+([a-zA-Z][\\.\\w]*)\\s*;.*$", Pattern.MULTILINE);
@@ -61,12 +61,16 @@ public class JoorRoutesBuilderLoader extends RoutesBuilderLoaderSupport {
             final String content = IOHelper.loadText(is);
             final String name = determineName(resource, content);
 
-            StartupStep step = recorder.beginStep(JoorRoutesBuilderLoader.class, name, "Compiling RouteBuilder");
+            StartupStep step = recorder != null
+                    ? recorder.beginStep(JavaRoutesBuilderLoader.class, name, "Compiling RouteBuilder")
+                    : null;
+
             try {
-                final Reflect compiled = Reflect.compile(name, content);
-                return compiled.create().get();
+                return Reflect.compile(name, content).create().get();
             } finally {
-                recorder.endStep(step);
+                if (recorder != null) {
+                    recorder.endStep(step);
+                }
             }
         }
     }
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlRestsTest.java b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaMainRestsTest.java
similarity index 83%
copy from core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlRestsTest.java
copy to dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaMainRestsTest.java
index 77c27b8..d91acce 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlRestsTest.java
+++ b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaMainRestsTest.java
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.main.xml;
+package org.apache.camel.dsl.java.joor;
 
 import java.util.List;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.dsl.java.joor.support.MockRestConsumerFactory;
 import org.apache.camel.main.Main;
-import org.apache.camel.main.support.MockRestConsumerFactory;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.rest.GetVerbDefinition;
 import org.apache.camel.model.rest.RestDefinition;
@@ -31,13 +31,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-public class MainXmlRestsTest {
+public class JavaMainRestsTest {
 
     @Test
     public void testMainRestsCollector() {
         // will load XML from target/classes when testing
         doTestMain(
-                "org/apache/camel/main/xml/camel-rests.xml",
+                "org/apache/camel/main/java/MyRoutesWithRest.java",
                 null);
     }
 
@@ -45,7 +45,7 @@ public class MainXmlRestsTest {
     public void testMainRestsCollectorScan() {
         // will load XML from target/classes when testing
         doTestMain(
-                "org/apache/camel/main/xml/camel-res*.xml",
+                "org/apache/camel/main/java/MyRoutesWithRes*.java",
                 null);
     }
 
@@ -53,7 +53,7 @@ public class MainXmlRestsTest {
     public void testMainRestsCollectorScanWildcardDirClasspathPath() {
         // will load XML from target/classes when testing
         doTestMain(
-                "org/apache/camel/main/**/camel-res*.xml",
+                "org/apache/camel/main/**/MyRoutesWithRes*.java",
                 null);
     }
 
@@ -61,28 +61,28 @@ public class MainXmlRestsTest {
     public void testMainRestsCollectorScanClasspathPrefix() {
         // will load XML from target/classes when testing
         doTestMain(
-                "classpath:org/apache/camel/main/xml/camel-res*.xml",
+                "classpath:org/apache/camel/main/java/MyRoutesWithRes*.java",
                 null);
     }
 
     @Test
     public void testMainRestsCollectorScanInDir() {
         doTestMain(
-                "file:src/test/resources/org/apache/camel/main/xml/camel-res*.xml",
+                "file:src/test/resources/org/apache/camel/main/java/MyRoutesWithRes*.java",
                 null);
     }
 
     @Test
     public void testMainRestsCollectorScanWildcardDirFilePath() {
         doTestMain(
-                "file:src/test/resources/**/camel-res*.xml",
+                "file:src/test/resources/org/**/MyRoutesWithRes*.java",
                 null);
     }
 
     @Test
     public void testMainRestsCollectorFile() {
         doTestMain(
-                "file:src/test/resources/org/apache/camel/main/xml/camel-rests.xml,",
+                "file:src/test/resources/org/apache/camel/main/java/MyRoutesWithRest.java,",
                 null);
     }
 
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTemplateTest.java b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaMainTemplateTest.java
similarity index 83%
copy from core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTemplateTest.java
copy to dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaMainTemplateTest.java
index 847b862..fd755fa 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTemplateTest.java
+++ b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaMainTemplateTest.java
@@ -14,24 +14,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.main.xml;
+package org.apache.camel.dsl.java.joor;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.dsl.java.joor.support.MockRestConsumerFactory;
 import org.apache.camel.main.Main;
-import org.apache.camel.main.support.MockRestConsumerFactory;
 import org.apache.camel.model.ModelCamelContext;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class MainXmlTemplateTest {
+public class JavaMainTemplateTest {
 
     @Test
     public void testMainRoutesCollector() {
         // will load XML from target/classes when testing
         doTestMain(
-                "org/apache/camel/main/xml/camel-template.xml",
+                "org/apache/camel/main/java/MyRoutesWithTemplate.java",
                 null);
     }
 
@@ -39,7 +39,7 @@ public class MainXmlTemplateTest {
     public void testMainRoutesCollectorScan() {
         // will load XML from target/classes when testing
         doTestMain(
-                "org/apache/camel/main/xml/camel-template*.xml",
+                "org/apache/camel/main/java/MyRoutesWithTempl*.java",
                 null);
     }
 
@@ -47,7 +47,7 @@ public class MainXmlTemplateTest {
     public void testMainRoutesCollectorScanTwo() {
         // will load XML from target/classes when testing
         doTestMain(
-                "org/apache/camel/main/xml/camel-t*.xml",
+                "org/apache/camel/main/java/MyRoutesWithTempl*.java",
                 null);
     }
 
@@ -55,7 +55,7 @@ public class MainXmlTemplateTest {
     public void testMainRoutesCollectorScanWildcardDirClasspathPath() {
         // will load XML from target/classes when testing
         doTestMain(
-                "org/apache/camel/main/**/camel-t*.xml",
+                "org/apache/camel/main/**/MyRoutesWithTempl*.java",
                 null);
     }
 
@@ -63,7 +63,7 @@ public class MainXmlTemplateTest {
     public void testMainRoutesCollectorScanClasspathPrefix() {
         // will load XML from target/classes when testing
         doTestMain(
-                "classpath:org/apache/camel/main/xml/camel-t*.xml",
+                "classpath:org/apache/camel/main/java/MyRoutesWithTempl*.java",
                 null);
     }
 
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTest.java b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaMainTest.java
similarity index 67%
copy from core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTest.java
copy to dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaMainTest.java
index 44ac8f3..b18a2ea 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTest.java
+++ b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaMainTest.java
@@ -14,24 +14,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.main.xml;
+package org.apache.camel.dsl.java.joor;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.dsl.java.joor.support.MockRestConsumerFactory;
 import org.apache.camel.main.Main;
-import org.apache.camel.main.support.MockRestConsumerFactory;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class MainXmlTest {
+public class JavaMainTest {
 
     @Test
     public void testMainRoutesCollector() throws Exception {
         // will load XML from target/classes when testing
         doTestMain(
-                "org/apache/camel/main/xml/camel-dummy.xml,org/apache/camel/main/xml/camel-scan.xml",
+                "org/apache/camel/main/java/MyRoutesDummy.java,org/apache/camel/main/java/MyRoutesScan.java",
                 null);
     }
 
@@ -39,59 +39,44 @@ public class MainXmlTest {
     public void testMainRoutesCollectorScan() throws Exception {
         // will load XML from target/classes when testing
         doTestMain(
-                "org/apache/camel/main/xml/camel-*.xml",
-                "**/camel-rests.xml,**/camel-template.xml");
+                "org/apache/camel/main/java/MyRoutes*.java",
+                "**/*Rest*.java,**/*Template*.java");
     }
 
     @Test
     public void testMainRoutesCollectorScanWildcardDirClasspathPath() throws Exception {
         // will load XML from target/classes when testing
         doTestMain(
-                "org/apache/camel/main/**/*.xml",
-                "**/camel-rests.xml,**/camel-template.xml");
+                "org/apache/camel/main/**/*.java",
+                "**/*Rest*.java,**/*Template*.java");
     }
 
     @Test
     public void testMainRoutesCollectorScanClasspathPrefix() throws Exception {
         // will load XML from target/classes when testing
         doTestMain(
-                "classpath:org/apache/camel/main/xml/camel-*.xml",
-                "**/camel-rests.xml,**/camel-template.xml");
-    }
-
-    @Test
-    public void testMainRoutesCollectorScanInJar() throws Exception {
-        // will load XML from camel-core test JAR when testing
-        doTestMain(
-                "org/apache/camel/model/scan-*.xml",
-                null);
+                "classpath:org/apache/camel/main/java/MyRoutes*.java",
+                "**/*Rest*.java,**/*Template*.java");
     }
 
     @Test
     public void testMainRoutesCollectorScanInDir() throws Exception {
         doTestMain(
-                "file:src/test/resources/org/apache/camel/main/xml/camel-*.xml",
-                "**/camel-rests.xml,**/camel-template.xml");
+                "file:src/test/resources/org/apache/camel/main/java/MyRoutes*.java",
+                "**/*Rest*.java,**/*Template*.java");
     }
 
     @Test
     public void testMainRoutesCollectorScanWildcardDirFilePath() throws Exception {
         doTestMain(
-                "file:src/test/resources/**/*.xml",
-                "**/camel-rests.xml,**/camel-template.xml");
+                "file:src/test/resources/org/**/*.java",
+                "**/*Rest*.java,**/*Template*.java");
     }
 
     @Test
     public void testMainRoutesCollectorFile() throws Exception {
         doTestMain(
-                "file:src/test/resources/org/apache/camel/main/xml/camel-dummy.xml,file:src/test/resources/org/apache/camel/main/xml/camel-scan.xml,",
-                null);
-    }
-
-    @Test
-    public void testMainRoutesCollectorScanInJarAndDir() throws Exception {
-        doTestMain(
-                "classpath:org/apache/camel/main/xml/*dummy.xml,file:src/test/resources/org/apache/camel/main/xml/*scan.xml",
+                "file:src/test/resources/org/apache/camel/main/java/MyRoutesDummy.java,file:src/test/resources/org/apache/camel/main/java/MyRoutesScan.java",
                 null);
     }
 
diff --git a/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorRoutesBuilderLoaderTest.java b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoaderTest.java
similarity index 75%
rename from components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorRoutesBuilderLoaderTest.java
rename to dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoaderTest.java
index a19181b..f14d635 100644
--- a/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorRoutesBuilderLoaderTest.java
+++ b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoaderTest.java
@@ -14,24 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.language.joor;
+package org.apache.camel.dsl.java.joor;
 
 import java.util.Collection;
 
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.dsl.java.joor.support.MyUser;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.model.ProcessDefinition;
 import org.apache.camel.model.SetBodyDefinition;
 import org.apache.camel.model.ToDefinition;
 import org.apache.camel.spi.Resource;
+import org.assertj.core.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class JoorRoutesBuilderLoaderTest {
+public class JavaRoutesBuilderLoaderTest {
 
     @ParameterizedTest
     @ValueSource(strings = {
@@ -42,7 +44,7 @@ public class JoorRoutesBuilderLoaderTest {
     })
     void testLoadRoutes(String location) throws Exception {
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = Resource.fromClasspath(JoorRoutesBuilderLoaderTest.class, location);
+            Resource resource = Resource.fromClasspath(JavaRoutesBuilderLoaderTest.class, location);
             Collection<RoutesBuilder> builders = context.getRoutesLoader().findRoutesBuilders(resource);
 
             assertThat(builders).hasSize(1);
@@ -51,12 +53,12 @@ public class JoorRoutesBuilderLoaderTest {
             builder.setContext(context);
             builder.configure();
 
-            assertThat(builder.getRouteCollection().getRoutes())
+            Assertions.assertThat(builder.getRouteCollection().getRoutes())
                     .hasSize(1)
                     .first()
                     .satisfies(rd -> {
-                        assertThat(rd.getInput().getEndpointUri()).matches("timer:.*tick");
-                        assertThat(rd.getOutputs().get(0)).isInstanceOf(ToDefinition.class);
+                        Assertions.assertThat(rd.getInput().getEndpointUri()).matches("timer:.*tick");
+                        Assertions.assertThat(rd.getOutputs().get(0)).isInstanceOf(ToDefinition.class);
                     });
         }
     }
@@ -66,7 +68,7 @@ public class JoorRoutesBuilderLoaderTest {
         final String location = "/routes/MyRoutesWithNestedClass.java";
 
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = Resource.fromClasspath(JoorRoutesBuilderLoaderTest.class, location);
+            Resource resource = Resource.fromClasspath(JavaRoutesBuilderLoaderTest.class, location);
             Collection<RoutesBuilder> builders = context.getRoutesLoader().findRoutesBuilders(resource);
 
             assertThat(builders).hasSize(1);
@@ -75,14 +77,14 @@ public class JoorRoutesBuilderLoaderTest {
             builder.setContext(context);
             builder.configure();
 
-            assertThat(builder.getRouteCollection().getRoutes())
+            Assertions.assertThat(builder.getRouteCollection().getRoutes())
                     .hasSize(1)
                     .first()
                     .satisfies(rd -> {
-                        assertThat(rd.getInput().getEndpointUri()).matches("timer:.*tick");
-                        assertThat(rd.getOutputs().get(0)).isInstanceOf(SetBodyDefinition.class);
-                        assertThat(rd.getOutputs().get(1)).isInstanceOf(ProcessDefinition.class);
-                        assertThat(rd.getOutputs().get(2)).isInstanceOf(ToDefinition.class);
+                        Assertions.assertThat(rd.getInput().getEndpointUri()).matches("timer:.*tick");
+                        Assertions.assertThat(rd.getOutputs().get(0)).isInstanceOf(SetBodyDefinition.class);
+                        Assertions.assertThat(rd.getOutputs().get(1)).isInstanceOf(ProcessDefinition.class);
+                        Assertions.assertThat(rd.getOutputs().get(2)).isInstanceOf(ToDefinition.class);
                     });
         }
     }
@@ -92,7 +94,7 @@ public class JoorRoutesBuilderLoaderTest {
         final String location = "/routes/MyRoutesWithRestConfiguration.java";
 
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = Resource.fromClasspath(JoorRoutesBuilderLoaderTest.class, location);
+            Resource resource = Resource.fromClasspath(JavaRoutesBuilderLoaderTest.class, location);
             Collection<RoutesBuilder> builders = context.getRoutesLoader().findRoutesBuilders(resource);
 
             assertThat(builders).hasSize(1);
@@ -101,7 +103,7 @@ public class JoorRoutesBuilderLoaderTest {
             builder.setContext(context);
             builder.configure();
 
-            assertThat(builder.getRestConfiguration())
+            Assertions.assertThat(builder.getRestConfiguration())
                     .hasFieldOrPropertyWithValue("component", "restlet");
         }
     }
@@ -111,7 +113,7 @@ public class JoorRoutesBuilderLoaderTest {
         final String location = "/routes/MyRoutesWithModel.java";
 
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = Resource.fromClasspath(JoorRoutesBuilderLoaderTest.class, location);
+            Resource resource = Resource.fromClasspath(JavaRoutesBuilderLoaderTest.class, location);
             Collection<RoutesBuilder> builders = context.getRoutesLoader().findRoutesBuilders(resource);
 
             assertThat(builders).hasSize(1);
@@ -120,8 +122,8 @@ public class JoorRoutesBuilderLoaderTest {
             builder.setContext(context);
             builder.configure();
 
-            assertThat(builder.getRestCollection().getRests()).anySatisfy(rd -> {
-                assertThat(rd.getVerbs())
+            Assertions.assertThat(builder.getRestCollection().getRests()).anySatisfy(rd -> {
+                Assertions.assertThat(rd.getVerbs())
                         .first()
                         .hasFieldOrPropertyWithValue("outType", MyUser.class.getName());
             });
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutesWithNestedClass.java b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/support/MockRestConsumerFactory.java
similarity index 55%
copy from components/camel-joor/src/test/resources/routes/MyRoutesWithNestedClass.java
copy to dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/support/MockRestConsumerFactory.java
index e4c2944..e38832f 100644
--- a/components/camel-joor/src/test/resources/routes/MyRoutesWithNestedClass.java
+++ b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/support/MockRestConsumerFactory.java
@@ -14,26 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.builder.RouteBuilder;
+package org.apache.camel.dsl.java.joor.support;
 
-public class MyRoutesWithNestedClass extends RouteBuilder {
-    @Override
-    public void configure() throws Exception {
-        Processor toUpper = new Processor() {
-            @Override
-            public void process(Exchange exchange) throws Exception {
-                String body = exchange.getIn().getBody(String.class);
-                body = body.toUpperCase();
+import java.util.Map;
 
-                exchange.getOut().setBody(body);
-            }
-        };
+import org.apache.camel.CamelContext;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.spi.RestConfiguration;
+import org.apache.camel.spi.RestConsumerFactory;
 
-        from("timer:tick")
-            .setBody().constant("test")
-            .process(toUpper)
-            .to("log:info");
+public final class MockRestConsumerFactory implements RestConsumerFactory {
+    @Override
+    public Consumer createConsumer(
+            CamelContext camelContext,
+            Processor processor,
+            String verb,
+            String basePath,
+            String uriTemplate,
+            String consumes,
+            String produces,
+            RestConfiguration configuration,
+            Map<String, Object> parameters) {
+        return null;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutesWithNestedTypes.java b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/support/MyUser.java
similarity index 69%
copy from components/camel-joor/src/test/resources/routes/MyRoutesWithNestedTypes.java
copy to dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/support/MyUser.java
index 1e0d168..93d6c0f 100644
--- a/components/camel-joor/src/test/resources/routes/MyRoutesWithNestedTypes.java
+++ b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/support/MyUser.java
@@ -14,15 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.builder.RouteBuilder;
+package org.apache.camel.dsl.java.joor.support;
 
-public class MyRoutesWithNestedTypes extends RouteBuilder {
-    @Override
-    public void configure() throws Exception {
+public class MyUser {
+
+    private String name;
+    private int age;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public int getAge() {
+        return age;
     }
 
-    public static class MyModel {
+    public void setAge(int age) {
+        this.age = age;
     }
-}
\ No newline at end of file
+}
diff --git a/dsl/camel-java-joor-dsl/src/test/resources/log4j2-test.properties b/dsl/camel-java-joor-dsl/src/test/resources/log4j2-test.properties
new file mode 100644
index 0000000..fe99721
--- /dev/null
+++ b/dsl/camel-java-joor-dsl/src/test/resources/log4j2-test.properties
@@ -0,0 +1,31 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-java-joor-dsl-test.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+
+appender.out.type = Console
+appender.out.name = out
+appender.out.layout.type = PatternLayout
+appender.out.layout.pattern = [%30.30t] %-30.30c{1} %-5p %m%n
+
+rootLogger.level = INFO
+rootLogger.appenderRef.file.ref = file
+#rootLogger.appenderRef.out.ref = out
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutes.java b/dsl/camel-java-joor-dsl/src/test/resources/org/apache/camel/main/java/MyRoutesDummy.java
similarity index 89%
copy from components/camel-joor/src/test/resources/routes/MyRoutes.java
copy to dsl/camel-java-joor-dsl/src/test/resources/org/apache/camel/main/java/MyRoutesDummy.java
index 0d0b57c..785aa39 100644
--- a/components/camel-joor/src/test/resources/routes/MyRoutes.java
+++ b/dsl/camel-java-joor-dsl/src/test/resources/org/apache/camel/main/java/MyRoutesDummy.java
@@ -16,10 +16,10 @@
  */
 import org.apache.camel.builder.RouteBuilder;
 
-public class MyRoutes extends RouteBuilder {
+public class MyRoutesDummy extends RouteBuilder {
     @Override
     public void configure() throws Exception {
-        from("timer:tick")
-                .to("log:info");
+       from("direct:dummy")
+            .to("mock:dummy");
     }
 }
\ No newline at end of file
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutes.java b/dsl/camel-java-joor-dsl/src/test/resources/org/apache/camel/main/java/MyRoutesScan.java
similarity index 89%
copy from components/camel-joor/src/test/resources/routes/MyRoutes.java
copy to dsl/camel-java-joor-dsl/src/test/resources/org/apache/camel/main/java/MyRoutesScan.java
index 0d0b57c..9780c4c 100644
--- a/components/camel-joor/src/test/resources/routes/MyRoutes.java
+++ b/dsl/camel-java-joor-dsl/src/test/resources/org/apache/camel/main/java/MyRoutesScan.java
@@ -16,10 +16,10 @@
  */
 import org.apache.camel.builder.RouteBuilder;
 
-public class MyRoutes extends RouteBuilder {
+public class MyRoutesScan extends RouteBuilder {
     @Override
     public void configure() throws Exception {
-        from("timer:tick")
-                .to("log:info");
+       from("direct:scan")
+            .to("mock:scan");
     }
 }
\ No newline at end of file
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutes.java b/dsl/camel-java-joor-dsl/src/test/resources/org/apache/camel/main/java/MyRoutesWithRest.java
similarity index 83%
copy from components/camel-joor/src/test/resources/routes/MyRoutes.java
copy to dsl/camel-java-joor-dsl/src/test/resources/org/apache/camel/main/java/MyRoutesWithRest.java
index 0d0b57c..0c50514 100644
--- a/components/camel-joor/src/test/resources/routes/MyRoutes.java
+++ b/dsl/camel-java-joor-dsl/src/test/resources/org/apache/camel/main/java/MyRoutesWithRest.java
@@ -16,10 +16,13 @@
  */
 import org.apache.camel.builder.RouteBuilder;
 
-public class MyRoutes extends RouteBuilder {
+public class MyRoutesWithRest extends RouteBuilder {
     @Override
     public void configure() throws Exception {
-        from("timer:tick")
-                .to("log:info");
+        rest()
+            .id("bar")
+            .path("/say/hello")
+            .get("/bar")
+                .to("mock:bar");
     }
 }
\ No newline at end of file
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutes.java b/dsl/camel-java-joor-dsl/src/test/resources/org/apache/camel/main/java/MyRoutesWithTemplate.java
similarity index 77%
copy from components/camel-joor/src/test/resources/routes/MyRoutes.java
copy to dsl/camel-java-joor-dsl/src/test/resources/org/apache/camel/main/java/MyRoutesWithTemplate.java
index 0d0b57c..86df5ae 100644
--- a/components/camel-joor/src/test/resources/routes/MyRoutes.java
+++ b/dsl/camel-java-joor-dsl/src/test/resources/org/apache/camel/main/java/MyRoutesWithTemplate.java
@@ -16,10 +16,14 @@
  */
 import org.apache.camel.builder.RouteBuilder;
 
-public class MyRoutes extends RouteBuilder {
+public class MyRoutesWithTemplate extends RouteBuilder {
     @Override
     public void configure() throws Exception {
-        from("timer:tick")
-                .to("log:info");
+        routeTemplate("myTemplate")
+            .templateParameter("foo")
+            .templateParameter("bar")
+            .route()
+                .from("direct:{{foo}}")
+                .to("mock:{{bat}}");
     }
 }
\ No newline at end of file
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutes.java b/dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutes.java
similarity index 100%
rename from components/camel-joor/src/test/resources/routes/MyRoutes.java
rename to dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutes.java
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutesWithBeans.java b/dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithBeans.java
similarity index 100%
rename from components/camel-joor/src/test/resources/routes/MyRoutesWithBeans.java
rename to dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithBeans.java
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutesWithModel.java b/dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithModel.java
similarity index 93%
rename from components/camel-joor/src/test/resources/routes/MyRoutesWithModel.java
rename to dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithModel.java
index e434b2d..61ab328 100644
--- a/components/camel-joor/src/test/resources/routes/MyRoutesWithModel.java
+++ b/dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithModel.java
@@ -21,7 +21,7 @@ public class MyRoutesWithModel extends RouteBuilder {
     public void configure() throws Exception {
         rest("/say")
             .get("/emp/{id}")
-                .outType(org.apache.camel.language.joor.MyUser.class)
+                .outType(org.apache.camel.dsl.java.joor.support.MyUser.class)
                 .to("direct:getEmployee");
 
         from("direct:getEmployee")
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutesWithNestedClass.java b/dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithNestedClass.java
similarity index 100%
copy from components/camel-joor/src/test/resources/routes/MyRoutesWithNestedClass.java
copy to dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithNestedClass.java
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutesWithNestedTypes.java b/dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithNestedTypes.java
similarity index 100%
rename from components/camel-joor/src/test/resources/routes/MyRoutesWithNestedTypes.java
rename to dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithNestedTypes.java
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutesWithPackage.java b/dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithPackage.java
similarity index 100%
rename from components/camel-joor/src/test/resources/routes/MyRoutesWithPackage.java
rename to dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithPackage.java
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutesWithPackageAndComment.java b/dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithPackageAndComment.java
similarity index 100%
rename from components/camel-joor/src/test/resources/routes/MyRoutesWithPackageAndComment.java
rename to dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithPackageAndComment.java
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutesWithPackageAndLineComment.java b/dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithPackageAndLineComment.java
similarity index 100%
rename from components/camel-joor/src/test/resources/routes/MyRoutesWithPackageAndLineComment.java
rename to dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithPackageAndLineComment.java
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutesWithRestConfiguration.java b/dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithRestConfiguration.java
similarity index 100%
rename from components/camel-joor/src/test/resources/routes/MyRoutesWithRestConfiguration.java
rename to dsl/camel-java-joor-dsl/src/test/resources/routes/MyRoutesWithRestConfiguration.java
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml b/dsl/camel-xml-io-dsl/pom.xml
similarity index 56%
copy from dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml
copy to dsl/camel-xml-io-dsl/pom.xml
index 298b94c..fea3406 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml
+++ b/dsl/camel-xml-io-dsl/pom.xml
@@ -24,64 +24,50 @@
 
     <parent>
         <groupId>org.apache.camel</groupId>
-        <artifactId>camel-yaml-dsl-parent</artifactId>
+        <artifactId>dsl</artifactId>
         <version>3.9.0-SNAPSHOT</version>
     </parent>
 
-    <artifactId>camel-yaml-dsl</artifactId>
+    <artifactId>camel-xml-io-dsl</artifactId>
     <packaging>jar</packaging>
-    <name>Camel :: YAML DSL</name>
-    <description>Camel DSL with YAML</description>
+    <name>Camel :: XML DSL with camel-xml-io</name>
+    <description>Camel XML DSL with camel-xml-io</description>
 
     <properties>
         <firstVersion>3.9.0</firstVersion>
-        <sourcecheckExcludes>
-            **/*.groovy
-        </sourcecheckExcludes>
-        <sourcecheckExcludesComma>
-            ${sourcecheckExcludes},
-        </sourcecheckExcludesComma>
     </properties>
 
     <dependencies>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-yaml-dsl-common</artifactId>
-            <version>${project.version}</version>
+            <artifactId>camel-support</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-yaml-dsl-deserializers</artifactId>
-            <version>${project.version}</version>
+            <artifactId>camel-core-model</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-xml-io</artifactId>
         </dependency>
 
         <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter</artifactId>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
+            <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-main</artifactId>
             <scope>test</scope>
         </dependency>
+
         <dependency>
-            <groupId>org.spockframework</groupId>
-            <artifactId>spock-core</artifactId>
-            <version>${spock-version}</version>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core-engine</artifactId>
             <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.codehaus.groovy</groupId>
-                    <artifactId>*</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>junit</groupId>
-                    <artifactId>*</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
-
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-direct</artifactId>
@@ -124,34 +110,17 @@
         </dependency>
 
         <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy</artifactId>
-            <version>${groovy-version}</version>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy-test</artifactId>
-            <version>${groovy-version}</version>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test-junit5</artifactId>
             <scope>test</scope>
         </dependency>
 
         <dependency>
-            <groupId>com.github.java-json-tools</groupId>
-            <artifactId>json-schema-validator</artifactId>
-            <version>${json-schema-validator-version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-yaml</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-core</artifactId>
             <scope>test</scope>
@@ -173,40 +142,6 @@
         <plugins>
             <plugin>
                 <groupId>org.apache.camel</groupId>
-                <artifactId>camel-yaml-dsl-maven-plugin</artifactId>
-                <version>${project.version}</version>
-                <executions>
-                    <execution>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>generate-yaml-schema</goal>
-                        </goals>
-                        <configuration>
-                            <bannedDefinitions>
-                                <bannedDefinition>org.apache.camel.model.FromDefinition</bannedDefinition>
-                            </bannedDefinitions>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.codehaus.gmavenplus</groupId>
-                <artifactId>gmavenplus-plugin</artifactId>
-                <version>${gmavenplus-plugin-version}</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addTestSources</goal>
-                            <goal>compileTests</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.camel</groupId>
                 <artifactId>camel-package-maven-plugin</artifactId>
                 <executions>
                     <execution>
@@ -220,4 +155,17 @@
         </plugins>
     </build>
 
+    <!-- skip testing on java 8 -->
+    <profiles>
+        <profile>
+            <id>jdk8</id>
+            <activation>
+                <jdk>[,8)</jdk>
+            </activation>
+            <properties>
+                <maven.test.skip.exec>true</maven.test.skip.exec>
+            </properties>
+        </profile>
+    </profiles>
+
 </project>
\ No newline at end of file
diff --git a/core/camel-xml-io/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/xml b/dsl/camel-xml-io-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/xml
similarity index 50%
rename from core/camel-xml-io/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/xml
rename to dsl/camel-xml-io-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/xml
index 78de6b4..4497cb0 100644
--- a/core/camel-xml-io/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/xml
+++ b/dsl/camel-xml-io-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/xml
@@ -1,2 +1,2 @@
 # Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.xml.in.XmlRoutesBuilderLoader
+class=org.apache.camel.dsl.xml.io.XmlRoutesBuilderLoader
diff --git a/dsl/camel-xml-io-dsl/src/main/docs/java-xml-io-dsl.adoc b/dsl/camel-xml-io-dsl/src/main/docs/java-xml-io-dsl.adoc
new file mode 100644
index 0000000..6a7bbc9
--- /dev/null
+++ b/dsl/camel-xml-io-dsl/src/main/docs/java-xml-io-dsl.adoc
@@ -0,0 +1,11 @@
+[[xml-io-dsl-other]]
+= Xml Io Dsl Component
+:docTitle: XML Dsl
+:artifactId: camel-xml-io-dsl
+:description: Camel DSL with YAML
+:supportLevel: Stable
+include::{cq-version}@camel-quarkus:ROOT:partial$reference/others/xml-io-dsl.adoc[opts=optional]
+//Manually maintained attributes
+:group: DSL
+
+See https://camel.apache.org/manual/latest/dsl.html
\ No newline at end of file
diff --git a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/XmlRoutesBuilderLoader.java b/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
similarity index 97%
rename from core/camel-xml-io/src/main/java/org/apache/camel/xml/in/XmlRoutesBuilderLoader.java
rename to dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
index 5c50e1b..e8f2b4b 100644
--- a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/XmlRoutesBuilderLoader.java
+++ b/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.xml.in;
+package org.apache.camel.dsl.xml.io;
 
 import java.io.InputStream;
 
@@ -28,6 +28,7 @@ import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.StartupStepRecorder;
 import org.apache.camel.spi.annotations.RoutesLoader;
 import org.apache.camel.support.RoutesBuilderLoaderSupport;
+import org.apache.camel.xml.in.ModelParser;
 
 @ManagedResource(description = "Managed XML RoutesBuilderLoader")
 @RoutesLoader(XmlRoutesBuilderLoader.EXTENSION)
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlRestsTest.java b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlMainRestsTest.java
similarity index 96%
copy from core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlRestsTest.java
copy to dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlMainRestsTest.java
index 77c27b8..948d9c9 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlRestsTest.java
+++ b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlMainRestsTest.java
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.main.xml;
+package org.apache.camel.dsl.xml.io;
 
 import java.util.List;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.dsl.xml.io.support.MockRestConsumerFactory;
 import org.apache.camel.main.Main;
-import org.apache.camel.main.support.MockRestConsumerFactory;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.rest.GetVerbDefinition;
 import org.apache.camel.model.rest.RestDefinition;
@@ -31,7 +31,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-public class MainXmlRestsTest {
+public class XmlMainRestsTest {
 
     @Test
     public void testMainRestsCollector() {
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTemplateTest.java b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlMainTemplateTest.java
similarity index 95%
copy from core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTemplateTest.java
copy to dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlMainTemplateTest.java
index 847b862..50577d0 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTemplateTest.java
+++ b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlMainTemplateTest.java
@@ -14,18 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.main.xml;
+package org.apache.camel.dsl.xml.io;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.dsl.xml.io.support.MockRestConsumerFactory;
 import org.apache.camel.main.Main;
-import org.apache.camel.main.support.MockRestConsumerFactory;
 import org.apache.camel.model.ModelCamelContext;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class MainXmlTemplateTest {
+public class XmlMainTemplateTest {
 
     @Test
     public void testMainRoutesCollector() {
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTest.java b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlMainTest.java
similarity index 97%
copy from core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTest.java
copy to dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlMainTest.java
index 44ac8f3..d689c61 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTest.java
+++ b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlMainTest.java
@@ -14,18 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.main.xml;
+package org.apache.camel.dsl.xml.io;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.dsl.xml.io.support.MockRestConsumerFactory;
 import org.apache.camel.main.Main;
-import org.apache.camel.main.support.MockRestConsumerFactory;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class MainXmlTest {
+public class XmlMainTest {
 
     @Test
     public void testMainRoutesCollector() throws Exception {
diff --git a/core/camel-xml-io/src/test/java/org/apache/camel/xml/in/XmlRoutesBuilderLoaderTest.java b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoaderTest.java
similarity index 99%
copy from core/camel-xml-io/src/test/java/org/apache/camel/xml/in/XmlRoutesBuilderLoaderTest.java
copy to dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoaderTest.java
index 2b916e6..c1fe3e7 100644
--- a/core/camel-xml-io/src/test/java/org/apache/camel/xml/in/XmlRoutesBuilderLoaderTest.java
+++ b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoaderTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.xml.in;
+package org.apache.camel.dsl.xml.io;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutesWithNestedClass.java b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/support/MockRestConsumerFactory.java
similarity index 55%
copy from components/camel-joor/src/test/resources/routes/MyRoutesWithNestedClass.java
copy to dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/support/MockRestConsumerFactory.java
index e4c2944..80bc75c 100644
--- a/components/camel-joor/src/test/resources/routes/MyRoutesWithNestedClass.java
+++ b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/support/MockRestConsumerFactory.java
@@ -14,26 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.builder.RouteBuilder;
+package org.apache.camel.dsl.xml.io.support;
 
-public class MyRoutesWithNestedClass extends RouteBuilder {
-    @Override
-    public void configure() throws Exception {
-        Processor toUpper = new Processor() {
-            @Override
-            public void process(Exchange exchange) throws Exception {
-                String body = exchange.getIn().getBody(String.class);
-                body = body.toUpperCase();
+import java.util.Map;
 
-                exchange.getOut().setBody(body);
-            }
-        };
+import org.apache.camel.CamelContext;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.spi.RestConfiguration;
+import org.apache.camel.spi.RestConsumerFactory;
 
-        from("timer:tick")
-            .setBody().constant("test")
-            .process(toUpper)
-            .to("log:info");
+public final class MockRestConsumerFactory implements RestConsumerFactory {
+    @Override
+    public Consumer createConsumer(
+            CamelContext camelContext,
+            Processor processor,
+            String verb,
+            String basePath,
+            String uriTemplate,
+            String consumes,
+            String produces,
+            RestConfiguration configuration,
+            Map<String, Object> parameters) {
+        return null;
     }
-}
\ No newline at end of file
+}
diff --git a/dsl/camel-xml-io-dsl/src/test/resources/log4j2-test.properties b/dsl/camel-xml-io-dsl/src/test/resources/log4j2-test.properties
new file mode 100644
index 0000000..b8d8a73
--- /dev/null
+++ b/dsl/camel-xml-io-dsl/src/test/resources/log4j2-test.properties
@@ -0,0 +1,31 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-xml-io-dsl-test.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+
+appender.out.type = Console
+appender.out.name = out
+appender.out.layout.type = PatternLayout
+appender.out.layout.pattern = [%30.30t] %-30.30c{1} %-5p %m%n
+
+rootLogger.level = INFO
+rootLogger.appenderRef.file.ref = file
+#rootLogger.appenderRef.out.ref = out
diff --git a/core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-dummy.xml b/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/main/xml/camel-dummy.xml
similarity index 93%
copy from core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-dummy.xml
copy to dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/main/xml/camel-dummy.xml
index 901aa8d..ba9df1e 100644
--- a/core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-dummy.xml
+++ b/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/main/xml/camel-dummy.xml
@@ -17,7 +17,7 @@
     limitations under the License.
 
 -->
-<routes id="camel" xmlns="http://camel.apache.org/schema/spring">
+<routes xmlns="http://camel.apache.org/schema/spring">
     <route>
         <from uri="direct:dummy"/>
         <to uri="mock:dummy"/>
diff --git a/core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-rests.xml b/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/main/xml/camel-rests.xml
similarity index 100%
copy from core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-rests.xml
copy to dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/main/xml/camel-rests.xml
diff --git a/core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-scan.xml b/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/main/xml/camel-scan.xml
similarity index 93%
copy from core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-scan.xml
copy to dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/main/xml/camel-scan.xml
index 2e61ef3..aa6ce8e 100644
--- a/core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-scan.xml
+++ b/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/main/xml/camel-scan.xml
@@ -17,7 +17,7 @@
     limitations under the License.
 
 -->
-<routes id="camel" xmlns="http://camel.apache.org/schema/spring">
+<routes xmlns="http://camel.apache.org/schema/spring">
     <route>
         <from uri="direct:scan"/>
         <to uri="mock:scan"/>
diff --git a/core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-template.xml b/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/main/xml/camel-template.xml
similarity index 80%
copy from core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-template.xml
copy to dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/main/xml/camel-template.xml
index f626de0..0f30dc8 100644
--- a/core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-template.xml
+++ b/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/main/xml/camel-template.xml
@@ -18,8 +18,12 @@
 
 -->
 <routeTemplates xmlns="http://camel.apache.org/schema/spring">
-    <routeTemplate id="myTemplate" parameters="foo,bar">
-        <from uri="direct:{{foo}}"/>
-        <to uri="mock:{{bar}}"/>
+    <routeTemplate id="myTemplate">
+        <templateParameter name="foo"/>
+        <templateParameter name="bar"/>
+        <route>
+            <from uri="direct:{{foo}}"/>
+            <to uri="mock:{{bar}}"/>
+        </route>
     </routeTemplate>
 </routeTemplates>
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml b/dsl/camel-xml-jaxb-dsl/pom.xml
similarity index 55%
copy from dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml
copy to dsl/camel-xml-jaxb-dsl/pom.xml
index 298b94c..78a0e03 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml
+++ b/dsl/camel-xml-jaxb-dsl/pom.xml
@@ -24,64 +24,44 @@
 
     <parent>
         <groupId>org.apache.camel</groupId>
-        <artifactId>camel-yaml-dsl-parent</artifactId>
+        <artifactId>dsl</artifactId>
         <version>3.9.0-SNAPSHOT</version>
     </parent>
 
-    <artifactId>camel-yaml-dsl</artifactId>
+    <artifactId>camel-xml-jaxb-dsl</artifactId>
     <packaging>jar</packaging>
-    <name>Camel :: YAML DSL</name>
-    <description>Camel DSL with YAML</description>
+    <name>Camel :: XML DSL with camel-xml-jaxb</name>
+    <description>Camel XML DSL with acmel-xml-jaxb</description>
 
     <properties>
         <firstVersion>3.9.0</firstVersion>
-        <sourcecheckExcludes>
-            **/*.groovy
-        </sourcecheckExcludes>
-        <sourcecheckExcludesComma>
-            ${sourcecheckExcludes},
-        </sourcecheckExcludesComma>
     </properties>
 
     <dependencies>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-yaml-dsl-common</artifactId>
-            <version>${project.version}</version>
+            <artifactId>camel-support</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-yaml-dsl-deserializers</artifactId>
-            <version>${project.version}</version>
+            <artifactId>camel-core-model</artifactId>
         </dependency>
-
         <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter</artifactId>
-            <scope>test</scope>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-xml-jaxb</artifactId>
         </dependency>
+
         <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
+            <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.spockframework</groupId>
-            <artifactId>spock-core</artifactId>
-            <version>${spock-version}</version>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-main</artifactId>
             <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.codehaus.groovy</groupId>
-                    <artifactId>*</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>junit</groupId>
-                    <artifactId>*</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
-
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-direct</artifactId>
@@ -124,34 +104,17 @@
         </dependency>
 
         <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy</artifactId>
-            <version>${groovy-version}</version>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy-test</artifactId>
-            <version>${groovy-version}</version>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test-junit5</artifactId>
             <scope>test</scope>
         </dependency>
 
         <dependency>
-            <groupId>com.github.java-json-tools</groupId>
-            <artifactId>json-schema-validator</artifactId>
-            <version>${json-schema-validator-version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-yaml</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-core</artifactId>
             <scope>test</scope>
@@ -173,40 +136,6 @@
         <plugins>
             <plugin>
                 <groupId>org.apache.camel</groupId>
-                <artifactId>camel-yaml-dsl-maven-plugin</artifactId>
-                <version>${project.version}</version>
-                <executions>
-                    <execution>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>generate-yaml-schema</goal>
-                        </goals>
-                        <configuration>
-                            <bannedDefinitions>
-                                <bannedDefinition>org.apache.camel.model.FromDefinition</bannedDefinition>
-                            </bannedDefinitions>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.codehaus.gmavenplus</groupId>
-                <artifactId>gmavenplus-plugin</artifactId>
-                <version>${gmavenplus-plugin-version}</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addTestSources</goal>
-                            <goal>compileTests</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.camel</groupId>
                 <artifactId>camel-package-maven-plugin</artifactId>
                 <executions>
                     <execution>
@@ -220,4 +149,17 @@
         </plugins>
     </build>
 
+    <!-- skip testing on java 8 -->
+    <profiles>
+        <profile>
+            <id>jdk8</id>
+            <activation>
+                <jdk>[,8)</jdk>
+            </activation>
+            <properties>
+                <maven.test.skip.exec>true</maven.test.skip.exec>
+            </properties>
+        </profile>
+    </profiles>
+
 </project>
\ No newline at end of file
diff --git a/dsl/camel-xml-jaxb-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/xml b/dsl/camel-xml-jaxb-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/xml
new file mode 100644
index 0000000..a0547c8
--- /dev/null
+++ b/dsl/camel-xml-jaxb-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/xml
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.dsl.xml.jaxb.JaxbXmlRoutesBuilderLoader
diff --git a/dsl/camel-xml-jaxb-dsl/src/main/docs/java-xml-jaxb-dsl.adoc b/dsl/camel-xml-jaxb-dsl/src/main/docs/java-xml-jaxb-dsl.adoc
new file mode 100644
index 0000000..62c32db
--- /dev/null
+++ b/dsl/camel-xml-jaxb-dsl/src/main/docs/java-xml-jaxb-dsl.adoc
@@ -0,0 +1,11 @@
+[[xml-jaxb-dsl-other]]
+= Jaxb Xml Dsl Component
+:docTitle: Jaxb XML Dsl
+:artifactId: camel-xml-jaxb-dsl
+:description: Camel DSL with YAML
+:supportLevel: Stable
+include::{cq-version}@camel-quarkus:ROOT:partial$reference/others/xml-jaxb-dsl.adoc[opts=optional]
+//Manually maintained attributes
+:group: DSL
+
+See https://camel.apache.org/manual/latest/dsl.html
\ No newline at end of file
diff --git a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java b/dsl/camel-xml-jaxb-dsl/src/main/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
similarity index 99%
rename from core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
rename to dsl/camel-xml-jaxb-dsl/src/main/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
index 69f62c1..6413a23 100644
--- a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
+++ b/dsl/camel-xml-jaxb-dsl/src/main/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.xml.jaxb;
+package org.apache.camel.dsl.xml.jaxb;
 
 import java.io.InputStream;
 
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlRestsTest.java b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlMainRestsTest.java
similarity index 96%
rename from core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlRestsTest.java
rename to dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlMainRestsTest.java
index 77c27b8..7710282 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlRestsTest.java
+++ b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlMainRestsTest.java
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.main.xml;
+package org.apache.camel.dsl.xml.jaxb;
 
 import java.util.List;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.dsl.xml.jaxb.support.MockRestConsumerFactory;
 import org.apache.camel.main.Main;
-import org.apache.camel.main.support.MockRestConsumerFactory;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.rest.GetVerbDefinition;
 import org.apache.camel.model.rest.RestDefinition;
@@ -31,7 +31,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-public class MainXmlRestsTest {
+public class JaxbXmlMainRestsTest {
 
     @Test
     public void testMainRestsCollector() {
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTemplateTest.java b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlMainTemplateTest.java
similarity index 95%
rename from core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTemplateTest.java
rename to dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlMainTemplateTest.java
index 847b862..3057bae 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTemplateTest.java
+++ b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlMainTemplateTest.java
@@ -14,18 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.main.xml;
+package org.apache.camel.dsl.xml.jaxb;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.dsl.xml.jaxb.support.MockRestConsumerFactory;
 import org.apache.camel.main.Main;
-import org.apache.camel.main.support.MockRestConsumerFactory;
 import org.apache.camel.model.ModelCamelContext;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class MainXmlTemplateTest {
+public class JaxbXmlMainTemplateTest {
 
     @Test
     public void testMainRoutesCollector() {
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTest.java b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlMainTest.java
similarity index 97%
rename from core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTest.java
rename to dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlMainTest.java
index 44ac8f3..5d885ca 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/xml/MainXmlTest.java
+++ b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlMainTest.java
@@ -14,18 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.main.xml;
+package org.apache.camel.dsl.xml.jaxb;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.dsl.xml.jaxb.support.MockRestConsumerFactory;
 import org.apache.camel.main.Main;
-import org.apache.camel.main.support.MockRestConsumerFactory;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class MainXmlTest {
+public class JaxbXmlMainTest {
 
     @Test
     public void testMainRoutesCollector() throws Exception {
diff --git a/core/camel-xml-io/src/test/java/org/apache/camel/xml/in/XmlRoutesBuilderLoaderTest.java b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlRoutesBuilderLoaderTest.java
similarity index 79%
rename from core/camel-xml-io/src/test/java/org/apache/camel/xml/in/XmlRoutesBuilderLoaderTest.java
rename to dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlRoutesBuilderLoaderTest.java
index 2b916e6..6804f53 100644
--- a/core/camel-xml-io/src/test/java/org/apache/camel/xml/in/XmlRoutesBuilderLoaderTest.java
+++ b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlRoutesBuilderLoaderTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.xml.in;
+package org.apache.camel.dsl.xml.jaxb;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
@@ -23,7 +23,7 @@ import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
 
-public class XmlRoutesBuilderLoaderTest {
+public class JaxbXmlRoutesBuilderLoaderTest {
     @Test
     public void canLoadRoutes() throws Exception {
         String content = ""
@@ -39,8 +39,12 @@ public class XmlRoutesBuilderLoaderTest {
                          + "</routes>";
 
         Resource resource = Resource.fromString("in-memory.xml", content);
-        RouteBuilder builder = (RouteBuilder) new XmlRoutesBuilderLoader().loadRoutesBuilder(resource);
-        builder.setContext(new DefaultCamelContext());
+
+        JaxbXmlRoutesBuilderLoader loader = new JaxbXmlRoutesBuilderLoader();
+        loader.setCamelContext(new DefaultCamelContext());
+
+        RouteBuilder builder = (RouteBuilder) loader.loadRoutesBuilder(resource);
+        builder.setContext(loader.getCamelContext());
         builder.configure();
 
         assertFalse(builder.getRouteCollection().getRoutes().isEmpty());
@@ -58,8 +62,12 @@ public class XmlRoutesBuilderLoaderTest {
                          + "</rests>";
 
         Resource resource = Resource.fromString("in-memory.xml", content);
-        RouteBuilder builder = (RouteBuilder) new XmlRoutesBuilderLoader().loadRoutesBuilder(resource);
-        builder.setContext(new DefaultCamelContext());
+
+        JaxbXmlRoutesBuilderLoader loader = new JaxbXmlRoutesBuilderLoader();
+        loader.setCamelContext(new DefaultCamelContext());
+
+        RouteBuilder builder = (RouteBuilder) loader.loadRoutesBuilder(resource);
+        builder.setContext(loader.getCamelContext());
         builder.configure();
 
         assertFalse(builder.getRestCollection().getRests().isEmpty());
@@ -80,8 +88,12 @@ public class XmlRoutesBuilderLoaderTest {
                          + "</routeTemplates>";
 
         Resource resource = Resource.fromString("in-memory.xml", content);
-        RouteBuilder builder = (RouteBuilder) new XmlRoutesBuilderLoader().loadRoutesBuilder(resource);
-        builder.setContext(new DefaultCamelContext());
+
+        JaxbXmlRoutesBuilderLoader loader = new JaxbXmlRoutesBuilderLoader();
+        loader.setCamelContext(new DefaultCamelContext());
+
+        RouteBuilder builder = (RouteBuilder) loader.loadRoutesBuilder(resource);
+        builder.setContext(loader.getCamelContext());
         builder.configure();
 
         assertFalse(builder.getRouteTemplateCollection().getRouteTemplates().isEmpty());
diff --git a/components/camel-joor/src/test/resources/routes/MyRoutesWithNestedClass.java b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/support/MockRestConsumerFactory.java
similarity index 55%
rename from components/camel-joor/src/test/resources/routes/MyRoutesWithNestedClass.java
rename to dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/support/MockRestConsumerFactory.java
index e4c2944..6420433 100644
--- a/components/camel-joor/src/test/resources/routes/MyRoutesWithNestedClass.java
+++ b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/support/MockRestConsumerFactory.java
@@ -14,26 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.builder.RouteBuilder;
+package org.apache.camel.dsl.xml.jaxb.support;
 
-public class MyRoutesWithNestedClass extends RouteBuilder {
-    @Override
-    public void configure() throws Exception {
-        Processor toUpper = new Processor() {
-            @Override
-            public void process(Exchange exchange) throws Exception {
-                String body = exchange.getIn().getBody(String.class);
-                body = body.toUpperCase();
+import java.util.Map;
 
-                exchange.getOut().setBody(body);
-            }
-        };
+import org.apache.camel.CamelContext;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.spi.RestConfiguration;
+import org.apache.camel.spi.RestConsumerFactory;
 
-        from("timer:tick")
-            .setBody().constant("test")
-            .process(toUpper)
-            .to("log:info");
+public final class MockRestConsumerFactory implements RestConsumerFactory {
+    @Override
+    public Consumer createConsumer(
+            CamelContext camelContext,
+            Processor processor,
+            String verb,
+            String basePath,
+            String uriTemplate,
+            String consumes,
+            String produces,
+            RestConfiguration configuration,
+            Map<String, Object> parameters) {
+        return null;
     }
-}
\ No newline at end of file
+}
diff --git a/dsl/camel-xml-jaxb-dsl/src/test/resources/log4j2-test.properties b/dsl/camel-xml-jaxb-dsl/src/test/resources/log4j2-test.properties
new file mode 100644
index 0000000..5c45b64
--- /dev/null
+++ b/dsl/camel-xml-jaxb-dsl/src/test/resources/log4j2-test.properties
@@ -0,0 +1,31 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-xml-jaxb-dsl-test.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+
+appender.out.type = Console
+appender.out.name = out
+appender.out.layout.type = PatternLayout
+appender.out.layout.pattern = [%30.30t] %-30.30c{1} %-5p %m%n
+
+rootLogger.level = INFO
+rootLogger.appenderRef.file.ref = file
+#rootLogger.appenderRef.out.ref = out
diff --git a/core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-dummy.xml b/dsl/camel-xml-jaxb-dsl/src/test/resources/org/apache/camel/main/xml/camel-dummy.xml
similarity index 100%
rename from core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-dummy.xml
rename to dsl/camel-xml-jaxb-dsl/src/test/resources/org/apache/camel/main/xml/camel-dummy.xml
diff --git a/core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-rests.xml b/dsl/camel-xml-jaxb-dsl/src/test/resources/org/apache/camel/main/xml/camel-rests.xml
similarity index 100%
rename from core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-rests.xml
rename to dsl/camel-xml-jaxb-dsl/src/test/resources/org/apache/camel/main/xml/camel-rests.xml
diff --git a/core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-scan.xml b/dsl/camel-xml-jaxb-dsl/src/test/resources/org/apache/camel/main/xml/camel-scan.xml
similarity index 100%
rename from core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-scan.xml
rename to dsl/camel-xml-jaxb-dsl/src/test/resources/org/apache/camel/main/xml/camel-scan.xml
diff --git a/core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-template.xml b/dsl/camel-xml-jaxb-dsl/src/test/resources/org/apache/camel/main/xml/camel-template.xml
similarity index 80%
rename from core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-template.xml
rename to dsl/camel-xml-jaxb-dsl/src/test/resources/org/apache/camel/main/xml/camel-template.xml
index f626de0..0f30dc8 100644
--- a/core/camel-main/src/test/resources/org/apache/camel/main/xml/camel-template.xml
+++ b/dsl/camel-xml-jaxb-dsl/src/test/resources/org/apache/camel/main/xml/camel-template.xml
@@ -18,8 +18,12 @@
 
 -->
 <routeTemplates xmlns="http://camel.apache.org/schema/spring">
-    <routeTemplate id="myTemplate" parameters="foo,bar">
-        <from uri="direct:{{foo}}"/>
-        <to uri="mock:{{bar}}"/>
+    <routeTemplate id="myTemplate">
+        <templateParameter name="foo"/>
+        <templateParameter name="bar"/>
+        <route>
+            <from uri="direct:{{foo}}"/>
+            <to uri="mock:{{bar}}"/>
+        </route>
     </routeTemplate>
 </routeTemplates>
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/generated/resources/META-INF/services/org/apache/camel/other.properties b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/generated/resources/META-INF/services/org/apache/camel/other.properties
deleted file mode 100644
index 0fbee6d..0000000
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/generated/resources/META-INF/services/org/apache/camel/other.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# Generated by camel build tools - do NOT edit this file!
-name=yaml-dsl-common
-groupId=org.apache.camel
-artifactId=camel-yaml-dsl-common
-version=3.9.0-SNAPSHOT
-projectName=Camel :: YAML DSL :: Common
-projectDescription=Camel DSL with YAML Common
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml b/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml
index 298b94c..6e17776 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml
@@ -84,6 +84,11 @@
 
         <dependency>
             <groupId>org.apache.camel</groupId>
+            <artifactId>camel-main</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
             <artifactId>camel-direct</artifactId>
             <scope>test</scope>
         </dependency>
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/other.properties b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/other.properties
deleted file mode 100644
index b6c1a30..0000000
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/other.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# Generated by camel build tools - do NOT edit this file!
-name=yaml-dsl
-groupId=org.apache.camel
-artifactId=camel-yaml-dsl
-version=3.9.0-SNAPSHOT
-projectName=Camel :: YAML DSL
-projectDescription=Camel DSL with YAML
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/yaml-dsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/yaml-dsl.json
deleted file mode 100644
index 2b9161a..0000000
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/yaml-dsl.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "other": {
-    "kind": "other",
-    "name": "yaml-dsl",
-    "title": "Yaml Dsl",
-    "description": "Camel DSL with YAML",
-    "deprecated": false,
-    "firstVersion": "3.9.0",
-    "supportLevel": "Preview",
-    "groupId": "org.apache.camel",
-    "artifactId": "camel-yaml-dsl",
-    "version": "3.9.0-SNAPSHOT"
-  }
-}
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/docs/yaml-dsl.adoc b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/docs/yaml-dsl.adoc
index 080603d..95be86e 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/docs/yaml-dsl.adoc
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/docs/yaml-dsl.adoc
@@ -1,5 +1,5 @@
-[[yaml-dsl-other]]
-= Yaml Dsl Component
+[[yaml-dsl]]
+= Yaml Dsl
 :docTitle: Yaml Dsl
 :artifactId: camel-yaml-dsl
 :description: Camel DSL with YAML
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
index 1ea50f8..e313569 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
@@ -19,7 +19,11 @@ package org.apache.camel.dsl.yaml;
 import java.io.InputStream;
 import java.util.List;
 
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.RoutesBuilder;
+import org.apache.camel.StartupStep;
+import org.apache.camel.api.management.ManagedAttribute;
+import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
@@ -33,6 +37,7 @@ import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.VerbDefinition;
 import org.apache.camel.spi.CamelContextCustomizer;
 import org.apache.camel.spi.Resource;
+import org.apache.camel.spi.StartupStepRecorder;
 import org.apache.camel.spi.annotations.RoutesLoader;
 import org.apache.camel.support.RoutesBuilderLoaderSupport;
 import org.apache.camel.support.service.ServiceHelper;
@@ -40,16 +45,19 @@ import org.apache.camel.util.ObjectHelper;
 import org.snakeyaml.engine.v2.api.Load;
 import org.snakeyaml.engine.v2.api.LoadSettings;
 
+@ManagedResource(description = "Managed YAML RoutesBuilderLoader")
 @RoutesLoader(YamlRoutesBuilderLoader.EXTENSION)
 public class YamlRoutesBuilderLoader extends RoutesBuilderLoaderSupport {
     public static final String EXTENSION = "yaml";
 
     private LoadSettings settings;
     private YamlDeserializationContext constructor;
+    private StartupStepRecorder recorder;
 
     public YamlRoutesBuilderLoader() {
     }
 
+    @ManagedAttribute(description = "Supported file extension")
     @Override
     public String getSupportedExtension() {
         return EXTENSION;
@@ -59,6 +67,8 @@ public class YamlRoutesBuilderLoader extends RoutesBuilderLoaderSupport {
     protected void doBuild() throws Exception {
         super.doBuild();
 
+        this.recorder = getCamelContext().adapt(ExtendedCamelContext.class).getStartupStepRecorder();
+
         this.settings = LoadSettings.builder().build();
         this.constructor = new YamlDeserializationContext(settings);
         this.constructor.setCamelContext(getCamelContext());
@@ -92,11 +102,22 @@ public class YamlRoutesBuilderLoader extends RoutesBuilderLoaderSupport {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                Load load = new Load(settings, constructor);
+                final Load load = new Load(settings, constructor);
+
+                StartupStep step = recorder != null
+                        ? recorder.beginStep(YamlRoutesBuilderLoader.class, resource.getLocation(),
+                                "Loading and Parsing YAML routes")
+                        : null;
+
                 try (InputStream is = resource.getInputStream()) {
                     for (Object item : (List<?>) load.loadFromInputStream(is)) {
+
                         configure(item);
                     }
+                } finally {
+                    if (recorder != null) {
+                        recorder.endStep(step);
+                    }
                 }
             }
 
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/MainTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/MainTest.groovy
new file mode 100644
index 0000000..e7d9ede
--- /dev/null
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/MainTest.groovy
@@ -0,0 +1,39 @@
+/*
+ * 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.dsl.yaml
+
+
+import org.apache.camel.component.mock.MockEndpoint
+import org.apache.camel.dsl.yaml.support.MockRestConsumerFactory
+import org.apache.camel.main.Main
+import spock.lang.Specification
+
+class MainTest extends Specification {
+
+    def 'load routes with main'() {
+        given:
+            def main = new Main()
+            main.bind("restConsumerFactory", new MockRestConsumerFactory())
+            main.configure().withRoutesIncludePattern('routes/ro*.yaml')
+        when:
+            main.start()
+            main.camelContext.getEndpoint("mock:result", MockEndpoint.class).expectedBodiesReceived("Hello World")
+            main.camelTemplate.sendBody("direct:start", "Hello World")
+        then:
+            main.camelContext.getEndpoint("mock:result", MockEndpoint.class).assertIsSatisfied()
+    }
+}
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/resources/routes/routes.yaml b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/resources/routes/routes.yaml
new file mode 100644
index 0000000..6218fd3
--- /dev/null
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/resources/routes/routes.yaml
@@ -0,0 +1,20 @@
+#
+# 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.
+#
+- from:
+    uri: "direct:start"
+    steps:
+      - to: "mock:result"
\ No newline at end of file
diff --git a/dsl/pom.xml b/dsl/pom.xml
index fcc07e3..0d4b9ea 100644
--- a/dsl/pom.xml
+++ b/dsl/pom.xml
@@ -34,6 +34,9 @@
     <description>Camel DSLs Modules</description>
 
     <modules>
+        <module>camel-java-joor-dsl</module>
+        <module>camel-xml-io-dsl</module>
+        <module>camel-xml-jaxb-dsl</module>
         <module>camel-yaml-dsl</module>
     </modules>
 
diff --git a/parent/pom.xml b/parent/pom.xml
index 5476cb9..5462bf7 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -2595,55 +2595,72 @@
 			</dependency>
 			<dependency>
 				<groupId>org.apache.camel</groupId>
-				<artifactId>camel-yaml-dsl-common</artifactId>
+				<artifactId>camel-yammer</artifactId>
 				<version>${project.version}</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.camel</groupId>
-				<artifactId>camel-yaml-dsl-deserializers</artifactId>
+				<artifactId>camel-zendesk</artifactId>
 				<version>${project.version}</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.camel</groupId>
-				<artifactId>camel-yaml-dsl</artifactId>
+				<artifactId>camel-zip-deflater</artifactId>
 				<version>${project.version}</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.camel</groupId>
-				<artifactId>camel-yammer</artifactId>
+				<artifactId>camel-zipfile</artifactId>
 				<version>${project.version}</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.camel</groupId>
-				<artifactId>camel-zendesk</artifactId>
+				<artifactId>camel-zipkin</artifactId>
 				<version>${project.version}</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.camel</groupId>
-				<artifactId>camel-zip-deflater</artifactId>
+				<artifactId>camel-zookeeper-master</artifactId>
 				<version>${project.version}</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.camel</groupId>
-				<artifactId>camel-zipfile</artifactId>
+				<artifactId>camel-zookeeper</artifactId>
 				<version>${project.version}</version>
 			</dependency>
+			<!-- camel components: END -->
+
+			<!-- camel dsl -->
 			<dependency>
 				<groupId>org.apache.camel</groupId>
-				<artifactId>camel-zipkin</artifactId>
+				<artifactId>camel-java-joor-dsl</artifactId>
 				<version>${project.version}</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.camel</groupId>
-				<artifactId>camel-zookeeper-master</artifactId>
+				<artifactId>camel-yaml-dsl-common</artifactId>
 				<version>${project.version}</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.camel</groupId>
-				<artifactId>camel-zookeeper</artifactId>
+				<artifactId>camel-yaml-dsl-deserializers</artifactId>
+				<version>${project.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>org.apache.camel</groupId>
+				<artifactId>camel-xml-io-dsl</artifactId>
+				<version>${project.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>org.apache.camel</groupId>
+				<artifactId>camel-xml-jaxb-dsl</artifactId>
+				<version>${project.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>org.apache.camel</groupId>
+				<artifactId>camel-yaml-dsl</artifactId>
 				<version>${project.version}</version>
 			</dependency>
-			<!-- camel components: END -->
 
             <!-- camel catalog -->
             <dependency>