You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2019/11/28 06:47:02 UTC

[camel-k-runtime] 01/02: YAML: add annotation to auto geenrate support classes and quarkus reflective class discovery

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

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

commit 1d8d6b7b612ea3e9a0aa6448fc8b5945c6ade18c
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Tue Nov 26 16:29:07 2019 +0100

    YAML: add annotation to auto geenrate support classes and quarkus reflective class discovery
---
 .../{ => camel-k-loader-yaml-common}/pom.xml       |  89 +--------
 .../org/apache/camel/k/loader/yaml/model/Node.java |   0
 .../org/apache/camel/k/loader/yaml/model/Step.java |   4 -
 .../k/loader/yaml/parser/AggregateStepParser.java  |  11 +-
 .../camel/k/loader/yaml/parser/BeanStepParser.java |   0
 .../k/loader/yaml/parser/ChoiceStepParser.java     |   4 +-
 .../k/loader/yaml/parser/ClaimCheckStepParser.java |   0
 .../loader/yaml/parser/ConvertBodyStepParser.java  |   0
 .../k/loader/yaml/parser/DelayStepParser.java      |   5 +-
 .../yaml/parser/DynamicRouterStepParser.java       |  10 +-
 .../k/loader/yaml/parser/EnrichStepParser.java     |  10 +-
 .../k/loader/yaml/parser/FilterStepParser.java     |   9 +-
 .../camel/k/loader/yaml/parser/FromStepParser.java |   4 +-
 .../camel/k/loader/yaml/parser/LogStepParser.java  |   0
 .../camel/k/loader/yaml/parser/LoopStepParser.java |   9 +-
 .../k/loader/yaml/parser/MarshalStepParser.java    |  10 +-
 .../k/loader/yaml/parser/MulticastStepParser.java  |   9 +-
 .../k/loader/yaml/parser/PipelineStepParser.java   |   4 +-
 .../k/loader/yaml/parser/PollEnrichStepParser.java |  10 +-
 .../k/loader/yaml/parser/ProcessStepParser.java    |   0
 .../k/loader/yaml/parser/ProcessorStepParser.java  |   0
 .../yaml/parser/RecipientListStepParser.java       |  10 +-
 .../loader/yaml/parser/RemoveHeaderStepParser.java |  10 +-
 .../yaml/parser/RemoveHeadersStepParser.java       |   0
 .../yaml/parser/RemovePropertiesStepParser.java    |   0
 .../yaml/parser/RemovePropertyStepParser.java      |  10 +-
 .../k/loader/yaml/parser/ResequenceStepParser.java |   9 +-
 .../camel/k/loader/yaml/parser/RestStepParser.java |   4 +-
 .../k/loader/yaml/parser/RouteStepParser.java      |   6 +-
 .../loader/yaml/parser/RoutingSlipStepParser.java  |  10 +-
 .../k/loader/yaml/parser/SampleStepParser.java     |   9 +-
 .../k/loader/yaml/parser/SetBodyStepParser.java    |  10 +-
 .../k/loader/yaml/parser/SetHeaderStepParser.java  |  10 +-
 .../loader/yaml/parser/SetPropertyStepParser.java  |  10 +-
 .../camel/k/loader/yaml/parser/SortStepParser.java |  10 +-
 .../k/loader/yaml/parser/SplitStepParser.java      |   9 +-
 .../k/loader/yaml/parser/StartStepParser.java      |   0
 .../camel/k/loader/yaml/parser/StepParser.java     |   0
 .../k/loader/yaml/parser/StepParserException.java  |   0
 .../k/loader/yaml/parser/StepParserSupport.java    |   0
 .../camel/k/loader/yaml/parser/StopStepParser.java |   0
 .../k/loader/yaml/parser/ThreadsStepParser.java    |   0
 .../k/loader/yaml/parser/ThrottleStepParser.java   |  10 +-
 .../k/loader/yaml/parser/ToDynamicStepParser.java  |  16 +-
 .../camel/k/loader/yaml/parser/ToStepParser.java   |   5 +-
 .../k/loader/yaml/parser/TransformStepParser.java  |  10 +-
 .../k/loader/yaml/parser/UnmarshalStepParser.java  |  10 +-
 .../k/loader/yaml/parser/ValidateStepParser.java   |  10 +-
 .../k/loader/yaml/parser/WireTapStepParser.java    |  14 +-
 .../{ => camel-k-loader-yaml}/pom.xml              |  13 +-
 .../camel/k/loader/yaml/YamlSourceLoader.java      |  28 ++-
 .../camel/k/loader/yaml/DefinitionsTest.groovy     |   0
 .../apache/camel/k/loader/yaml/RoutesTest.groovy   |  14 +-
 .../apache/camel/k/loader/yaml/TestSupport.groovy  |   0
 .../k/loader/yaml/parser/AggregateTest.groovy      |   0
 .../camel/k/loader/yaml/parser/BeanTest.groovy     |   0
 .../camel/k/loader/yaml/parser/ChoiceTest.groovy   |   0
 .../k/loader/yaml/parser/ClaimCheckTest.groovy     |   0
 .../k/loader/yaml/parser/ConvertBodyTest.groovy    |   0
 .../camel/k/loader/yaml/parser/DelayTest.groovy    |   0
 .../k/loader/yaml/parser/DynamicRouterTest.groovy  |   0
 .../camel/k/loader/yaml/parser/EnrichTest.groovy   |   0
 .../camel/k/loader/yaml/parser/FilterTest.groovy   |   0
 .../camel/k/loader/yaml/parser/FromTest.groovy     |   0
 .../camel/k/loader/yaml/parser/LogTest.groovy      |   0
 .../camel/k/loader/yaml/parser/LoopTest.groovy     |   0
 .../camel/k/loader/yaml/parser/MarshalTest.groovy  |   0
 .../k/loader/yaml/parser/MulticastTest.groovy      |   0
 .../camel/k/loader/yaml/parser/PipelineTest.groovy |   2 +-
 .../k/loader/yaml/parser/PollEnrichTest.groovy     |   0
 .../camel/k/loader/yaml/parser/ProcessTest.groovy  |   0
 .../k/loader/yaml/parser/RecipientListTest.groovy  |   0
 .../k/loader/yaml/parser/RemoveHeaderTest.groovy   |   0
 .../k/loader/yaml/parser/RemoveHeadersTest.groovy  |   0
 .../loader/yaml/parser/RemovePropertiesTest.groovy |   0
 .../k/loader/yaml/parser/RemovePropertyTest.groovy |   0
 .../k/loader/yaml/parser/ResequenceTest.groovy     |   0
 .../camel/k/loader/yaml/parser/RestTest.groovy     |   0
 .../k/loader/yaml/parser/RoutingSlipTest.groovy    |   0
 .../camel/k/loader/yaml/parser/SampleTest.groovy   |   0
 .../camel/k/loader/yaml/parser/SetBodyTest.groovy  |   0
 .../k/loader/yaml/parser/SetHeaderTest.groovy      |   0
 .../k/loader/yaml/parser/SetPropertyTest.groovy    |   0
 .../camel/k/loader/yaml/parser/SortTest.groovy     |   0
 .../camel/k/loader/yaml/parser/SplitTest.groovy    |   0
 .../camel/k/loader/yaml/parser/ThreadsTest.groovy  |   0
 .../camel/k/loader/yaml/parser/ThrottleTest.groovy |   0
 .../k/loader/yaml/parser/ToDynamicTest.groovy      |   4 +-
 .../camel/k/loader/yaml/parser/ToTest.groovy       |   0
 .../k/loader/yaml/parser/UnmarshalTest.groovy      |   0
 .../camel/k/loader/yaml/parser/ValidateTest.groovy |   0
 .../camel/k/loader/yaml/parser/WireTapTest.groovy  |   0
 .../src/test/resources/log4j2-test.xml             |   0
 .../resources/routes/RoutesTest_aggregator.yaml    |   0
 .../test/resources/routes/RoutesTest_filter.yaml   |   0
 .../test/resources/routes/RoutesTest_split.yaml    |   0
 camel-k-loader-yaml/pom.xml                        | 208 +--------------------
 .../yaml/support/ProcessorDefinitionMixIn.java     |  43 -----
 .../quarkus/deployment/DeploymentProcessor.java    |  51 ++++-
 camel-k-runtime-bom/pom.xml                        |  10 +
 pom.xml                                            |   5 +
 tooling/camel-k-annotations/pom.xml                |   8 +
 ...YAMLStepParser.java => YAMLNodeDefinition.java} |   8 +-
 .../camel/k/annotation/yaml/YAMLStepParser.java    |   2 +-
 .../maven/GenerateYamlLoaderSupportClasses.java    | 127 +++++++++++++
 ....java => GenerateYamlParserSupportClasses.java} | 139 +-------------
 .../camel/k/tooling/maven/GenerateYamlSupport.java | 138 ++++++++++++++
 .../processors/GenerateYamlSupportClassesTest.java |   9 +-
 108 files changed, 499 insertions(+), 690 deletions(-)

diff --git a/camel-k-loader-yaml/pom.xml b/camel-k-loader-yaml/camel-k-loader-yaml-common/pom.xml
similarity index 65%
copy from camel-k-loader-yaml/pom.xml
copy to camel-k-loader-yaml/camel-k-loader-yaml-common/pom.xml
index 9a6016d..24ecb66 100644
--- a/camel-k-loader-yaml/pom.xml
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/pom.xml
@@ -20,12 +20,12 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <groupId>org.apache.camel.k</groupId>
-        <artifactId>camel-k-runtime-parent</artifactId>
+        <artifactId>camel-k-loader-yaml-parent</artifactId>
         <version>1.0.8-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-k-loader-yaml</artifactId>
+    <artifactId>camel-k-loader-yaml-common</artifactId>
 
     <dependencies>
 
@@ -65,89 +65,6 @@
             <artifactId>camel-k-annotations</artifactId>
             <optional>true</optional>
         </dependency>
-
-        <!-- ****************************** -->
-        <!--                                -->
-        <!-- TESTS                          -->
-        <!--                                -->
-        <!-- ****************************** -->
-
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-mock</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-direct</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-log</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-bean</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy-test</artifactId>
-            <version>${groovy.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.spockframework</groupId>
-            <artifactId>spock-core</artifactId>
-            <version>${spock.version}</version>
-            <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.junit.vintage</groupId>
-            <artifactId>junit-vintage-engine</artifactId>
-            <version>${junit.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
-            <version>${assertj.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-core</artifactId>
-            <version>${log4j2.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-slf4j-impl</artifactId>
-            <version>${log4j2.version}</version>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
 
     <build>
@@ -178,7 +95,7 @@
                     <execution>
                         <phase>generate-sources</phase>
                         <goals>
-                            <goal>generate-yaml-support-classes</goal>
+                            <goal>generate-yaml-parser-support-classes</goal>
                         </goals>
                     </execution>
                 </executions>
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/model/Node.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/model/Node.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/model/Node.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/model/Node.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/model/Step.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/model/Step.java
similarity index 97%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/model/Step.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/model/Step.java
index 7298fad..1d1ac16 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/model/Step.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/model/Step.java
@@ -59,8 +59,4 @@ public final class Step {
             return new Step(stepId, stepData);
         }
     }
-
-    // marker interface
-    public interface Definition {
-    }
 }
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/AggregateStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/AggregateStepParser.java
similarity index 90%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/AggregateStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/AggregateStepParser.java
index 52b192b..4feff93 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/AggregateStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/AggregateStepParser.java
@@ -18,27 +18,23 @@ package org.apache.camel.k.loader.yaml.parser;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.apache.camel.Expression;
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.AggregateDefinition;
 import org.apache.camel.model.ExpressionSubElementDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.reifier.AggregateReifier;
-import org.apache.camel.reifier.ProcessorReifier;
 
 @YAMLStepParser("aggregate")
 public class AggregateStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, AggregateReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends AggregateDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = AggregateReifier.class)
+    public static final class Definition extends AggregateDefinition implements HasExpression {
         @JsonIgnore
         public void setExpression(Expression expression) {
             super.setExpression(expression);
@@ -49,6 +45,7 @@ public class AggregateStepParser implements ProcessorStepParser {
         }
     }
 
+    @YAMLNodeDefinition
     public static final class CorrelationExpression extends ExpressionSubElementDefinition implements HasExpression {
         @Override
         public void setExpression(ExpressionDefinition expressionDefinition) {
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/BeanStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/BeanStepParser.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/BeanStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/BeanStepParser.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ChoiceStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ChoiceStepParser.java
similarity index 95%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ChoiceStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ChoiceStepParser.java
index e77355c..44f4665 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ChoiceStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ChoiceStepParser.java
@@ -18,6 +18,7 @@ package org.apache.camel.k.loader.yaml.parser;
 
 import java.util.List;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ChoiceDefinition;
@@ -57,7 +58,8 @@ public class ChoiceStepParser implements ProcessorStepParser {
         return choice;
     }
 
-    public static final class Definition implements Step.Definition {
+    @YAMLNodeDefinition
+    public static final class Definition {
         public List<When> when;
         public Otherwise otherwise;
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ClaimCheckStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ClaimCheckStepParser.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ClaimCheckStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ClaimCheckStepParser.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ConvertBodyStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ConvertBodyStepParser.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ConvertBodyStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ConvertBodyStepParser.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/DelayStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/DelayStepParser.java
similarity index 91%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/DelayStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/DelayStepParser.java
index f76519d..6d34875 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/DelayStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/DelayStepParser.java
@@ -16,8 +16,8 @@
  */
 package org.apache.camel.k.loader.yaml.parser;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.DelayDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.DelayReifier;
@@ -34,7 +34,8 @@ public class DelayStepParser implements ProcessorStepParser {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends DelayDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = DelayReifier.class)
+    public static final class Definition extends DelayDefinition implements HasExpression {
     }
 }
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/DynamicRouterStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/DynamicRouterStepParser.java
similarity index 84%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/DynamicRouterStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/DynamicRouterStepParser.java
index 89c1063..2ddc5ae 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/DynamicRouterStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/DynamicRouterStepParser.java
@@ -16,25 +16,21 @@
  */
 package org.apache.camel.k.loader.yaml.parser;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.DynamicRouterDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.DynamicRouterReifier;
-import org.apache.camel.reifier.ProcessorReifier;
 
 @YAMLStepParser("dynamic-router")
 public class DynamicRouterStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, DynamicRouterReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends DynamicRouterDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = DynamicRouterReifier.class)
+    public static final class Definition extends DynamicRouterDefinition implements HasExpression {
     }
 }
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/EnrichStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/EnrichStepParser.java
similarity index 88%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/EnrichStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/EnrichStepParser.java
index 6108a8c..ff06a9d 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/EnrichStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/EnrichStepParser.java
@@ -18,25 +18,21 @@ package org.apache.camel.k.loader.yaml.parser;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.apache.camel.Expression;
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.EnrichDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.EnrichReifier;
-import org.apache.camel.reifier.ProcessorReifier;
 
 @YAMLStepParser("enrich")
 public class EnrichStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, EnrichReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends EnrichDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = EnrichReifier.class)
+    public static final class Definition extends EnrichDefinition implements HasExpression {
         @JsonIgnore
         public void setExpression(Expression expression) {
             super.setExpression(expression);
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/FilterStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/FilterStepParser.java
similarity index 89%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/FilterStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/FilterStepParser.java
index 8a1ae2a..650e526 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/FilterStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/FilterStepParser.java
@@ -18,19 +18,15 @@ package org.apache.camel.k.loader.yaml.parser;
 
 import java.util.List;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.FilterDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.FilterReifier;
-import org.apache.camel.reifier.ProcessorReifier;
 
 @YAMLStepParser("filter")
 public class FilterStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, FilterReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         Definition definition = context.node(Definition.class);
@@ -42,7 +38,8 @@ public class FilterStepParser implements ProcessorStepParser {
         );
     }
 
-    public static final class Definition extends FilterDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = FilterReifier.class)
+    public static final class Definition extends FilterDefinition implements HasExpression {
         public List<Step> steps;
     }
 }
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/FromStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/FromStepParser.java
similarity index 94%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/FromStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/FromStepParser.java
index 7d99e75..7607f2b 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/FromStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/FromStepParser.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
@@ -46,7 +47,8 @@ public class FromStepParser implements StartStepParser {
         );
     }
 
-    public static final class FromStepDefinition implements Step.Definition {
+    @YAMLNodeDefinition
+    public static final class FromStepDefinition {
         public String uri;
         public Map<String, Object> parameters;
         public List<Step> steps;
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/LogStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/LogStepParser.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/LogStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/LogStepParser.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/LoopStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/LoopStepParser.java
similarity index 89%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/LoopStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/LoopStepParser.java
index 9735404..e05af6f 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/LoopStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/LoopStepParser.java
@@ -18,19 +18,15 @@ package org.apache.camel.k.loader.yaml.parser;
 
 import java.util.List;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.LoopDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.LoopReifier;
-import org.apache.camel.reifier.ProcessorReifier;
 
 @YAMLStepParser("loop")
 public class LoopStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, LoopReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         Definition definition = context.node(Definition.class);
@@ -42,7 +38,8 @@ public class LoopStepParser implements ProcessorStepParser {
         );
     }
 
-    public static final class Definition extends LoopDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = LoopReifier.class)
+    public static final class Definition extends LoopDefinition implements HasExpression {
         public List<Step> steps;
     }
 }
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/MarshalStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/MarshalStepParser.java
similarity index 84%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/MarshalStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/MarshalStepParser.java
index c63b58b..d39f3a2 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/MarshalStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/MarshalStepParser.java
@@ -16,25 +16,21 @@
  */
 package org.apache.camel.k.loader.yaml.parser;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.MarshalDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.MarshalReifier;
-import org.apache.camel.reifier.ProcessorReifier;
 
 @YAMLStepParser("marshal")
 public class MarshalStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, MarshalReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends MarshalDefinition implements HasDataFormat, Step.Definition {
+    @YAMLNodeDefinition(reifiers = MarshalReifier.class)
+    public static final class Definition extends MarshalDefinition implements HasDataFormat {
     }
 }
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/MulticastStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/MulticastStepParser.java
similarity index 89%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/MulticastStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/MulticastStepParser.java
index edc43f2..98a7ffd 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/MulticastStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/MulticastStepParser.java
@@ -18,19 +18,15 @@ package org.apache.camel.k.loader.yaml.parser;
 
 import java.util.List;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.MulticastDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.MulticastReifier;
-import org.apache.camel.reifier.ProcessorReifier;
 
 @YAMLStepParser("multicast")
 public class MulticastStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, MulticastReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         Definition definition = context.node(Definition.class);
@@ -42,7 +38,8 @@ public class MulticastStepParser implements ProcessorStepParser {
         );
     }
 
-    public static final class Definition extends MulticastDefinition implements Step.Definition {
+    @YAMLNodeDefinition(reifiers = MulticastReifier.class)
+    public static final class Definition extends MulticastDefinition {
         public List<Step> steps;
     }
 }
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/PipelineStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/PipelineStepParser.java
similarity index 92%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/PipelineStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/PipelineStepParser.java
index edbca96..1b1393a 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/PipelineStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/PipelineStepParser.java
@@ -18,6 +18,7 @@ package org.apache.camel.k.loader.yaml.parser;
 
 import java.util.List;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.PipelineDefinition;
@@ -39,7 +40,8 @@ public class PipelineStepParser implements ProcessorStepParser {
         );
     }
 
-    public static final class Definition implements Step.Definition {
+    @YAMLNodeDefinition
+    public static final class Definition {
         public List<Step> steps;
     }
 }
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/PollEnrichStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/PollEnrichStepParser.java
similarity index 87%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/PollEnrichStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/PollEnrichStepParser.java
index 4f24db3..88e0ec7 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/PollEnrichStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/PollEnrichStepParser.java
@@ -18,25 +18,21 @@ package org.apache.camel.k.loader.yaml.parser;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.apache.camel.Expression;
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.PollEnrichDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.PollEnrichReifier;
-import org.apache.camel.reifier.ProcessorReifier;
 
 @YAMLStepParser("poll-enrich")
 public class PollEnrichStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, PollEnrichReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends PollEnrichDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = PollEnrichReifier.class)
+    public static final class Definition extends PollEnrichDefinition implements HasExpression {
         @JsonIgnore
         public void setExpression(Expression expression) {
             super.setExpression(expression);
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ProcessStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ProcessStepParser.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ProcessStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ProcessStepParser.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ProcessorStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ProcessorStepParser.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ProcessorStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ProcessorStepParser.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RecipientListStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RecipientListStepParser.java
similarity index 84%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RecipientListStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RecipientListStepParser.java
index 10eeebe..f0fbccf 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RecipientListStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RecipientListStepParser.java
@@ -16,25 +16,21 @@
  */
 package org.apache.camel.k.loader.yaml.parser;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RecipientListDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.RecipientListReifier;
 
 @YAMLStepParser("recipient-list")
 public class RecipientListStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, RecipientListReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends RecipientListDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = RecipientListReifier.class)
+    public static final class Definition extends RecipientListDefinition implements HasExpression {
     }
 }
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RemoveHeaderStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemoveHeaderStepParser.java
similarity index 87%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RemoveHeaderStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemoveHeaderStepParser.java
index 242f68f..86f07f9 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RemoveHeaderStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemoveHeaderStepParser.java
@@ -17,25 +17,21 @@
 package org.apache.camel.k.loader.yaml.parser;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RemoveHeaderDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.RemoveHeaderReifier;
 
 @YAMLStepParser("remove-header")
 public class RemoveHeaderStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, RemoveHeaderReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends RemoveHeaderDefinition implements Step.Definition {
+    @YAMLNodeDefinition(reifiers = RemoveHeaderReifier.class)
+    public static final class Definition extends RemoveHeaderDefinition {
         @JsonAlias("name")
         public void setHeaderName(String headerName) {
             super.setHeaderName(headerName);
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RemoveHeadersStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemoveHeadersStepParser.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RemoveHeadersStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemoveHeadersStepParser.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RemovePropertiesStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemovePropertiesStepParser.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RemovePropertiesStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemovePropertiesStepParser.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RemovePropertyStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemovePropertyStepParser.java
similarity index 87%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RemovePropertyStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemovePropertyStepParser.java
index 27dfcd0..947f36f 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RemovePropertyStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemovePropertyStepParser.java
@@ -17,25 +17,21 @@
 package org.apache.camel.k.loader.yaml.parser;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RemovePropertyDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.RemovePropertyReifier;
 
 @YAMLStepParser("remove-property")
 public class RemovePropertyStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, RemovePropertyReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends RemovePropertyDefinition implements Step.Definition {
+    @YAMLNodeDefinition(reifiers = RemovePropertyReifier.class)
+    public static final class Definition extends RemovePropertyDefinition {
         @JsonAlias("name")
         public void setPropertyName(String headerName) {
             super.setPropertyName(headerName);
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ResequenceStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ResequenceStepParser.java
similarity index 92%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ResequenceStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ResequenceStepParser.java
index 400fffe..de1cce1 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ResequenceStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ResequenceStepParser.java
@@ -21,21 +21,17 @@ import java.util.List;
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.apache.camel.Expression;
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ResequenceDefinition;
 import org.apache.camel.model.config.BatchResequencerConfig;
 import org.apache.camel.model.config.StreamResequencerConfig;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.ResequenceReifier;
 
 @YAMLStepParser("resequence")
 public class ResequenceStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, ResequenceReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         Definition definition = context.node(Definition.class);
@@ -47,7 +43,8 @@ public class ResequenceStepParser implements ProcessorStepParser {
         );
     }
 
-    public static final class Definition extends ResequenceDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = ResequenceReifier.class)
+    public static final class Definition extends ResequenceDefinition implements HasExpression {
         public List<Step> steps;
 
         @JsonIgnore
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RestStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RestStepParser.java
similarity index 96%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RestStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RestStepParser.java
index 1730d9f..978cfed 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RestStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RestStepParser.java
@@ -21,6 +21,7 @@ import java.util.List;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonSetter;
 import com.fasterxml.jackson.annotation.Nulls;
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
@@ -57,7 +58,8 @@ public class RestStepParser implements StartStepParser {
         );
     }
 
-    public static final class Definition implements Step.Definition {
+    @YAMLNodeDefinition
+    public static final class Definition {
         @JsonProperty
         public String id;
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RouteStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RouteStepParser.java
similarity index 95%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RouteStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RouteStepParser.java
index ff363d2..3b8dfaf 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RouteStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RouteStepParser.java
@@ -21,10 +21,9 @@ import java.util.Optional;
 import com.fasterxml.jackson.annotation.JsonAnySetter;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.databind.JsonNode;
-
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
 import org.apache.camel.k.loader.yaml.model.Node;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RouteDefinition;
 
@@ -51,7 +50,8 @@ public class RouteStepParser implements StartStepParser {
         return root;
     }
 
-    public static final class Definition implements Step.Definition {
+    @YAMLNodeDefinition
+    public static final class Definition {
         private String id;
         private String group;
         private Node root;
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RoutingSlipStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RoutingSlipStepParser.java
similarity index 85%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RoutingSlipStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RoutingSlipStepParser.java
index 83522b4..4e43cb1 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/RoutingSlipStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RoutingSlipStepParser.java
@@ -17,25 +17,21 @@
 package org.apache.camel.k.loader.yaml.parser;
 
 import org.apache.camel.Expression;
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RoutingSlipDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.RoutingSlipReifier;
 
 @YAMLStepParser("routing-slip")
 public class RoutingSlipStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, RoutingSlipReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends RoutingSlipDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = RoutingSlipReifier.class)
+    public static final class Definition extends RoutingSlipDefinition implements HasExpression {
         public Definition() {
             super((Expression) null, RoutingSlipDefinition.DEFAULT_DELIMITER);
         }
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SampleStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SampleStepParser.java
similarity index 89%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SampleStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SampleStepParser.java
index a65c355..6cba016 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SampleStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SampleStepParser.java
@@ -18,19 +18,15 @@ package org.apache.camel.k.loader.yaml.parser;
 
 import java.util.List;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SamplingDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.SamplingReifier;
 
 @YAMLStepParser("sample")
 public class SampleStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, SamplingReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         Definition definition = context.node(Definition.class);
@@ -42,7 +38,8 @@ public class SampleStepParser implements ProcessorStepParser {
         );
     }
 
-    public static final class Definition extends SamplingDefinition implements Step.Definition {
+    @YAMLNodeDefinition(reifiers = SamplingReifier.class)
+    public static final class Definition extends SamplingDefinition {
         public List<Step> steps;
     }
 }
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SetBodyStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SetBodyStepParser.java
similarity index 84%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SetBodyStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SetBodyStepParser.java
index fb34b25..a879b9f 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SetBodyStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SetBodyStepParser.java
@@ -16,25 +16,21 @@
  */
 package org.apache.camel.k.loader.yaml.parser;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetBodyDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.SetBodyReifier;
 
 @YAMLStepParser("set-body")
 public class SetBodyStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, SetBodyReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends SetBodyDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = SetBodyReifier.class)
+    public static final class Definition extends SetBodyDefinition implements HasExpression {
     }
 }
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SetHeaderStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SetHeaderStepParser.java
similarity index 84%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SetHeaderStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SetHeaderStepParser.java
index 6e505d8..4d3987e 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SetHeaderStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SetHeaderStepParser.java
@@ -16,25 +16,21 @@
  */
 package org.apache.camel.k.loader.yaml.parser;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetHeaderDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.SetHeaderReifier;
 
 @YAMLStepParser("set-header")
 public class SetHeaderStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, SetHeaderReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends SetHeaderDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = SetHeaderReifier.class)
+    public static final class Definition extends SetHeaderDefinition implements HasExpression {
     }
 }
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SetPropertyStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SetPropertyStepParser.java
similarity index 84%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SetPropertyStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SetPropertyStepParser.java
index 6d1d580..d55445b 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SetPropertyStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SetPropertyStepParser.java
@@ -16,25 +16,21 @@
  */
 package org.apache.camel.k.loader.yaml.parser;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetPropertyDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.SetPropertyReifier;
 
 @YAMLStepParser("set-property")
 public class SetPropertyStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, SetPropertyReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends SetPropertyDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = SetPropertyReifier.class)
+    public static final class Definition extends SetPropertyDefinition implements HasExpression {
     }
 }
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SortStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SortStepParser.java
similarity index 84%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SortStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SortStepParser.java
index 449b275..be6fe23 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SortStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SortStepParser.java
@@ -16,25 +16,21 @@
  */
 package org.apache.camel.k.loader.yaml.parser;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SortDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.SortReifier;
 
 @YAMLStepParser("sort")
 public class SortStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, SortReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends SortDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = SortReifier.class)
+    public static final class Definition extends SortDefinition implements HasExpression {
     }
 }
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SplitStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SplitStepParser.java
similarity index 89%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SplitStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SplitStepParser.java
index b39a524..e641ad9 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/SplitStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SplitStepParser.java
@@ -18,19 +18,15 @@ package org.apache.camel.k.loader.yaml.parser;
 
 import java.util.List;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SplitDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.SplitReifier;
 
 @YAMLStepParser("split")
 public class SplitStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, SplitReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         Definition definition = context.node(Definition.class);
@@ -41,7 +37,8 @@ public class SplitStepParser implements ProcessorStepParser {
             definition.steps);
     }
 
-    public static final class Definition extends SplitDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = SplitReifier.class)
+    public static final class Definition extends SplitDefinition implements HasExpression {
         public List<Step> steps;
     }
 }
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/StartStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StartStepParser.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/StartStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StartStepParser.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/StepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StepParser.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/StepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StepParser.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/StepParserException.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StepParserException.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/StepParserException.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StepParserException.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/StepParserSupport.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StepParserSupport.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/StepParserSupport.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StepParserSupport.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/StopStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StopStepParser.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/StopStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StopStepParser.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ThreadsStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ThreadsStepParser.java
similarity index 100%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ThreadsStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ThreadsStepParser.java
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ThrottleStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ThrottleStepParser.java
similarity index 84%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ThrottleStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ThrottleStepParser.java
index a5ef353..b2ee2ac 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ThrottleStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ThrottleStepParser.java
@@ -16,25 +16,21 @@
  */
 package org.apache.camel.k.loader.yaml.parser;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ThrottleDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.ThrottleReifier;
 
 @YAMLStepParser("throttle")
 public class ThrottleStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, ThrottleReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends ThrottleDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = ThrottleReifier.class)
+    public static final class Definition extends ThrottleDefinition implements HasExpression {
     }
 }
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ToDynamicStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToDynamicStepParser.java
similarity index 86%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ToDynamicStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToDynamicStepParser.java
index 465bbe3..21ab519 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ToDynamicStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToDynamicStepParser.java
@@ -21,26 +21,24 @@ import java.net.URISyntaxException;
 import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ToDynamicDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
-import org.apache.camel.reifier.ToDynamicReifier;
 import org.apache.camel.util.URISupport;
 
 @YAMLStepParser("tod")
 public class ToDynamicStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, ToDynamicReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
-        return context.node(Definition.class);
+        final Definition definition = context.node(Definition.class);
+        final ToDynamicDefinition answer = new ToDynamicDefinition(definition.getEndpointUri());
+
+        return answer;
     }
 
-    public static final class Definition extends ToDynamicDefinition implements Step.Definition {
+    @YAMLNodeDefinition
+    public static final class Definition extends ToDynamicDefinition {
         public Map<String, Object> parameters;
 
         public Definition() {
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ToStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToStepParser.java
similarity index 93%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ToStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToStepParser.java
index 4125bf2..ad2d4bf 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ToStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToStepParser.java
@@ -21,8 +21,8 @@ import java.net.URISyntaxException;
 import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ToDefinition;
 import org.apache.camel.util.URISupport;
@@ -37,7 +37,8 @@ public class ToStepParser implements ProcessorStepParser {
         return answer;
     }
 
-    public static final class Definition extends ToDefinition implements Step.Definition {
+    @YAMLNodeDefinition
+    public static final class Definition extends ToDefinition {
         public Map<String, Object> parameters;
 
         public Definition() {
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/TransformStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/TransformStepParser.java
similarity index 84%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/TransformStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/TransformStepParser.java
index aad73da..c09c99c 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/TransformStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/TransformStepParser.java
@@ -16,25 +16,21 @@
  */
 package org.apache.camel.k.loader.yaml.parser;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.TransformDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.TransformReifier;
 
 @YAMLStepParser("transform")
 public class TransformStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, TransformReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends TransformDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = TransformReifier.class)
+    public static final class Definition extends TransformDefinition implements HasExpression {
     }
 }
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/UnmarshalStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/UnmarshalStepParser.java
similarity index 84%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/UnmarshalStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/UnmarshalStepParser.java
index 8ce06f9..d4b0e90 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/UnmarshalStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/UnmarshalStepParser.java
@@ -16,25 +16,21 @@
  */
 package org.apache.camel.k.loader.yaml.parser;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.UnmarshalDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.UnmarshalReifier;
 
 @YAMLStepParser("unmarshal")
 public class UnmarshalStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, UnmarshalReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends UnmarshalDefinition implements HasDataFormat, Step.Definition {
+    @YAMLNodeDefinition(reifiers = UnmarshalReifier.class)
+    public static final class Definition extends UnmarshalDefinition implements HasDataFormat {
     }
 }
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ValidateStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ValidateStepParser.java
similarity index 84%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ValidateStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ValidateStepParser.java
index a6e325c..ca0740a 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/ValidateStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ValidateStepParser.java
@@ -16,25 +16,21 @@
  */
 package org.apache.camel.k.loader.yaml.parser;
 
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ValidateDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.ValidateReifier;
 
 @YAMLStepParser("validate")
 public class ValidateStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, ValidateReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
     }
 
-    public static final class Definition extends ValidateDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition(reifiers = ValidateReifier.class)
+    public static final class Definition extends ValidateDefinition implements HasExpression {
     }
 }
 
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/WireTapStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/WireTapStepParser.java
similarity index 93%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/WireTapStepParser.java
rename to camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/WireTapStepParser.java
index b9aa194..a47fcac 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/parser/WireTapStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/WireTapStepParser.java
@@ -22,25 +22,20 @@ import java.util.List;
 import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.model.ExpressionSubElementDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetHeaderDefinition;
 import org.apache.camel.model.ToDynamicDefinition;
 import org.apache.camel.model.WireTapDefinition;
 import org.apache.camel.model.language.ExpressionDefinition;
-import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.reifier.WireTapReifier;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
 
 @YAMLStepParser("wiretap")
 public class WireTapStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, WireTapReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         Definition definition = context.node(Definition.class);
@@ -65,7 +60,8 @@ public class WireTapStepParser implements ProcessorStepParser {
         return answer;
     }
 
-    public static final class Definition extends ToDynamicDefinition implements Step.Definition {
+    @YAMLNodeDefinition(reifiers = WireTapReifier.class)
+    public static final class Definition extends ToDynamicDefinition {
         public String processorRef;
         public String executorServiceRef;
         public String onPrepareRef;
@@ -90,6 +86,7 @@ public class WireTapStepParser implements ProcessorStepParser {
         }
     }
 
+    @YAMLNodeDefinition
     public static final class NewExchangeDefinition extends ExpressionSubElementDefinition implements HasExpression {
         public List<HeaderDefinition> headers;
 
@@ -104,7 +101,8 @@ public class WireTapStepParser implements ProcessorStepParser {
         }
     }
 
-    public static final class HeaderDefinition extends SetHeaderDefinition implements HasExpression, Step.Definition {
+    @YAMLNodeDefinition
+    public static final class HeaderDefinition extends SetHeaderDefinition implements HasExpression {
     }
 }
 
diff --git a/camel-k-loader-yaml/pom.xml b/camel-k-loader-yaml/camel-k-loader-yaml/pom.xml
similarity index 95%
copy from camel-k-loader-yaml/pom.xml
copy to camel-k-loader-yaml/camel-k-loader-yaml/pom.xml
index 9a6016d..b87b43d 100644
--- a/camel-k-loader-yaml/pom.xml
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/pom.xml
@@ -20,7 +20,7 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <groupId>org.apache.camel.k</groupId>
-        <artifactId>camel-k-runtime-parent</artifactId>
+        <artifactId>camel-k-loader-yaml-parent</artifactId>
         <version>1.0.8-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
@@ -39,6 +39,10 @@
             <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-runtime-core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-loader-yaml-common</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>org.apache.camel</groupId>
@@ -178,7 +182,7 @@
                     <execution>
                         <phase>generate-sources</phase>
                         <goals>
-                            <goal>generate-yaml-support-classes</goal>
+                            <goal>generate-yaml-loader-support-classes</goal>
                         </goals>
                     </execution>
                 </executions>
@@ -189,11 +193,6 @@
                         <version>${javapoet.version}</version>
                     </dependency>
                     <dependency>
-                        <groupId>org.apache.camel</groupId>
-                        <artifactId>camel-core-engine</artifactId>
-                        <version>${camel.version}</version>
-                    </dependency>
-                    <dependency>
                         <groupId>org.apache.commons</groupId>
                         <artifactId>commons-text</artifactId>
                         <version>${commons-text.version}</version>
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java b/camel-k-loader-yaml/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java
similarity index 83%
rename from camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java
index 5b15828..c186c44 100644
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java
@@ -20,7 +20,10 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
+import java.util.function.Supplier;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.MapperFeature;
@@ -30,6 +33,7 @@ import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
 import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.k.Runtime;
 import org.apache.camel.k.Source;
@@ -38,7 +42,9 @@ import org.apache.camel.k.annotation.Loader;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.k.loader.yaml.parser.StartStepParser;
 import org.apache.camel.k.loader.yaml.parser.StepParser;
-import org.apache.camel.k.loader.yaml.support.ProcessorDefinitionMixIn;
+import org.apache.camel.model.Block;
+import org.apache.camel.model.OptionalIdentifiedDefinition;
+import org.apache.camel.model.OtherAttributesAware;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RoutesDefinition;
@@ -48,6 +54,10 @@ import org.apache.camel.model.rest.RestsDefinition;
 
 @Loader("yaml")
 public class YamlSourceLoader implements SourceLoader {
+    static {
+        YamlReifiers.registerReifiers();
+    }
+
     private final ObjectMapper mapper;
 
     public YamlSourceLoader() {
@@ -128,4 +138,20 @@ public class YamlSourceLoader implements SourceLoader {
             }
         };
     }
+
+    /**
+     * ProcessorDefinition declares multiple methods for setBody and Jackson get confused
+     * about what method to use so to hide such fields from the deserialization process
+     * without having to change the original class, a MixIn is required.
+     */
+    public abstract static class ProcessorDefinitionMixIn<Type extends ProcessorDefinition<Type>>
+        extends OptionalIdentifiedDefinition<Type>
+        implements Block, OtherAttributesAware {
+
+        @JsonIgnore
+        public abstract <Result> Type setBody(Supplier<Result> supplier);
+
+        @JsonIgnore
+        public abstract <Result> Type setBody(Function<Exchange, Result> function);
+    }
 }
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/DefinitionsTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/DefinitionsTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/DefinitionsTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/DefinitionsTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesTest.groovy
similarity index 83%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesTest.groovy
index 23fd49b..db020e4 100644
--- a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesTest.groovy
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesTest.groovy
@@ -26,15 +26,15 @@ class RoutesTest extends TestSupport {
         setup:
             def context = startContext()
 
-            mockEndpoint(context,'mock:split') {
+            org.apache.camel.k.loader.yaml.TestSupport.mockEndpoint(context,'mock:split') {
                 expectedMessageCount = 3
                 expectedBodiesReceived 'a', 'b', 'c'
             }
-            mockEndpoint(context,'mock:route') {
+            org.apache.camel.k.loader.yaml.TestSupport.mockEndpoint(context,'mock:route') {
                 expectedMessageCount = 1
                 expectedBodiesReceived 'a,b,c'
             }
-            mockEndpoint(context,'mock:flow') {
+            org.apache.camel.k.loader.yaml.TestSupport.mockEndpoint(context,'mock:flow') {
                 expectedMessageCount = 3
                 expectedBodiesReceived 'a', 'b', 'c'
             }
@@ -53,15 +53,15 @@ class RoutesTest extends TestSupport {
         setup:
             def context = startContext()
 
-            mockEndpoint(context, 'mock:route') {
+            org.apache.camel.k.loader.yaml.TestSupport.mockEndpoint(context, 'mock:route') {
                 expectedMessageCount 2
                 expectedBodiesReceived 'a', 'b'
             }
-            mockEndpoint(context, 'mock:filter') {
+            org.apache.camel.k.loader.yaml.TestSupport.mockEndpoint(context, 'mock:filter') {
                 expectedMessageCount 1
                 expectedBodiesReceived 'a'
             }
-            mockEndpoint(context,'mock:flow') {
+            org.apache.camel.k.loader.yaml.TestSupport.mockEndpoint(context,'mock:flow') {
                 expectedMessageCount 1
                 expectedBodiesReceived 'a'
             }
@@ -84,7 +84,7 @@ class RoutesTest extends TestSupport {
                 'aggregatorStrategy': new UseLatestAggregationStrategy()
             ])
 
-            mockEndpoint(context, 'mock:route') {
+            org.apache.camel.k.loader.yaml.TestSupport.mockEndpoint(context, 'mock:route') {
                 expectedMessageCount 2
                 expectedBodiesReceived '2', '4'
             }
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/TestSupport.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/TestSupport.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/TestSupport.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/TestSupport.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/AggregateTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/AggregateTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/AggregateTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/AggregateTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/BeanTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/BeanTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/BeanTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/BeanTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ChoiceTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ChoiceTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ChoiceTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ChoiceTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ClaimCheckTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ClaimCheckTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ClaimCheckTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ClaimCheckTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ConvertBodyTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ConvertBodyTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ConvertBodyTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ConvertBodyTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/DelayTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/DelayTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/DelayTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/DelayTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/DynamicRouterTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/DynamicRouterTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/DynamicRouterTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/DynamicRouterTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/EnrichTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/EnrichTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/EnrichTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/EnrichTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/FilterTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/FilterTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/FilterTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/FilterTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/FromTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/FromTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/FromTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/FromTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/LogTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/LogTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/LogTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/LogTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/LoopTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/LoopTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/LoopTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/LoopTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/MarshalTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/MarshalTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/MarshalTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/MarshalTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/MulticastTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/MulticastTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/MulticastTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/MulticastTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PipelineTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PipelineTest.groovy
similarity index 95%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PipelineTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PipelineTest.groovy
index 973a05f..89955c6 100644
--- a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PipelineTest.groovy
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PipelineTest.groovy
@@ -39,7 +39,7 @@ class PipelineTest extends TestSupport {
 
     def "should fail without steps"() {
         given:
-            def stepContext = stepContext(MAPPER.createObjectNode());
+            def stepContext = stepContext(TestSupport.MAPPER.createObjectNode());
         when:
             new PipelineStepParser().toProcessor(stepContext)
         then:
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PollEnrichTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PollEnrichTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PollEnrichTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PollEnrichTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ProcessTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ProcessTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ProcessTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ProcessTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RecipientListTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RecipientListTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RecipientListTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RecipientListTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemoveHeaderTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemoveHeaderTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemoveHeaderTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemoveHeaderTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemoveHeadersTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemoveHeadersTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemoveHeadersTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemoveHeadersTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemovePropertiesTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemovePropertiesTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemovePropertiesTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemovePropertiesTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemovePropertyTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemovePropertyTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemovePropertyTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RemovePropertyTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ResequenceTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ResequenceTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ResequenceTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ResequenceTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RestTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RestTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RestTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RestTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RoutingSlipTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RoutingSlipTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RoutingSlipTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RoutingSlipTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SampleTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SampleTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SampleTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SampleTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetBodyTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetBodyTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetBodyTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetBodyTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetHeaderTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetHeaderTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetHeaderTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetHeaderTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetPropertyTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetPropertyTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetPropertyTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetPropertyTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SortTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SortTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SortTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SortTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SplitTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SplitTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SplitTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SplitTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ThreadsTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ThreadsTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ThreadsTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ThreadsTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ThrottleTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ThrottleTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ThrottleTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ThrottleTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToDynamicTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToDynamicTest.groovy
similarity index 90%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToDynamicTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToDynamicTest.groovy
index 040a0dd..c400f33 100644
--- a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToDynamicTest.groovy
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToDynamicTest.groovy
@@ -17,7 +17,6 @@
 package org.apache.camel.k.loader.yaml.parser
 
 import com.fasterxml.jackson.databind.node.TextNode
-import org.apache.camel.impl.DefaultCamelContext
 import org.apache.camel.k.loader.yaml.TestSupport
 import org.apache.camel.model.ToDynamicDefinition
 
@@ -39,8 +38,7 @@ class ToDynamicTest extends TestSupport {
     def "definition compact"() {
         given:
             def node = TextNode.valueOf('seda://test')
-            def camelContext = new DefaultCamelContext()
-            def stepContext = new StepParser.Context(camelContext, MAPPER, node)
+            def stepContext = stepContext(node)
         when:
             def processor = new ToDynamicStepParser().toProcessor(stepContext)
         then:
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/UnmarshalTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/UnmarshalTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/UnmarshalTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/UnmarshalTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ValidateTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ValidateTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ValidateTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ValidateTest.groovy
diff --git a/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/WireTapTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/WireTapTest.groovy
similarity index 100%
rename from camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/WireTapTest.groovy
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/WireTapTest.groovy
diff --git a/camel-k-loader-yaml/src/test/resources/log4j2-test.xml b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/log4j2-test.xml
similarity index 100%
rename from camel-k-loader-yaml/src/test/resources/log4j2-test.xml
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/log4j2-test.xml
diff --git a/camel-k-loader-yaml/src/test/resources/routes/RoutesTest_aggregator.yaml b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesTest_aggregator.yaml
similarity index 100%
rename from camel-k-loader-yaml/src/test/resources/routes/RoutesTest_aggregator.yaml
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesTest_aggregator.yaml
diff --git a/camel-k-loader-yaml/src/test/resources/routes/RoutesTest_filter.yaml b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesTest_filter.yaml
similarity index 100%
rename from camel-k-loader-yaml/src/test/resources/routes/RoutesTest_filter.yaml
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesTest_filter.yaml
diff --git a/camel-k-loader-yaml/src/test/resources/routes/RoutesTest_split.yaml b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesTest_split.yaml
similarity index 100%
rename from camel-k-loader-yaml/src/test/resources/routes/RoutesTest_split.yaml
rename to camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesTest_split.yaml
diff --git a/camel-k-loader-yaml/pom.xml b/camel-k-loader-yaml/pom.xml
index 9a6016d..9f41972 100644
--- a/camel-k-loader-yaml/pom.xml
+++ b/camel-k-loader-yaml/pom.xml
@@ -24,211 +24,15 @@
         <version>1.0.8-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
+    <packaging>pom</packaging>
 
-    <artifactId>camel-k-loader-yaml</artifactId>
+    <artifactId>camel-k-loader-yaml-parent</artifactId>
 
-    <dependencies>
+    <modules>
+        <module>camel-k-loader-yaml-common</module>
+        <module>camel-k-loader-yaml</module>
+    </modules>
 
-        <!-- ****************************** -->
-        <!--                                -->
-        <!-- RUNTIME                        -->
-        <!--                                -->
-        <!-- ****************************** -->
 
-        <dependency>
-            <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-runtime-core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-core-engine</artifactId>
-            <scope>provided</scope>
-        </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.camel.k</groupId>
-            <artifactId>camel-k-apt</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-annotations</artifactId>
-            <optional>true</optional>
-        </dependency>
-
-        <!-- ****************************** -->
-        <!--                                -->
-        <!-- TESTS                          -->
-        <!--                                -->
-        <!-- ****************************** -->
-
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-mock</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-direct</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-log</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-bean</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy-test</artifactId>
-            <version>${groovy.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.spockframework</groupId>
-            <artifactId>spock-core</artifactId>
-            <version>${spock.version}</version>
-            <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.junit.vintage</groupId>
-            <artifactId>junit-vintage-engine</artifactId>
-            <version>${junit.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
-            <version>${assertj.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-core</artifactId>
-            <version>${log4j2.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-slf4j-impl</artifactId>
-            <version>${log4j2.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>build-helper-maven-plugin</artifactId>
-                <version>${build-helper-maven-plugin.version}</version>
-                <executions>
-                    <execution>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>add-source</goal>
-                        </goals>
-                        <configuration>
-                            <sources>
-                                <source>${project.build.directory}/generated-sources/camel</source>
-                            </sources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.camel.k</groupId>
-                <artifactId>camel-k-maven-plugin</artifactId>
-                <version>${project.version}</version>
-                <executions>
-                    <execution>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>generate-yaml-support-classes</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>com.squareup</groupId>
-                        <artifactId>javapoet</artifactId>
-                        <version>${javapoet.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.camel</groupId>
-                        <artifactId>camel-core-engine</artifactId>
-                        <version>${camel.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.commons</groupId>
-                        <artifactId>commons-text</artifactId>
-                        <version>${commons-text.version}</version>
-                    </dependency>
-                </dependencies>
-            </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.jboss.jandex</groupId>
-                <artifactId>jandex-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>make-index</id>
-                        <goals>
-                            <goal>jandex</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 
 </project>
diff --git a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/support/ProcessorDefinitionMixIn.java b/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/support/ProcessorDefinitionMixIn.java
deleted file mode 100644
index babefe9..0000000
--- a/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/support/ProcessorDefinitionMixIn.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.k.loader.yaml.support;
-
-import java.util.function.Function;
-import java.util.function.Supplier;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import org.apache.camel.Exchange;
-import org.apache.camel.model.Block;
-import org.apache.camel.model.OptionalIdentifiedDefinition;
-import org.apache.camel.model.OtherAttributesAware;
-import org.apache.camel.model.ProcessorDefinition;
-
-/**
- * ProcessorDefinition declares multiple methods for setBody and Jackson get confused
- * about what method to use so to hide such fields from the deserialization process
- * without having to change the original class, a MixIn is required.
- */
-public abstract class ProcessorDefinitionMixIn<Type extends ProcessorDefinition<Type>>
-    extends OptionalIdentifiedDefinition<Type>
-    implements Block, OtherAttributesAware {
-
-    @JsonIgnore
-    public abstract <Result> Type setBody(Supplier<Result> supplier);
-
-    @JsonIgnore
-    public abstract <Result> Type setBody(Function<Exchange, Result> function);
-}
diff --git a/camel-k-quarkus/camel-k-quarkus-loader-yaml/deployment/src/main/java/org/apache/camel/k/loader/yaml/quarkus/deployment/DeploymentProcessor.java b/camel-k-quarkus/camel-k-quarkus-loader-yaml/deployment/src/main/java/org/apache/camel/k/loader/yaml/quarkus/deployment/DeploymentProcessor.java
index b81006a..1ac414a 100644
--- a/camel-k-quarkus/camel-k-quarkus-loader-yaml/deployment/src/main/java/org/apache/camel/k/loader/yaml/quarkus/deployment/DeploymentProcessor.java
+++ b/camel-k-quarkus/camel-k-quarkus-loader-yaml/deployment/src/main/java/org/apache/camel/k/loader/yaml/quarkus/deployment/DeploymentProcessor.java
@@ -16,23 +16,30 @@
  */
 package org.apache.camel.k.loader.yaml.quarkus.deployment;
 
+import java.util.stream.Collectors;
+
 import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import org.apache.camel.k.loader.yaml.YamlSourceLoader;
 import org.apache.camel.k.loader.yaml.model.Node;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.k.loader.yaml.parser.HasDataFormat;
 import org.apache.camel.k.loader.yaml.parser.HasExpression;
-import org.apache.camel.k.loader.yaml.support.ProcessorDefinitionMixIn;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.language.ExpressionDefinition;
+import org.jboss.jandex.AnnotationInstance;
+import org.jboss.jandex.AnnotationTarget;
 import org.jboss.jandex.ClassInfo;
 import org.jboss.jandex.DotName;
 import org.jboss.jandex.IndexView;
 
 public class DeploymentProcessor {
+    public static final DotName YAML_STEP_PARSER_ANNOTATION = DotName.createSimple("org.apache.camel.k.annotation.yaml.YAMLStepParser");
+    public static final DotName YAML_STEP_DEFINITION_ANNOTATION = DotName.createSimple("org.apache.camel.k.annotation.yaml.YAMLNodeDefinition");
+
     @BuildStep
     void registerReflectiveClasses(
             BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
@@ -40,9 +47,13 @@ public class DeploymentProcessor {
 
         IndexView view = combinedIndexBuildItem.getIndex();
 
-        for (ClassInfo ci : getAllKnownImplementors(view, Step.Definition.class)) {
+        for (ClassInfo ci : getAnnotated(view, YAML_STEP_PARSER_ANNOTATION)) {
+            reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, ci.name().toString()));
+        }
+        for (ClassInfo ci : getAnnotated(view, YAML_STEP_DEFINITION_ANNOTATION)) {
             reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, ci.name().toString()));
         }
+
         for (ClassInfo ci : getAllKnownImplementors(view, Step.Deserializer.class)) {
             reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, ci.name().toString()));
         }
@@ -57,29 +68,51 @@ public class DeploymentProcessor {
         }
 
         reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, Step.Deserializer.class));
-        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, Step.Definition.class));
         reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, HasExpression.class));
         reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, HasDataFormat.class));
         reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, Node.class));
-        reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, "javax.xml.namespace.QName"));
-        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, ProcessorDefinitionMixIn.class));
+        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, YamlSourceLoader.ProcessorDefinitionMixIn.class));
 
 
     }
 
     private static Iterable<ClassInfo> getAllKnownImplementors(IndexView view, String name) {
-        return view.getAllKnownImplementors(DotName.createSimple(name));
+        return getAllKnownImplementors(view, DotName.createSimple(name));
     }
 
     private static Iterable<ClassInfo> getAllKnownImplementors(IndexView view, Class<?> type) {
-        return view.getAllKnownImplementors(DotName.createSimple(type.getName()));
+        return getAllKnownImplementors(view, DotName.createSimple(type.getName()));
+    }
+
+    private static Iterable<ClassInfo> getAllKnownImplementors(IndexView view, DotName type) {
+        return view.getAllKnownImplementors(type);
     }
 
     private static Iterable<ClassInfo> getAllKnownSubclasses(IndexView view, String name) {
-        return view.getAllKnownSubclasses(DotName.createSimple(name));
+        return getAllKnownSubclasses(view, DotName.createSimple(name));
     }
 
     private static Iterable<ClassInfo> getAllKnownSubclasses(IndexView view, Class<?> type) {
-        return view.getAllKnownSubclasses(DotName.createSimple(type.getName()));
+        return getAllKnownSubclasses(view, DotName.createSimple(type.getName()));
+    }
+
+    private static Iterable<ClassInfo> getAllKnownSubclasses(IndexView view, DotName type) {
+        return view.getAllKnownSubclasses(type);
+    }
+
+    private static Iterable<ClassInfo> getAnnotated(IndexView view, String name) {
+        return getAnnotated(view, DotName.createSimple(name));
+    }
+
+    private static Iterable<ClassInfo> getAnnotated(IndexView view, Class<?> type) {
+        return getAnnotated(view, DotName.createSimple(type.getName()));
+    }
+
+    private static Iterable<ClassInfo> getAnnotated(IndexView view, DotName type) {
+        return view.getAnnotations(type).stream()
+            .map(AnnotationInstance::target)
+            .filter(t -> t.kind() == AnnotationTarget.Kind.CLASS)
+            .map(AnnotationTarget::asClass)
+            .collect(Collectors.toList());
     }
 }
diff --git a/camel-k-runtime-bom/pom.xml b/camel-k-runtime-bom/pom.xml
index 9639d21..c81d539 100644
--- a/camel-k-runtime-bom/pom.xml
+++ b/camel-k-runtime-bom/pom.xml
@@ -171,6 +171,11 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-quarkus-loader-yaml-common</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
                 <artifactId>camel-k-quarkus-loader-yaml-deployment</artifactId>
                 <version>${project.version}</version>
             </dependency>
@@ -239,6 +244,11 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-loader-yaml-common</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
                 <artifactId>camel-k-loader-yaml</artifactId>
                 <version>${project.version}</version>
             </dependency>
diff --git a/pom.xml b/pom.xml
index f21c01c..5fcff7c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -416,6 +416,11 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-loader-yaml-common</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
                 <artifactId>camel-k-loader-js</artifactId>
                 <version>${project.version}</version>
             </dependency>
diff --git a/tooling/camel-k-annotations/pom.xml b/tooling/camel-k-annotations/pom.xml
index 330ec1e..1150759 100644
--- a/tooling/camel-k-annotations/pom.xml
+++ b/tooling/camel-k-annotations/pom.xml
@@ -27,4 +27,12 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>camel-k-annotations</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core-engine</artifactId>
+            <optional>true</optional>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLStepParser.java b/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLNodeDefinition.java
similarity index 84%
copy from tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLStepParser.java
copy to tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLNodeDefinition.java
index d11af8a..40720f3 100644
--- a/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLStepParser.java
+++ b/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLNodeDefinition.java
@@ -21,8 +21,10 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import org.apache.camel.reifier.ProcessorReifier;
+
 @Target(ElementType.TYPE)
-@Retention(RetentionPolicy.SOURCE)
-public @interface YAMLStepParser {
-    String[] value();
+@Retention(RetentionPolicy.RUNTIME)
+public @interface YAMLNodeDefinition {
+    Class<? extends ProcessorReifier>[] reifiers() default {};
 }
diff --git a/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLStepParser.java b/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLStepParser.java
index d11af8a..f546632 100644
--- a/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLStepParser.java
+++ b/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLStepParser.java
@@ -22,7 +22,7 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 @Target(ElementType.TYPE)
-@Retention(RetentionPolicy.SOURCE)
+@Retention(RetentionPolicy.RUNTIME)
 public @interface YAMLStepParser {
     String[] value();
 }
diff --git a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlLoaderSupportClasses.java b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlLoaderSupportClasses.java
new file mode 100644
index 0000000..bc13bf2
--- /dev/null
+++ b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlLoaderSupportClasses.java
@@ -0,0 +1,127 @@
+/*
+ * 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.k.tooling.maven;
+
+
+import java.io.IOException;
+import java.nio.file.Paths;
+import javax.lang.model.element.Modifier;
+
+import com.fasterxml.jackson.core.Version;
+import com.fasterxml.jackson.databind.Module;
+import com.squareup.javapoet.CodeBlock;
+import com.squareup.javapoet.JavaFile;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.TypeSpec;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.jboss.jandex.AnnotationInstance;
+import org.jboss.jandex.AnnotationValue;
+import org.jboss.jandex.ClassInfo;
+
+@Mojo(
+    name = "generate-yaml-loader-support-classes",
+    inheritByDefault = false,
+    defaultPhase = LifecyclePhase.GENERATE_SOURCES,
+    requiresDependencyResolution = ResolutionScope.COMPILE,
+    threadSafe = true,
+    requiresProject = false)
+public class GenerateYamlLoaderSupportClasses extends GenerateYamlSupport {
+    @Override
+    public void execute() throws MojoFailureException {
+        try {
+            JavaFile.builder("org.apache.camel.k.loader.yaml", generateJacksonModule())
+                .indent("    ")
+                .build()
+                .writeTo(Paths.get(output));
+            JavaFile.builder("org.apache.camel.k.loader.yaml", generateReifiers())
+                .indent("    ")
+                .build()
+                .writeTo(Paths.get(output));
+        } catch (IOException e) {
+            throw new MojoFailureException(e.getMessage());
+        }
+    }
+
+    public final TypeSpec generateJacksonModule() {
+        TypeSpec.Builder type = TypeSpec.classBuilder("YamlModule");
+        type.addModifiers(Modifier.PUBLIC, Modifier.FINAL);
+        type.superclass(Module.class);
+        type.addMethod(
+            MethodSpec.methodBuilder("getModuleName")
+                .addModifiers(Modifier.PUBLIC)
+                .addAnnotation(Override.class)
+                .returns(String.class)
+                .addCode(CodeBlock.builder().addStatement("return $S", "camel-yaml").build())
+                .build()
+        );
+        type.addMethod(
+            MethodSpec.methodBuilder("version")
+                .addModifiers(Modifier.PUBLIC)
+                .addAnnotation(Override.class)
+                .returns(Version.class)
+                .addCode(CodeBlock.builder().addStatement("return $L", "Version.unknownVersion()").build())
+                .build()
+        );
+
+        MethodSpec.Builder mb = MethodSpec.methodBuilder("setupModule")
+            .addModifiers(Modifier.PUBLIC)
+            .addParameter(Module.SetupContext.class, "context");
+
+        definitions(EXPRESSION_DEFINITION_CLASS).forEach(
+            (k, v) -> mb.addStatement("context.registerSubtypes(new com.fasterxml.jackson.databind.jsontype.NamedType($T.class, $S))", v, k)
+        );
+        definitions(DATAFORMAT_DEFINITION_CLASS).forEach(
+            (k, v) -> mb.addStatement("context.registerSubtypes(new com.fasterxml.jackson.databind.jsontype.NamedType($T.class, $S))", v, k)
+        );
+
+        type.addMethod(mb.build());
+
+        return type.build();
+    }
+
+    public final TypeSpec generateReifiers() {
+        TypeSpec.Builder type = TypeSpec.classBuilder("YamlReifiers");
+        type.addModifiers(Modifier.PUBLIC, Modifier.FINAL);
+
+        MethodSpec.Builder mb = MethodSpec.methodBuilder("registerReifiers")
+            .addModifiers(Modifier.PUBLIC)
+            .addModifiers(Modifier.STATIC);
+
+        annotated(YAML_STEP_DEFINITION_ANNOTATION).forEach(i -> {
+            final AnnotationInstance annotation = i.classAnnotation(YAML_STEP_DEFINITION_ANNOTATION);
+            final AnnotationValue reifiers = annotation.value("reifiers");
+
+            String name = i.toString();
+            if (i.nestingType() == ClassInfo.NestingType.INNER) {
+                name = i.enclosingClass().toString() + "." + i.simpleName();
+            }
+
+            if (reifiers != null) {
+                for (String reifier: reifiers.asStringArray()) {
+                    mb.addStatement("org.apache.camel.reifier.ProcessorReifier.registerReifier($L.class, $L::new);", name, reifier);
+                }
+            }
+        });
+
+        type.addMethod(mb.build());
+
+        return type.build();
+    }
+}
diff --git a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlSupportClasses.java b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlParserSupportClasses.java
similarity index 55%
rename from tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlSupportClasses.java
rename to tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlParserSupportClasses.java
index 2110644..d79c319 100644
--- a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlSupportClasses.java
+++ b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlParserSupportClasses.java
@@ -17,24 +17,12 @@
 package org.apache.camel.k.tooling.maven;
 
 
-import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLClassLoader;
 import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 import javax.lang.model.element.Modifier;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import com.fasterxml.jackson.core.Version;
-import com.fasterxml.jackson.databind.Module;
 import com.squareup.javapoet.AnnotationSpec;
 import com.squareup.javapoet.CodeBlock;
 import com.squareup.javapoet.JavaFile;
@@ -44,38 +32,18 @@ import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.text.WordUtils;
-import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
-import org.apache.maven.project.MavenProject;
-import org.jboss.jandex.AnnotationInstance;
-import org.jboss.jandex.AnnotationValue;
-import org.jboss.jandex.ClassInfo;
-import org.jboss.jandex.CompositeIndex;
-import org.jboss.jandex.DotName;
-import org.jboss.jandex.IndexReader;
-import org.jboss.jandex.IndexView;
 
 @Mojo(
-    name = "generate-yaml-support-classes",
+    name = "generate-yaml-parser-support-classes",
     inheritByDefault = false,
     defaultPhase = LifecyclePhase.GENERATE_SOURCES,
     requiresDependencyResolution = ResolutionScope.COMPILE,
-    threadSafe = true,
-    requiresProject = false)
-public class GenerateYamlSupportClasses extends AbstractMojo {
-    public static final DotName EXPRESSION_DEFINITION_CLASS = DotName.createSimple("org.apache.camel.model.language.ExpressionDefinition");
-    public static final DotName DATAFORMAT_DEFINITION_CLASS = DotName.createSimple("org.apache.camel.model.DataFormatDefinition");
-    public static final DotName XMLROOTELEMENT_ANNOTATION_CLASS = DotName.createSimple("javax.xml.bind.annotation.XmlRootElement");
-
-    @Parameter(readonly = true)
-    private MavenProject project;
-    @Parameter(defaultValue = "${project.build.directory}/generated-sources/camel")
-    private String output;
-
+    threadSafe = true)
+public class GenerateYamlParserSupportClasses extends GenerateYamlSupport {
     @Override
     public void execute() throws MojoFailureException {
         try {
@@ -87,10 +55,6 @@ public class GenerateYamlSupportClasses extends AbstractMojo {
                 .indent("    ")
                 .build()
                 .writeTo(Paths.get(output));
-            JavaFile.builder("org.apache.camel.k.loader.yaml", generateJacksonModule())
-                .indent("    ")
-                .build()
-                .writeTo(Paths.get(output));
         } catch (IOException e) {
             throw new MojoFailureException(e.getMessage());
         }
@@ -196,101 +160,4 @@ public class GenerateYamlSupportClasses extends AbstractMojo {
 
         return type.build();
     }
-
-    public final TypeSpec generateJacksonModule() {
-        TypeSpec.Builder type = TypeSpec.classBuilder("YamlModule");
-        type.addModifiers(Modifier.PUBLIC, Modifier.FINAL);
-        type.superclass(Module.class);
-        type.addMethod(
-            MethodSpec.methodBuilder("getModuleName")
-                .addModifiers(Modifier.PUBLIC)
-                .addAnnotation(Override.class)
-                .returns(String.class)
-                .addCode(CodeBlock.builder().addStatement("return $S", "camel-yaml").build())
-                .build()
-        );
-        type.addMethod(
-            MethodSpec.methodBuilder("version")
-                .addModifiers(Modifier.PUBLIC)
-                .addAnnotation(Override.class)
-                .returns(Version.class)
-                .addCode(CodeBlock.builder().addStatement("return $L", "Version.unknownVersion()").build())
-                .build()
-        );
-
-        MethodSpec.Builder mb = MethodSpec.methodBuilder("setupModule")
-            .addModifiers(Modifier.PUBLIC)
-            .addParameter(Module.SetupContext.class, "context");
-
-        definitions(EXPRESSION_DEFINITION_CLASS).forEach(
-            (k, v) -> mb.addStatement("context.registerSubtypes(new com.fasterxml.jackson.databind.jsontype.NamedType($T.class, $S))", v, k)
-        );
-        definitions(DATAFORMAT_DEFINITION_CLASS).forEach(
-            (k, v) -> mb.addStatement("context.registerSubtypes(new com.fasterxml.jackson.databind.jsontype.NamedType($T.class, $S))", v, k)
-        );
-
-        type.addMethod(mb.build());
-
-        return type.build();
-    }
-
-    private Map<String, Class<?>> definitions(DotName type) {
-        ClassLoader cl = getClassLoader();
-        Map<String, Class<?>> definitions = new HashMap<>();
-        IndexView view = getCompositeIndexer(cl);
-
-        for (ClassInfo ci: view.getAllKnownSubclasses(type)) {
-            AnnotationInstance instance = ci.classAnnotation(XMLROOTELEMENT_ANNOTATION_CLASS);
-            if (instance != null) {
-                AnnotationValue name = instance.value("name");
-                if (name != null) {
-                    try {
-                        definitions.put(name.asString(), cl.loadClass(ci.name().toString()));
-                    } catch (ClassNotFoundException e) {
-                        throw new RuntimeException(e);
-                    }
-                }
-            }
-        }
-
-        return Collections.unmodifiableMap(definitions);
-    }
-
-    private static IndexView getCompositeIndexer(ClassLoader classLoader) {
-        try {
-            Enumeration<URL> elements = classLoader.getResources("META-INF/jandex.idx");
-            List<IndexView> allIndex = new ArrayList<>();
-
-            for (Enumeration<URL> e = elements; e.hasMoreElements();) {
-                try (InputStream is = e.nextElement().openStream()) {
-                    allIndex.add(new IndexReader(is).read());
-                }
-            }
-
-            return CompositeIndex.create(allIndex);
-
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private ClassLoader getClassLoader() {
-        if (project == null) {
-            return getClass().getClassLoader();
-        }
-
-        try {
-            List<String> elements = new ArrayList<>();
-            elements.addAll(project.getCompileClasspathElements());
-            elements.addAll(project.getRuntimeClasspathElements());
-
-            URL urls[] = new URL[elements.size()];
-            for (int i = 0; i < elements.size(); ++i) {
-                urls[i] = new File(elements.get(i)).toURI().toURL();
-            }
-            return new URLClassLoader(urls, this.getClass().getClassLoader());
-        } catch (Exception e) {
-            return this.getClass().getClassLoader();
-        }
-    }
 }
diff --git a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlSupport.java b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlSupport.java
new file mode 100644
index 0000000..055c4dd
--- /dev/null
+++ b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlSupport.java
@@ -0,0 +1,138 @@
+/*
+ * 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.k.tooling.maven;
+
+
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.jboss.jandex.AnnotationInstance;
+import org.jboss.jandex.AnnotationTarget;
+import org.jboss.jandex.AnnotationValue;
+import org.jboss.jandex.ClassInfo;
+import org.jboss.jandex.CompositeIndex;
+import org.jboss.jandex.DotName;
+import org.jboss.jandex.IndexReader;
+import org.jboss.jandex.IndexView;
+
+public abstract class GenerateYamlSupport extends AbstractMojo {
+    public static final DotName EXPRESSION_DEFINITION_CLASS = DotName.createSimple("org.apache.camel.model.language.ExpressionDefinition");
+    public static final DotName DATAFORMAT_DEFINITION_CLASS = DotName.createSimple("org.apache.camel.model.DataFormatDefinition");
+    public static final DotName XMLROOTELEMENT_ANNOTATION_CLASS = DotName.createSimple("javax.xml.bind.annotation.XmlRootElement");
+    public static final DotName YAML_STEP_DEFINITION_CLASS = DotName.createSimple("org.apache.camel.k.loader.yaml.model.Step$Definition");
+    public static final DotName YAML_STEP_PARSER_ANNOTATION = DotName.createSimple("org.apache.camel.k.annotation.yaml.YAMLStepParser");
+    public static final DotName YAML_STEP_DEFINITION_ANNOTATION = DotName.createSimple("org.apache.camel.k.annotation.yaml.YAMLNodeDefinition");
+
+    @Parameter(defaultValue = "${project}", readonly = true, required = true)
+    protected MavenProject project;
+    @Parameter(defaultValue = "${project.build.directory}/generated-sources/camel")
+    protected String output;
+
+    protected Map<String, Class<?>> definitions(DotName type) {
+        ClassLoader cl = getClassLoader();
+        Map<String, Class<?>> definitions = new HashMap<>();
+        IndexView view = getCompositeIndexer(cl);
+
+        for (ClassInfo ci: view.getAllKnownSubclasses(type)) {
+            AnnotationInstance instance = ci.classAnnotation(XMLROOTELEMENT_ANNOTATION_CLASS);
+            if (instance != null) {
+                AnnotationValue name = instance.value("name");
+                if (name != null) {
+                    try {
+                        definitions.put(name.asString(), cl.loadClass(ci.name().toString()));
+                    } catch (ClassNotFoundException e) {
+                        throw new RuntimeException(e);
+                    }
+                }
+            }
+        }
+
+        return Collections.unmodifiableMap(definitions);
+    }
+
+    protected Stream<ClassInfo> implementors(DotName type) {
+        ClassLoader cl = getClassLoader();
+        IndexView view = getCompositeIndexer(cl);
+
+        return view.getAllKnownImplementors(type).stream();
+    }
+
+    protected Stream<ClassInfo> annotated(DotName type) {
+        ClassLoader cl = getClassLoader();
+        IndexView view = getCompositeIndexer(cl);
+
+
+        return view.getAnnotations(type).stream()
+            .map(AnnotationInstance::target)
+            .filter(t -> t.kind() == AnnotationTarget.Kind.CLASS)
+            .map(AnnotationTarget::asClass);
+    }
+
+    protected static IndexView getCompositeIndexer(ClassLoader classLoader) {
+        try {
+            Enumeration<URL> elements = classLoader.getResources("META-INF/jandex.idx");
+            List<IndexView> allIndex = new ArrayList<>();
+            Set<URL> locations = new HashSet<>();
+
+            for (Enumeration<URL> e = elements; e.hasMoreElements();) {
+                URL url = e.nextElement();
+                if (locations.add(url)) {
+                    try (InputStream is = url.openStream()) {
+                        allIndex.add(new IndexReader(is).read());
+                    }
+                }
+            }
+
+            return CompositeIndex.create(allIndex);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    protected ClassLoader getClassLoader() {
+        if (project == null) {
+            return getClass().getClassLoader();
+        }
+
+        try {
+            List<String> elements = new ArrayList<>();
+            elements.addAll(project.getCompileClasspathElements());
+
+            URL urls[] = new URL[elements.size()];
+            for (int i = 0; i < elements.size(); ++i) {
+                urls[i] = new File(elements.get(i)).toURI().toURL();
+            }
+            return new URLClassLoader(urls, this.getClass().getClassLoader());
+        } catch (Exception e) {
+            return this.getClass().getClassLoader();
+        }
+    }
+}
diff --git a/tooling/camel-k-maven-plugin/src/test/java/org/apache/camel/k/tooling/maven/processors/GenerateYamlSupportClassesTest.java b/tooling/camel-k-maven-plugin/src/test/java/org/apache/camel/k/tooling/maven/processors/GenerateYamlSupportClassesTest.java
index 27784f1..52bfb26 100644
--- a/tooling/camel-k-maven-plugin/src/test/java/org/apache/camel/k/tooling/maven/processors/GenerateYamlSupportClassesTest.java
+++ b/tooling/camel-k-maven-plugin/src/test/java/org/apache/camel/k/tooling/maven/processors/GenerateYamlSupportClassesTest.java
@@ -18,7 +18,8 @@ package org.apache.camel.k.tooling.maven.processors;
 
 import com.squareup.javapoet.JavaFile;
 import com.squareup.javapoet.TypeSpec;
-import org.apache.camel.k.tooling.maven.GenerateYamlSupportClasses;
+import org.apache.camel.k.tooling.maven.GenerateYamlLoaderSupportClasses;
+import org.apache.camel.k.tooling.maven.GenerateYamlParserSupportClasses;
 import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -26,7 +27,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 public class GenerateYamlSupportClassesTest {
     @Test
     public void testGenerateHasDataFormat() {
-        final TypeSpec spec = new GenerateYamlSupportClasses().generateHasDataFormat();
+        final TypeSpec spec = new GenerateYamlParserSupportClasses().generateHasDataFormat();
         final JavaFile file = JavaFile.builder("org.apache.camel.k.loader.yaml.parser", spec).build();
 
         assertThat(file.packageName).isEqualTo("org.apache.camel.k.loader.yaml.parser");
@@ -36,7 +37,7 @@ public class GenerateYamlSupportClassesTest {
 
     @Test
     public void testGenerateHasExpression() {
-        final TypeSpec spec = new GenerateYamlSupportClasses().generateHasExpression();
+        final TypeSpec spec = new GenerateYamlParserSupportClasses().generateHasExpression();
         final JavaFile file = JavaFile.builder("org.apache.camel.k.loader.yaml.parser", spec).build();
 
         assertThat(file.packageName).isEqualTo("org.apache.camel.k.loader.yaml.parser");
@@ -46,7 +47,7 @@ public class GenerateYamlSupportClassesTest {
 
     @Test
     public void testGenerateJacksonModule() {
-        final TypeSpec spec = new GenerateYamlSupportClasses().generateJacksonModule();
+        final TypeSpec spec = new GenerateYamlLoaderSupportClasses().generateJacksonModule();
         final JavaFile file = JavaFile.builder("org.apache.camel.k.loader.yaml", spec).build();
 
         assertThat(file.packageName).isEqualTo("org.apache.camel.k.loader.yaml");