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 a237bc5c803f946f2c28792f1b77a8769b571128
Author: lburgazzoli <lburgazz...@gmail.com>
AuthorDate: Wed May 6 18:19:05 2020 +0200

    yaml-loader: auto generate part fo the dsl
---
 .../k/loader/yaml/parser/AggregateStepParser.java  |   1 +
 .../k/loader/yaml/parser/ChoiceStepParser.java     |   2 +
 .../yaml/parser/CircuitBreakerStepParser.java      |   2 +
 .../k/loader/yaml/parser/ClaimCheckStepParser.java |  30 -----
 .../loader/yaml/parser/ConvertBodyStepParser.java  |  30 -----
 .../k/loader/yaml/parser/DelayStepParser.java      |   6 +-
 .../k/loader/yaml/parser/DoTryStepParser.java      |   2 +
 .../yaml/parser/DynamicRouterStepParser.java       |   1 +
 .../k/loader/yaml/parser/EnrichStepParser.java     |   1 +
 .../k/loader/yaml/parser/FilterStepParser.java     |   2 +
 .../camel/k/loader/yaml/parser/FromStepParser.java |   2 +
 .../yaml/parser/IdempotentConsumerParser.java      |   2 +
 .../loader/yaml/parser/LoadBalanceStepParser.java  |   2 +
 .../camel/k/loader/yaml/parser/LoopStepParser.java |   2 +
 .../k/loader/yaml/parser/MarshalStepParser.java    |   1 +
 .../k/loader/yaml/parser/MulticastStepParser.java  |   2 +
 .../k/loader/yaml/parser/PipelineStepParser.java   |   2 +
 .../k/loader/yaml/parser/PollEnrichStepParser.java |   1 +
 .../k/loader/yaml/parser/ProcessStepParser.java    |   1 +
 .../yaml/parser/RecipientListStepParser.java       |   1 +
 .../loader/yaml/parser/RemoveHeaderStepParser.java |  46 --------
 .../yaml/parser/RemoveHeadersStepParser.java       |  29 -----
 .../yaml/parser/RemovePropertiesStepParser.java    |  30 -----
 .../yaml/parser/RemovePropertyStepParser.java      |  46 --------
 .../k/loader/yaml/parser/ResequenceStepParser.java |   2 +
 .../camel/k/loader/yaml/parser/RestStepParser.java |   2 +
 .../k/loader/yaml/parser/RouteStepParser.java      |   2 +
 .../loader/yaml/parser/RoutingSlipStepParser.java  |   3 +-
 .../camel/k/loader/yaml/parser/SagaStepParser.java |   2 +
 .../k/loader/yaml/parser/SampleStepParser.java     |   2 +
 .../k/loader/yaml/parser/ScriptStepParser.java     |   1 +
 .../loader/yaml/parser/ServiceCallStepParser.java  |   1 +
 .../k/loader/yaml/parser/SetBodyStepParser.java    |   1 +
 .../yaml/parser/SetExchangePatternStepParser.java  |   1 +
 .../k/loader/yaml/parser/SetHeaderStepParser.java  |   1 +
 .../loader/yaml/parser/SetPropertyStepParser.java  |   1 +
 .../camel/k/loader/yaml/parser/SortStepParser.java |   1 +
 .../k/loader/yaml/parser/SplitStepParser.java      |   2 +
 .../camel/k/loader/yaml/parser/StepStepParser.java |   2 +
 .../camel/k/loader/yaml/parser/StopStepParser.java |  30 -----
 .../k/loader/yaml/parser/ThreadsStepParser.java    |  30 -----
 .../k/loader/yaml/parser/ThrottleStepParser.java   |   1 +
 .../yaml/parser/ThrowExceptionStepParser.java      |   1 +
 .../k/loader/yaml/parser/ToDynamicStepParser.java  |   3 +-
 .../camel/k/loader/yaml/parser/ToStepParser.java   |   1 +
 .../k/loader/yaml/parser/TransactedStepParser.java |   1 +
 .../k/loader/yaml/parser/TransformStepParser.java  |   1 +
 ...epParser.java => TypedProcessorStepParser.java} |  16 ++-
 .../k/loader/yaml/parser/UnmarshalStepParser.java  |   1 +
 .../k/loader/yaml/parser/ValidateStepParser.java   |   1 +
 .../k/loader/yaml/parser/WireTapStepParser.java    |   3 +-
 .../yaml/{parser => spi}/ProcessorStepParser.java  |  14 +--
 .../yaml/{parser => spi}/StartStepParser.java      |   9 +-
 .../k/loader/yaml/{parser => spi}/StepParser.java  |  74 ++++++++-----
 .../yaml/{parser => spi}/StepParserException.java  |   2 +-
 .../yaml/{parser => spi}/StepParserSupport.java    |   3 +-
 .../RemoveHeaderDefinitionMixIn.java}              |  21 ++--
 .../RemovePropertyDefinitionMixIn.java}            |  21 ++--
 .../camel/k/loader/yaml/YamlSourceLoader.java      |   7 +-
 .../apache/camel/k/loader/yaml/TestSupport.groovy  |  23 +++-
 .../camel/k/loader/yaml/parser/BeanTest.groovy     |   8 +-
 .../camel/k/loader/yaml/parser/ChoiceTest.groovy   |   1 +
 .../k/loader/yaml/parser/ClaimCheckTest.groovy     |   6 +-
 .../k/loader/yaml/parser/ConvertBodyTest.groovy    |   6 +-
 .../camel/k/loader/yaml/parser/FromTest.groovy     |   1 +
 .../camel/k/loader/yaml/parser/LogTest.groovy      |   6 +-
 .../camel/k/loader/yaml/parser/PipelineTest.groovy |   1 +
 .../k/loader/yaml/parser/RemoveHeaderTest.groovy   |  17 ++-
 .../k/loader/yaml/parser/RemoveHeadersTest.groovy  |   6 +-
 .../loader/yaml/parser/RemovePropertiesTest.groovy |   8 +-
 .../k/loader/yaml/parser/RemovePropertyTest.groovy |  18 ++-
 .../camel/k/loader/yaml/parser/RestTest.groovy     |   1 +
 .../camel/k/loader/yaml/parser/RollbackTest.groovy |  16 +--
 .../yaml/parser/SetExchangePatternTest.groovy      |   6 +-
 .../camel/k/loader/yaml/parser/StepTest.groovy     |   3 +-
 .../{TransactedTest.groovy => StopTest.groovy}     |  15 ++-
 .../camel/k/loader/yaml/parser/ThreadsTest.groovy  |   4 +-
 .../k/loader/yaml/parser/ThrowExceptionTest.groovy |  24 ++--
 .../k/loader/yaml/parser/TransactedTest.groovy     |   2 +-
 .../core/quarkus/deployment/DeploymentSupport.java |  54 +++++++++
 .../quarkus/deployment/DeploymentProcessor.java    |  77 +++----------
 .../k/knative/yaml/parser/KnativeStepParser.java   |   6 +-
 .../data/routes.yaml                               |   2 +-
 .../data/routes.yaml                               |   2 +-
 .../data/routes.yaml                               |   2 +-
 .../src/main/resources/routes.yaml                 |   8 +-
 pom.xml                                            |   2 +-
 .../apache/camel/k/tooling/apt/CamelProcessor.java |  10 --
 tooling/camel-k-maven-plugin/pom.xml               |   2 +-
 .../maven/GenerateYamlLoaderSupportClasses.java    | 121 +++++++++++++++++++--
 .../camel/k/tooling/maven/GenerateYamlSupport.java |   5 +-
 91 files changed, 449 insertions(+), 522 deletions(-)

diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 4feff93..61c8745 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -20,6 +20,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.AggregateDefinition;
 import org.apache.camel.model.ExpressionSubElementDefinition;
 import org.apache.camel.model.ProcessorDefinition;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 44f4665..4685cd3 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -21,6 +21,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.ChoiceDefinition;
 import org.apache.camel.model.OtherwiseDefinition;
 import org.apache.camel.model.ProcessorDefinition;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/CircuitBreakerStepParser.java
 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/CircuitBreakerStepParser.java
index cbf6b3d..0386d20 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/CircuitBreakerStepParser.java
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/CircuitBreakerStepParser.java
@@ -22,6 +22,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.CircuitBreakerDefinition;
 import org.apache.camel.model.HystrixConfigurationDefinition;
 import org.apache.camel.model.OnFallbackDefinition;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
deleted file mode 100644
index 59e7ab7..0000000
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ClaimCheckStepParser.java
+++ /dev/null
@@ -1,30 +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.parser;
-
-import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.model.ClaimCheckDefinition;
-import org.apache.camel.model.ProcessorDefinition;
-
-@YAMLStepParser("claim-check")
-public class ClaimCheckStepParser implements ProcessorStepParser {
-    @Override
-    public ProcessorDefinition<?> toProcessor(Context context) {
-        return context.node(ClaimCheckDefinition.class);
-    }
-}
-
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
deleted file mode 100644
index d117f27..0000000
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ConvertBodyStepParser.java
+++ /dev/null
@@ -1,30 +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.parser;
-
-import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.model.ConvertBodyDefinition;
-import org.apache.camel.model.ProcessorDefinition;
-
-@YAMLStepParser("convert-body")
-public class ConvertBodyStepParser implements ProcessorStepParser {
-    @Override
-    public ProcessorDefinition<?> toProcessor(Context context) {
-        return context.node(ConvertBodyDefinition.class);
-    }
-}
-
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 6d34875..9aac940 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -18,17 +18,13 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.DelayDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.DelayReifier;
-import org.apache.camel.reifier.ProcessorReifier;
 
 @YAMLStepParser("delay")
 public class DelayStepParser implements ProcessorStepParser {
-    static {
-        ProcessorReifier.registerReifier(Definition.class, DelayReifier::new);
-    }
-
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
         return context.node(Definition.class);
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/DoTryStepParser.java
 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/DoTryStepParser.java
index 96c55c4..d164b42 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/DoTryStepParser.java
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/DoTryStepParser.java
@@ -22,6 +22,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.CatchDefinition;
 import org.apache.camel.model.FinallyDefinition;
 import org.apache.camel.model.ProcessorDefinition;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 2ddc5ae..4974d78 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -18,6 +18,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.DynamicRouterDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.DynamicRouterReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index ff06a9d..997351f 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -20,6 +20,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.EnrichDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.EnrichReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 650e526..90af676 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -21,6 +21,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.FilterDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.FilterReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 7607f2b..22f846f 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -25,6 +25,8 @@ 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.k.loader.yaml.spi.StartStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.util.URISupport;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/IdempotentConsumerParser.java
 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/IdempotentConsumerParser.java
index e35ba8d..fb90ed1 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/IdempotentConsumerParser.java
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/IdempotentConsumerParser.java
@@ -21,6 +21,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.IdempotentConsumerDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.IdempotentConsumerReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/LoadBalanceStepParser.java
 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/LoadBalanceStepParser.java
index 811e035..d27983e 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/LoadBalanceStepParser.java
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/LoadBalanceStepParser.java
@@ -25,6 +25,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.ExpressionSubElementDefinition;
 import org.apache.camel.model.LoadBalanceDefinition;
 import org.apache.camel.model.LoadBalancerDefinition;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index e05af6f..f6965f4 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -21,6 +21,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.LoopDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.LoopReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index d39f3a2..b03f56d 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -18,6 +18,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.MarshalDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.MarshalReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 98a7ffd..fd237c3 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -21,6 +21,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.MulticastDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.MulticastReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 1b1393a..dfdb8b1 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -21,6 +21,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.PipelineDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 88e0ec7..4b2f047 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -20,6 +20,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.PollEnrichDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.PollEnrichReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 007811b..1e22238 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -17,6 +17,7 @@
 package org.apache.camel.k.loader.yaml.parser;
 
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
+import org.apache.camel.k.loader.yaml.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index f0fbccf..4e1d386 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -18,6 +18,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RecipientListDefinition;
 import org.apache.camel.reifier.RecipientListReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
deleted file mode 100644
index 86f07f9..0000000
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemoveHeaderStepParser.java
+++ /dev/null
@@ -1,46 +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.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.model.ProcessorDefinition;
-import org.apache.camel.model.RemoveHeaderDefinition;
-import org.apache.camel.reifier.RemoveHeaderReifier;
-
-@YAMLStepParser("remove-header")
-public class RemoveHeaderStepParser implements ProcessorStepParser {
-    @Override
-    public ProcessorDefinition<?> toProcessor(Context context) {
-        return context.node(Definition.class);
-    }
-
-    @YAMLNodeDefinition(reifiers = RemoveHeaderReifier.class)
-    public static final class Definition extends RemoveHeaderDefinition {
-        @JsonAlias("name")
-        public void setHeaderName(String headerName) {
-            super.setHeaderName(headerName);
-        }
-
-        @JsonAlias("name")
-        public String getHeaderName() {
-            return super.getHeaderName();
-        }
-    }
-}
-
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
deleted file mode 100644
index 0215efc..0000000
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemoveHeadersStepParser.java
+++ /dev/null
@@ -1,29 +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.parser;
-
-import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.RemoveHeadersDefinition;
-
-@YAMLStepParser("remove-headers")
-public class RemoveHeadersStepParser implements ProcessorStepParser {
-    @Override
-    public ProcessorDefinition<?> toProcessor(Context context) {
-        return context.node(RemoveHeadersDefinition.class);
-    }
-}
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
deleted file mode 100644
index 91222f8..0000000
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemovePropertiesStepParser.java
+++ /dev/null
@@ -1,30 +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.parser;
-
-import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.RemovePropertiesDefinition;
-
-@YAMLStepParser("remove-properties")
-public class RemovePropertiesStepParser implements ProcessorStepParser {
-    @Override
-    public ProcessorDefinition<?> toProcessor(Context context) {
-        return context.node(RemovePropertiesDefinition.class);
-    }
-}
-
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
deleted file mode 100644
index 947f36f..0000000
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RemovePropertyStepParser.java
+++ /dev/null
@@ -1,46 +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.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.model.ProcessorDefinition;
-import org.apache.camel.model.RemovePropertyDefinition;
-import org.apache.camel.reifier.RemovePropertyReifier;
-
-@YAMLStepParser("remove-property")
-public class RemovePropertyStepParser implements ProcessorStepParser {
-    @Override
-    public ProcessorDefinition<?> toProcessor(Context context) {
-        return context.node(Definition.class);
-    }
-
-    @YAMLNodeDefinition(reifiers = RemovePropertyReifier.class)
-    public static final class Definition extends RemovePropertyDefinition {
-        @JsonAlias("name")
-        public void setPropertyName(String headerName) {
-            super.setPropertyName(headerName);
-        }
-
-        @JsonAlias("name")
-        public String getPropertyName() {
-            return super.getPropertyName();
-        }
-    }
-}
-
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index de1cce1..6200a2e 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -24,6 +24,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ResequenceDefinition;
 import org.apache.camel.model.config.BatchResequencerConfig;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 978cfed..99cb057 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -24,6 +24,8 @@ 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.k.loader.yaml.spi.StartStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.rest.RestBindingMode;
 import org.apache.camel.model.rest.RestDefinition;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 3b8dfaf..c227a32 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -24,6 +24,8 @@ 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.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StartStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RouteDefinition;
 
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 4e43cb1..dd55300 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -19,6 +19,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RoutingSlipDefinition;
 import org.apache.camel.reifier.RoutingSlipReifier;
@@ -31,7 +32,7 @@ public class RoutingSlipStepParser implements 
ProcessorStepParser {
     }
 
     @YAMLNodeDefinition(reifiers = RoutingSlipReifier.class)
-    public static final class Definition extends RoutingSlipDefinition 
implements HasExpression {
+    public static final class Definition<T extends ProcessorDefinition<T>> 
extends RoutingSlipDefinition<T> implements HasExpression {
         public Definition() {
             super((Expression) null, RoutingSlipDefinition.DEFAULT_DELIMITER);
         }
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SagaStepParser.java
 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SagaStepParser.java
index 4772b10..5f6186b 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SagaStepParser.java
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SagaStepParser.java
@@ -21,6 +21,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SagaDefinition;
 import org.apache.camel.reifier.SagaReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 6cba016..48a55c7 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -21,6 +21,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SamplingDefinition;
 import org.apache.camel.reifier.SamplingReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ScriptStepParser.java
 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ScriptStepParser.java
index 105a1c5..8abe16c 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ScriptStepParser.java
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ScriptStepParser.java
@@ -18,6 +18,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ScriptDefinition;
 import org.apache.camel.reifier.ScriptReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ServiceCallStepParser.java
 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ServiceCallStepParser.java
index 9c708f2..2b9a8d1 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ServiceCallStepParser.java
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ServiceCallStepParser.java
@@ -18,6 +18,7 @@ package org.apache.camel.k.loader.yaml.parser;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
+import org.apache.camel.k.loader.yaml.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.cloud.ServiceCallDefinition;
 import org.apache.camel.model.cloud.ServiceCallExpressionConfiguration;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index a879b9f..f4fddb1 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -18,6 +18,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetBodyDefinition;
 import org.apache.camel.reifier.SetBodyReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SetExchangePatternStepParser.java
 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SetExchangePatternStepParser.java
index 3ad2ad5..81aa70a 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SetExchangePatternStepParser.java
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/SetExchangePatternStepParser.java
@@ -17,6 +17,7 @@
 package org.apache.camel.k.loader.yaml.parser;
 
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
+import org.apache.camel.k.loader.yaml.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetExchangePatternDefinition;
 
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 4d3987e..c6caf62 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -18,6 +18,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetHeaderDefinition;
 import org.apache.camel.reifier.SetHeaderReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index d55445b..5d09482 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -18,6 +18,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetPropertyDefinition;
 import org.apache.camel.reifier.SetPropertyReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index be6fe23..90f9004 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -18,6 +18,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SortDefinition;
 import org.apache.camel.reifier.SortReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index e641ad9..3faabca 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -21,6 +21,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SplitDefinition;
 import org.apache.camel.reifier.SplitReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StepStepParser.java
 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StepStepParser.java
index 26450ff..006133e 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StepStepParser.java
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StepStepParser.java
@@ -21,6 +21,8 @@ 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.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.StepDefinition;
 
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
deleted file mode 100644
index 7e147bc..0000000
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/StopStepParser.java
+++ /dev/null
@@ -1,30 +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.parser;
-
-import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.StopDefinition;
-
-@YAMLStepParser("stop")
-public class StopStepParser implements ProcessorStepParser {
-    @Override
-    public ProcessorDefinition<?> toProcessor(Context context) {
-        return context.node(StopDefinition.class);
-    }
-}
-
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
deleted file mode 100644
index a21fc33..0000000
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ThreadsStepParser.java
+++ /dev/null
@@ -1,30 +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.parser;
-
-import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.ThreadsDefinition;
-
-@YAMLStepParser("threads")
-public class ThreadsStepParser implements ProcessorStepParser {
-    @Override
-    public ProcessorDefinition<?> toProcessor(Context context) {
-        return context.node(ThreadsDefinition.class);
-    }
-}
-
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index b2ee2ac..90e8308 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -18,6 +18,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ThrottleDefinition;
 import org.apache.camel.reifier.ThrottleReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ThrowExceptionStepParser.java
 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ThrowExceptionStepParser.java
index 455e565..3933013 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ThrowExceptionStepParser.java
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ThrowExceptionStepParser.java
@@ -17,6 +17,7 @@
 package org.apache.camel.k.loader.yaml.parser;
 
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
+import org.apache.camel.k.loader.yaml.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ThrowExceptionDefinition;
 
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index 21ab519..19cc5b3 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -23,11 +23,12 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ToDynamicDefinition;
 import org.apache.camel.util.URISupport;
 
-@YAMLStepParser("tod")
+@YAMLStepParser({"tod", "to-d"})
 public class ToDynamicStepParser implements ProcessorStepParser {
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index ad2d4bf..66ba2d3 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -23,6 +23,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ToDefinition;
 import org.apache.camel.util.URISupport;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/TransactedStepParser.java
 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/TransactedStepParser.java
index 01be806..1fd34e0 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/TransactedStepParser.java
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/TransactedStepParser.java
@@ -17,6 +17,7 @@
 package org.apache.camel.k.loader.yaml.parser;
 
 import org.apache.camel.k.annotation.yaml.YAMLStepParser;
+import org.apache.camel.k.loader.yaml.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.TransactedDefinition;
 
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index c09c99c..a12f1a4 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -18,6 +18,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.TransformDefinition;
 import org.apache.camel.reifier.TransformReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RollbackStepParser.java
 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/TypedProcessorStepParser.java
similarity index 72%
rename from 
camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RollbackStepParser.java
rename to 
camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/TypedProcessorStepParser.java
index 4931752..cac8d37 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RollbackStepParser.java
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/TypedProcessorStepParser.java
@@ -16,15 +16,19 @@
  */
 package org.apache.camel.k.loader.yaml.parser;
 
-import org.apache.camel.k.annotation.yaml.YAMLStepParser;
+import org.apache.camel.k.loader.yaml.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.RollbackDefinition;
 
-@YAMLStepParser("rollback")
-public class RollbackStepParser implements ProcessorStepParser {
+@SuppressWarnings("rawtypes")
+public class TypedProcessorStepParser implements ProcessorStepParser {
+    private final Class<? extends ProcessorDefinition> type;
+
+    public TypedProcessorStepParser(Class<? extends ProcessorDefinition> type) 
{
+        this.type = type;
+    }
+
     @Override
     public ProcessorDefinition<?> toProcessor(Context context) {
-        return context.node(RollbackDefinition.class);
+        return context.node(type);
     }
 }
-
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index d4b0e90..aec8e98 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -18,6 +18,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.UnmarshalDefinition;
 import org.apache.camel.reifier.UnmarshalReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index ca0740a..abd6182 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -18,6 +18,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ValidateDefinition;
 import org.apache.camel.reifier.ValidateReifier;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
index ca65930..9667bfd 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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
@@ -24,6 +24,7 @@ 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.spi.ProcessorStepParser;
 import org.apache.camel.model.ExpressionSubElementDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetHeaderDefinition;
@@ -34,7 +35,7 @@ import org.apache.camel.reifier.WireTapReifier;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
 
-@YAMLStepParser("wiretap")
+@YAMLStepParser({"wiretap", "wire-tap"})
 public class WireTapStepParser implements ProcessorStepParser {
     @SuppressWarnings("unchecked")
     @Override
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/ProcessorStepParser.java
similarity index 77%
rename from 
camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/ProcessorStepParser.java
index 5c34347..ee520c3 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/ProcessorStepParser.java
@@ -14,9 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.loader.yaml.parser;
+package org.apache.camel.k.loader.yaml.spi;
 
-import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.model.ProcessorDefinition;
 
 @FunctionalInterface
@@ -28,10 +27,11 @@ public interface ProcessorStepParser extends StepParser {
     ProcessorDefinition<?> toProcessor(Context context);
 
     static ProcessorDefinition<?> invoke(Context context, String stepId) {
-        try {
-            return StepParser.lookup(context.camelContext(), 
ProcessorStepParser.class, stepId).toProcessor(context);
-        } catch (NoFactoryAvailableException e) {
-            throw new RuntimeException(e);
-        }
+        return context.lookup(ProcessorStepParser.class, 
stepId).toProcessor(context);
+    }
+
+    @SuppressWarnings("rawtypes")
+    static ProcessorStepParser forType(Class<? extends ProcessorDefinition> 
type) {
+        return c -> c.node(type);
     }
 }
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/StartStepParser.java
similarity index 77%
rename from 
camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/StartStepParser.java
index 2fb2333..f80bcdb 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/StartStepParser.java
@@ -14,9 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.loader.yaml.parser;
+package org.apache.camel.k.loader.yaml.spi;
 
-import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.model.ProcessorDefinition;
 
 @FunctionalInterface
@@ -28,10 +27,6 @@ public interface StartStepParser extends StepParser {
     ProcessorDefinition<?> toStartProcessor(Context context);
 
     static ProcessorDefinition<?> invoke(Context context, String stepId) {
-        try {
-            return StepParser.lookup(context.camelContext(), 
StartStepParser.class, stepId).toStartProcessor(context);
-        } catch (NoFactoryAvailableException e) {
-            throw new RuntimeException(e);
-        }
+        return context.lookup(StartStepParser.class, 
stepId).toStartProcessor(context);
     }
 }
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/StepParser.java
similarity index 56%
rename from 
camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/StepParser.java
index 871218e..2fab5f2 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/StepParser.java
@@ -14,60 +14,47 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.loader.yaml.parser;
+package org.apache.camel.k.loader.yaml.spi;
 
 import java.io.IOException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.NoFactoryAvailableException;
+import org.apache.camel.spi.HasCamelContext;
 import org.apache.camel.util.ObjectHelper;
 
 public interface StepParser {
     String SERVICE_LOCATION = 
"META-INF/services/org/apache/camel/k/loader/yaml-parser/";
 
-    @SuppressWarnings("unchecked")
-    static <T extends StepParser> T lookup(CamelContext camelContext, Class<T> 
type, String stepId) throws NoFactoryAvailableException {
-        T converter = camelContext.getRegistry().lookupByNameAndType(stepId, 
type);
-        if (converter == null) {
-            converter = camelContext.adapt(ExtendedCamelContext.class)
-                .getFactoryFinder(SERVICE_LOCATION)
-                .newInstance(stepId, type)
-                .orElseThrow(() -> new RuntimeException("No handler for step 
with id: " + stepId));
-        }
-
-        return converter;
-    }
-
-    class Context {
+    /**
+     * Context for step parsing.
+     */
+    class Context implements HasCamelContext {
         private final ObjectMapper mapper;
         private final CamelContext camelContext;
         private final JsonNode node;
+        private final Resolver resolver;
 
-        public Context(CamelContext camelContext, ObjectMapper mapper, 
JsonNode node) {
+        public Context(CamelContext camelContext, ObjectMapper mapper, 
JsonNode node, Resolver resolver) {
             this.camelContext = camelContext;
             this.mapper = mapper;
             this.node = node;
+            this.resolver = ObjectHelper.notNull(resolver, "resolver");
         }
 
-        public CamelContext camelContext() {
+        @Override
+        public CamelContext getCamelContext() {
             return camelContext;
         }
 
-        public <T extends CamelContext> T camelContext(Class<T> type) {
-            return camelContext.adapt(type);
-        }
-
         public JsonNode node() {
             return node;
         }
 
-        public ObjectMapper mapper() {
-            return mapper;
-        }
-
         public <T> T node(Class<T> type) {
             ObjectHelper.notNull(node, "node");
             ObjectHelper.notNull(type, "type");
@@ -87,13 +74,46 @@ public interface StepParser {
             return definition;
         }
 
+        public <T extends StepParser> T lookup(Class<T> type, String stepId) {
+            StepParser parser = resolver.resolve(camelContext, stepId);
+            if (type.isInstance(parser)) {
+                return type.cast(parser);
+            }
+
+            throw new RuntimeException("No handler for step with id: " + 
stepId);
+        }
+
         public static Context of(Context context, JsonNode step) {
             return new Context(
                 context.camelContext,
                 context.mapper,
-                step
+                step,
+                context.resolver
             );
         }
     }
 
+    /**
+     * Step resolver.
+     */
+    interface Resolver {
+        StepParser resolve(CamelContext camelContext, String stepId);
+
+        default StepParser lookup(CamelContext camelContext, String stepId) {
+            StepParser answer = 
camelContext.getRegistry().lookupByNameAndType(stepId, StepParser.class);
+            if (answer == null) {
+                answer = camelContext.adapt(ExtendedCamelContext.class)
+                    .getFactoryFinder(SERVICE_LOCATION)
+                    .newInstance(stepId, StepParser.class)
+                    .orElseThrow(() -> new RuntimeException("No handler for 
step with id: " + stepId));
+            }
+
+            return answer;
+        }
+
+        static Resolver caching(Resolver delegate) {
+            final ConcurrentMap<String, StepParser> cache = new 
ConcurrentHashMap<>();
+            return (camelContext, stepId) -> cache.computeIfAbsent(stepId, key 
-> delegate.resolve(camelContext, key));
+        }
+    }
 }
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/StepParserException.java
similarity index 97%
rename from 
camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/StepParserException.java
index 171f968..08a39c6 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/StepParserException.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.loader.yaml.parser;
+package org.apache.camel.k.loader.yaml.spi;
 
 import java.util.Arrays;
 import java.util.List;
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/StepParserSupport.java
similarity index 97%
rename from 
camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/StepParserSupport.java
index e123581..0a70f55 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/spi/StepParserSupport.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.loader.yaml.parser;
+package org.apache.camel.k.loader.yaml.spi;
 
 import java.util.List;
 
@@ -46,6 +46,7 @@ public final class StepParserSupport {
         ProcessorDefinition<?> current = parent;
 
         for (Step step : steps) {
+
             ProcessorDefinition<?> child = ProcessorStepParser.invoke(
                 ProcessorStepParser.Context.of(context, step.node),
                 step.id
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/support/RemoveHeaderDefinitionMixIn.java
similarity index 64%
rename from 
camel-k-loader-yaml/camel-k-loader-yaml-common/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/support/RemoveHeaderDefinitionMixIn.java
index 2019c5c..2716f53 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/support/RemoveHeaderDefinitionMixIn.java
@@ -14,17 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.loader.yaml.parser;
+package org.apache.camel.k.loader.yaml.support;
 
-import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.model.LogDefinition;
-import org.apache.camel.model.ProcessorDefinition;
+import com.fasterxml.jackson.annotation.JsonAlias;
+import org.apache.camel.k.annotation.yaml.YAMLMixIn;
 
-@YAMLStepParser("log")
-public class LogStepParser implements ProcessorStepParser {
-    @Override
-    public ProcessorDefinition<?> toProcessor(Context context) {
-        return context.node(LogDefinition.class);
-    }
-}
+@YAMLMixIn(org.apache.camel.model.RemoveHeaderDefinition.class)
+public abstract class RemoveHeaderDefinitionMixIn {
+    @JsonAlias({"name", "header-name"})
+    public abstract void setHeaderName(String headerName);
 
+    @JsonAlias({"name", "header-name"})
+    public abstract String getHeaderName();
+}
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/support/RemovePropertyDefinitionMixIn.java
similarity index 63%
rename from 
camel-k-loader-yaml/camel-k-loader-yaml-common/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/support/RemovePropertyDefinitionMixIn.java
index a60f712..30b3695 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/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/support/RemovePropertyDefinitionMixIn.java
@@ -14,17 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.loader.yaml.parser;
+package org.apache.camel.k.loader.yaml.support;
 
-import org.apache.camel.k.annotation.yaml.YAMLStepParser;
-import org.apache.camel.model.BeanDefinition;
-import org.apache.camel.model.ProcessorDefinition;
+import com.fasterxml.jackson.annotation.JsonAlias;
+import org.apache.camel.k.annotation.yaml.YAMLMixIn;
 
-@YAMLStepParser("bean")
-public class BeanStepParser implements ProcessorStepParser {
-    @Override
-    public ProcessorDefinition<?> toProcessor(Context context) {
-        return context.node(BeanDefinition.class);
-    }
-}
+@YAMLMixIn(org.apache.camel.model.RemovePropertyDefinition.class)
+public abstract class RemovePropertyDefinitionMixIn {
+    @JsonAlias({"name", "property-name"})
+    public abstract void setPropertyName(String headerName);
 
+    @JsonAlias({"name", "property-name"})
+    public abstract String getPropertyName();
+}
diff --git 
a/camel-k-loader-yaml/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
index ed865c3..1c1b4cd 100644
--- 
a/camel-k-loader-yaml/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
@@ -38,8 +38,8 @@ import org.apache.camel.k.Source;
 import org.apache.camel.k.SourceLoader;
 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.spi.StartStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParser;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RoutesDefinition;
@@ -93,13 +93,14 @@ public class YamlSourceLoader implements SourceLoader {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
+                final StepParser.Resolver resolver = 
StepParser.Resolver.caching(new YamlStepResolver());
                 final CamelContext camelContext = getContext();
                 final List<RouteDefinition> routes = new ArrayList<>();
                 final List<RestDefinition> rests = new ArrayList<>();
 
                 try (is) {
                     for (Step step : mapper.readValue(is, Step[].class)) {
-                        final StepParser.Context context = new 
StepParser.Context(camelContext, mapper, step.node);
+                        final StepParser.Context context = new 
StepParser.Context(camelContext, mapper, step.node, resolver);
                         final ProcessorDefinition<?> root = 
StartStepParser.invoke(context, step.id);
 
                         if (root == null) {
diff --git 
a/camel-k-loader-yaml/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
index 97d5b42..597d429 100644
--- 
a/camel-k-loader-yaml/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
@@ -21,8 +21,9 @@ import groovy.util.logging.Slf4j
 import org.apache.camel.CamelContext
 import org.apache.camel.component.mock.MockEndpoint
 import org.apache.camel.impl.DefaultCamelContext
-import org.apache.camel.k.loader.yaml.parser.ProcessorStepParser
-import org.apache.camel.k.loader.yaml.parser.StepParser
+import org.apache.camel.k.loader.yaml.spi.ProcessorStepParser
+import org.apache.camel.k.loader.yaml.spi.StartStepParser
+import org.apache.camel.k.loader.yaml.spi.StepParser
 import org.apache.camel.model.ProcessorDefinition
 import spock.lang.Specification
 
@@ -30,17 +31,18 @@ import java.nio.charset.StandardCharsets
 
 @Slf4j
 class TestSupport extends Specification {
+    static def RESOLVER =  new YamlStepResolver()
     static def MAPPER = new YamlSourceLoader().mapper()
 
     static StepParser.Context stepContext(String content) {
         def node = MAPPER.readTree(content.stripMargin())
         def cctx = new DefaultCamelContext()
 
-        return new StepParser.Context(cctx, MAPPER, node)
+        return new StepParser.Context(cctx, MAPPER, node, RESOLVER)
     }
 
     static StepParser.Context stepContext(JsonNode content) {
-        return new StepParser.Context(new DefaultCamelContext(), MAPPER, 
content)
+        return new StepParser.Context(new DefaultCamelContext(), MAPPER, 
content, RESOLVER)
     }
 
     static CamelContext startContext(String content) {
@@ -105,4 +107,17 @@ class TestSupport extends Specification {
     static <U extends ProcessorStepParser> ProcessorDefinition<?> 
toProcessor(Class<U> type, String content) {
         return 
type.getConstructor().newInstance().toProcessor(stepContext(content))
     }
+
+    static ProcessorDefinition<?> toProcessor(String id, String content) {
+        def ctx = stepContext(content)
+        def parser = RESOLVER.resolve(ctx.camelContext, id)
+
+        if (parser instanceof ProcessorStepParser) {
+            return parser.toProcessor(ctx)
+        }
+        if (parser instanceof StartStepParser) {
+            return parser.toStartProcessor(ctx)
+        }
+        throw new IllegalArgumentException("No parser of ${id}")
+    }
 }
diff --git 
a/camel-k-loader-yaml/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
index 78f1486..30f1a19 100644
--- 
a/camel-k-loader-yaml/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
@@ -21,20 +21,16 @@ import org.apache.camel.k.loader.yaml.TestSupport
 import org.apache.camel.model.BeanDefinition
 
 class BeanTest extends TestSupport {
-
     def "definition"() {
-        given:
-            def stepContext = stepContext('''
+        when:
+            def processor = toProcessor('bean', '''
                  ref: "myBean"
                  method: "process"
             ''')
-        when:
-            def processor = new BeanStepParser().toProcessor(stepContext)
         then:
             with(processor, BeanDefinition) {
                 ref == 'myBean'
                 method == 'process'
             }
     }
-
 }
diff --git 
a/camel-k-loader-yaml/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
index 08d1a24..474acdd 100644
--- 
a/camel-k-loader-yaml/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
@@ -17,6 +17,7 @@
 package org.apache.camel.k.loader.yaml.parser
 
 import org.apache.camel.k.loader.yaml.TestSupport
+import org.apache.camel.k.loader.yaml.spi.StepParserException
 import org.apache.camel.model.ChoiceDefinition
 
 class ChoiceTest extends TestSupport {
diff --git 
a/camel-k-loader-yaml/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
index a300567..a431337 100644
--- 
a/camel-k-loader-yaml/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
@@ -21,14 +21,12 @@ import org.apache.camel.model.ClaimCheckDefinition
 
 class ClaimCheckTest extends TestSupport {
     def "definition"() {
-        given:
-            def stepContext = stepContext('''
+        when:
+            def processor = toProcessor('claim-check', '''
                  operation: "Push"
                  key: "foo"
                  filter: "header:(foo|bar)"
             ''')
-        when:
-            def processor = new ClaimCheckStepParser().toProcessor(stepContext)
         then:
             with(processor, ClaimCheckDefinition) {
                 operation == 'Push'
diff --git 
a/camel-k-loader-yaml/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
index 5c1daa9..a5cfc8b 100644
--- 
a/camel-k-loader-yaml/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
@@ -21,14 +21,12 @@ import org.apache.camel.model.ConvertBodyDefinition
 
 class ConvertBodyTest extends TestSupport {
     def "definition"() {
-        given:
-            def stepContext = stepContext('''
+        when:
+            def processor = toProcessor('convert-body-to','''
                  type: "java.lang.String"
                  type-class: "java.lang.String"
                  charset: "UTF8"
             ''')
-        when:
-            def processor = new 
ConvertBodyStepParser().toProcessor(stepContext)
         then:
             with(processor, ConvertBodyDefinition) {
                 type == 'java.lang.String'
diff --git 
a/camel-k-loader-yaml/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
index 14b4a5b..87161ed 100644
--- 
a/camel-k-loader-yaml/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
@@ -17,6 +17,7 @@
 package org.apache.camel.k.loader.yaml.parser
 
 import org.apache.camel.k.loader.yaml.TestSupport
+import org.apache.camel.k.loader.yaml.spi.StepParserException
 import org.apache.camel.model.FromDefinition
 import org.apache.camel.model.RouteDefinition
 
diff --git 
a/camel-k-loader-yaml/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
index 06b8c98..eeb1e9f 100644
--- 
a/camel-k-loader-yaml/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
@@ -23,14 +23,12 @@ import org.apache.camel.model.LogDefinition
 class LogTest extends TestSupport {
 
     def "definition"() {
-        given:
-            def stepContext = stepContext('''
+        when:
+            def processor =toProcessor('log', '''
                  logging-level: "ERROR"
                  message: "test"
                  log-name: "yaml"
             ''')
-        when:
-            def processor = new LogStepParser().toProcessor(stepContext)
         then:
             with(processor, LogDefinition) {
                 loggingLevel == 'ERROR'
diff --git 
a/camel-k-loader-yaml/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
index 89955c6..68a11dd 100644
--- 
a/camel-k-loader-yaml/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
@@ -18,6 +18,7 @@ package org.apache.camel.k.loader.yaml.parser
 
 
 import org.apache.camel.k.loader.yaml.TestSupport
+import org.apache.camel.k.loader.yaml.spi.StepParserException
 import org.apache.camel.model.PipelineDefinition
 
 class PipelineTest extends TestSupport {
diff --git 
a/camel-k-loader-yaml/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
index 39ac88a..4e56e74 100644
--- 
a/camel-k-loader-yaml/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
@@ -22,12 +22,21 @@ import org.apache.camel.model.RemoveHeaderDefinition
 class RemoveHeaderTest extends TestSupport {
 
     def "definition"() {
-        given:
-            def stepContext = stepContext('''
-                 name: test
+        when:
+            def processor = toProcessor('remove-header', '''
+                 header-name: test
             ''')
+        then:
+            with(processor, RemoveHeaderDefinition) {
+                headerName == 'test'
+            }
+    }
+
+    def "definition (alias)"() {
         when:
-            def processor = new 
RemoveHeaderStepParser().toProcessor(stepContext)
+            def processor = toProcessor('remove-header', '''
+                 name: test
+            ''')
         then:
             with(processor, RemoveHeaderDefinition) {
                 headerName == 'test'
diff --git 
a/camel-k-loader-yaml/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
index 4fd49ce..7bedad6 100644
--- 
a/camel-k-loader-yaml/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
@@ -22,16 +22,14 @@ import org.apache.camel.model.RemoveHeadersDefinition
 class RemoveHeadersTest extends org.apache.camel.k.loader.yaml.TestSupport {
 
     def "definition"() {
-        given:
-            def stepContext = stepContext('''
+        when:
+            def processor = toProcessor('remove-headers', '''
                  pattern: toRemove
                  exclude-pattern: toExclude
                  exclude-patterns:
                    - toExclude1
                    - toExclude2
             ''')
-        when:
-            def processor = new 
RemoveHeadersStepParser().toProcessor(stepContext)
         then:
             with(processor, RemoveHeadersDefinition) {
                 pattern == 'toRemove'
diff --git 
a/camel-k-loader-yaml/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
index 90a151e..15193d5 100644
--- 
a/camel-k-loader-yaml/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
@@ -31,7 +31,13 @@ class RemovePropertiesTest extends 
org.apache.camel.k.loader.yaml.TestSupport {
                    - toExclude2
             ''')
         when:
-            def processor = new 
RemovePropertiesStepParser().toProcessor(stepContext)
+            def processor = toProcessor('remove-properties', '''
+                 pattern: toRemove
+                 exclude-pattern: toExclude
+                 exclude-patterns:
+                   - toExclude1
+                   - toExclude2
+            ''')
         then:
             with(processor, RemovePropertiesDefinition) {
                 pattern == 'toRemove'
diff --git 
a/camel-k-loader-yaml/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
index edd0412..6687f44 100644
--- 
a/camel-k-loader-yaml/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
@@ -22,16 +22,24 @@ import org.apache.camel.model.RemovePropertyDefinition
 class RemovePropertyTest extends TestSupport {
 
     def "definition"() {
-        given:
-            def stepContext = stepContext('''
-                 name: test
-            ''')
         when:
-            def processor = new 
RemovePropertyStepParser().toProcessor(stepContext)
+            def processor = toProcessor('remove-property', '''
+                 property-name: test
+            ''')
         then:
             with(processor, RemovePropertyDefinition) {
                 propertyName == 'test'
             }
     }
 
+    def "definition (alias)"() {
+        when:
+            def processor = toProcessor('remove-property', '''
+                 name: test
+            ''')
+        then:
+            with(processor, RemovePropertyDefinition) {
+                propertyName == 'test'
+            }
+    }
 }
diff --git 
a/camel-k-loader-yaml/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
index 9fe806a..30d090e 100644
--- 
a/camel-k-loader-yaml/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
@@ -17,6 +17,7 @@
 package org.apache.camel.k.loader.yaml.parser
 
 import org.apache.camel.k.loader.yaml.TestSupport
+import org.apache.camel.k.loader.yaml.spi.StepParserException
 import org.apache.camel.model.RouteDefinition
 import org.apache.camel.model.rest.GetVerbDefinition
 
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RollbackTest.groovy
 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RollbackTest.groovy
index 3ba76f6..71dc515 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RollbackTest.groovy
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/RollbackTest.groovy
@@ -17,25 +17,21 @@
 package org.apache.camel.k.loader.yaml.parser
 
 import org.apache.camel.k.loader.yaml.TestSupport
-import org.apache.camel.model.IdempotentConsumerDefinition
-import org.apache.camel.model.LogDefinition
 import org.apache.camel.model.RollbackDefinition
 
 class RollbackTest extends TestSupport {
 
     def "definition"() {
-        given:
-        def stepContext = stepContext('''
+        when:
+            def processor = toProcessor('rollback', '''
                  mark-rollback-only: "true"
                  message: "test"
             ''')
-        when:
-        def processor = new RollbackStepParser().toProcessor(stepContext)
         then:
-        with(processor, RollbackDefinition) {
-            markRollbackOnly == "true"
-            message == 'test'
-        }
+            with(processor, RollbackDefinition) {
+                markRollbackOnly == "true"
+                message == 'test'
+            }
     }
 
 }
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetExchangePatternTest.groovy
 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetExchangePatternTest.groovy
index a7d3531..9efb531 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetExchangePatternTest.groovy
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/SetExchangePatternTest.groovy
@@ -23,12 +23,10 @@ import org.apache.camel.model.SetExchangePatternDefinition
 class SetExchangePatternTest extends TestSupport {
 
     def "definition"() {
-        given:
-            def stepContext = stepContext('''
+        when:
+            def processor = toProcessor('set-exchange-pattern', '''
                  pattern: "InOut"
             ''')
-        when:
-            def processor = new 
SetExchangePatternStepParser().toProcessor(stepContext)
         then:
             with(processor, SetExchangePatternDefinition) {
                 pattern == ExchangePattern.InOut.name()
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/StepTest.groovy
 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/StepTest.groovy
index a25b269..17ee0dd 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/StepTest.groovy
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/StepTest.groovy
@@ -17,6 +17,7 @@
 package org.apache.camel.k.loader.yaml.parser
 
 import org.apache.camel.k.loader.yaml.TestSupport
+import org.apache.camel.k.loader.yaml.spi.StepParserException
 import org.apache.camel.model.StepDefinition
 
 class StepTest extends TestSupport {
@@ -40,7 +41,7 @@ class StepTest extends TestSupport {
 
     def "should fail without steps"() {
         given:
-            def stepContext = 
stepContext(TestSupport.MAPPER.createObjectNode());
+            def stepContext = stepContext(MAPPER.createObjectNode());
         when:
             new StepStepParser().toProcessor(stepContext)
         then:
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/TransactedTest.groovy
 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/StopTest.groovy
similarity index 73%
copy from 
camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/TransactedTest.groovy
copy to 
camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/StopTest.groovy
index 23253f9..f89d68d 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/TransactedTest.groovy
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/StopTest.groovy
@@ -16,19 +16,18 @@
  */
 package org.apache.camel.k.loader.yaml.parser
 
+
 import org.apache.camel.k.loader.yaml.TestSupport
-import org.apache.camel.model.TransactedDefinition
+import org.apache.camel.model.StopDefinition
 
-class TransactedTest extends TestSupport {
+class StopTest extends TestSupport {
 
-    def "definition with expression"() {
+    def "definition"() {
         when:
-            def processor = toProcessor(TransactedStepParser, '''
-                 ref: "my-policy"
-            ''')
+            def processor = toProcessor('stop', '''{}''')
         then:
-            with(processor, TransactedDefinition) {
-                ref == "my-policy"
+            with(processor, StopDefinition) {
             }
     }
+
 }
diff --git 
a/camel-k-loader-yaml/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
index 8cb63c0..0657c0a 100644
--- 
a/camel-k-loader-yaml/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
@@ -27,7 +27,9 @@ class ThreadsTest extends TestSupport {
                  pool-size: 5
             ''')
         when:
-            def processor = new ThreadsStepParser().toProcessor(stepContext)
+            def processor = toProcessor('threads', '''
+                 pool-size: 5
+            ''')
         then:
             with (processor, ThreadsDefinition) {
                 poolSize == '5'
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ThrowExceptionTest.groovy
 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ThrowExceptionTest.groovy
index d592d14..1d1295c 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ThrowExceptionTest.groovy
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ThrowExceptionTest.groovy
@@ -22,18 +22,16 @@ import org.apache.camel.model.ThrowExceptionDefinition
 class ThrowExceptionTest extends TestSupport {
 
     def "definition"() {
-        given:
-            def stepContext = stepContext('''
-                     exception-type: "java.lang.IllegalArgumentException"
-                     message: "test"
-                ''')
         when:
-            def processor = new 
ThrowExceptionStepParser().toProcessor(stepContext)
-        then:
-            with(processor, ThrowExceptionDefinition) {
-                message == 'test'
-                exceptionType == "java.lang.IllegalArgumentException"
-            }
-    }
+            def processor = toProcessor('throw-exception', '''
+                    exception-type: "java.lang.IllegalArgumentException"
+                    message: "test"
+                ''')
+            then:
+                with(processor, ThrowExceptionDefinition) {
+                    message == 'test'
+                    exceptionType == "java.lang.IllegalArgumentException"
+                }
+        }
 
-}
+    }
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/TransactedTest.groovy
 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/TransactedTest.groovy
index 23253f9..ed60dfe 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/TransactedTest.groovy
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/TransactedTest.groovy
@@ -23,7 +23,7 @@ class TransactedTest extends TestSupport {
 
     def "definition with expression"() {
         when:
-            def processor = toProcessor(TransactedStepParser, '''
+            def processor = toProcessor('transacted', '''
                  ref: "my-policy"
             ''')
         then:
diff --git 
a/camel-k-quarkus/camel-k-quarkus-core/deployment/src/main/java/org/apache/camel/k/core/quarkus/deployment/DeploymentSupport.java
 
b/camel-k-quarkus/camel-k-quarkus-core/deployment/src/main/java/org/apache/camel/k/core/quarkus/deployment/DeploymentSupport.java
index 01a2876..9803f9a 100644
--- 
a/camel-k-quarkus/camel-k-quarkus-core/deployment/src/main/java/org/apache/camel/k/core/quarkus/deployment/DeploymentSupport.java
+++ 
b/camel-k-quarkus/camel-k-quarkus-core/deployment/src/main/java/org/apache/camel/k/core/quarkus/deployment/DeploymentSupport.java
@@ -16,6 +16,12 @@
  */
 package org.apache.camel.k.core.quarkus.deployment;
 
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+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;
@@ -39,4 +45,52 @@ public final class DeploymentSupport {
     public static Iterable<ClassInfo> getAllKnownSubclasses(IndexView view, 
Class<?> type) {
         return 
view.getAllKnownSubclasses(DotName.createSimple(type.getName()));
     }
+
+    public static Iterable<ClassInfo> getAllKnownImplementors(IndexView view, 
DotName type) {
+        return view.getAllKnownImplementors(type);
+    }
+
+    public static Iterable<ClassInfo> getAllKnownSubclasses(IndexView view, 
DotName type) {
+        return view.getAllKnownSubclasses(type);
+    }
+
+    public static Iterable<ClassInfo> getAnnotated(IndexView view, String 
name) {
+        return getAnnotated(view, DotName.createSimple(name));
+    }
+
+    public static Iterable<ClassInfo> getAnnotated(IndexView view, Class<?> 
type) {
+        return getAnnotated(view, DotName.createSimple(type.getName()));
+    }
+
+    public 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());
+    }
+
+
+    public static ReflectiveClassBuildItem 
reflectiveClassBuildItem(ClassInfo... classInfos) {
+        return new ReflectiveClassBuildItem(
+            true,
+            false,
+            Stream.of(classInfos)
+                .map(ClassInfo::name)
+                .map(DotName::toString)
+                .toArray(String[]::new)
+        );
+    }
+
+    public static ReflectiveClassBuildItem reflectiveClassBuildItem(boolean 
methods, boolean fields, ClassInfo... classInfos) {
+        return new ReflectiveClassBuildItem(
+            methods,
+            fields,
+            Stream.of(classInfos)
+                .map(ClassInfo::name)
+                .map(DotName::toString)
+                .toArray(String[]::new)
+        );
+    }
+
 }
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 f62abb4..c49c1c4 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,8 +16,6 @@
  */
 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;
@@ -26,29 +24,29 @@ 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.parser.StepParser;
-import org.apache.camel.k.loader.yaml.support.Any23DataFormatMixIn;
-import org.apache.camel.k.loader.yaml.support.ExpressionNodeMixIn;
-import org.apache.camel.k.loader.yaml.support.ProcessorDefinitionMixIn;
-import org.apache.camel.k.loader.yaml.support.XStreamDataFormatMixIn;
+import org.apache.camel.k.loader.yaml.spi.StepParser;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.quarkus.core.deployment.CamelServicePatternBuildItem;
-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;
 
+import static 
org.apache.camel.k.core.quarkus.deployment.DeploymentSupport.getAllKnownImplementors;
+import static 
org.apache.camel.k.core.quarkus.deployment.DeploymentSupport.getAllKnownSubclasses;
+import static 
org.apache.camel.k.core.quarkus.deployment.DeploymentSupport.getAnnotated;
+import static 
org.apache.camel.k.core.quarkus.deployment.DeploymentSupport.reflectiveClassBuildItem;
+
 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");
+    public static final DotName YAML_MIXIN_ANNOTATION = 
DotName.createSimple("org.apache.camel.k.annotation.yaml.YAMLMixIn");
 
     @BuildStep
     CamelServicePatternBuildItem servicePatterns() {
         return new CamelServicePatternBuildItem(
-            CamelServicePatternBuildItem.CamelServiceDestination.REGISTRY,
+            CamelServicePatternBuildItem.CamelServiceDestination.DISCOVERY,
             true,
             StepParser.SERVICE_LOCATION + "/*");
     }
@@ -61,72 +59,31 @@ public class DeploymentProcessor {
         IndexView view = combinedIndexBuildItem.getIndex();
 
         for (ClassInfo ci : getAnnotated(view, YAML_STEP_PARSER_ANNOTATION)) {
-            reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, 
ci.name().toString()));
+            reflectiveClass.produce(reflectiveClassBuildItem(true, true, ci));
         }
         for (ClassInfo ci : getAnnotated(view, 
YAML_STEP_DEFINITION_ANNOTATION)) {
-            reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, 
ci.name().toString()));
+            reflectiveClass.produce(reflectiveClassBuildItem(true, true, ci));
+        }
+        for (ClassInfo ci : getAnnotated(view, YAML_MIXIN_ANNOTATION)) {
+            reflectiveClass.produce(reflectiveClassBuildItem(true, true, ci));
         }
 
         for (ClassInfo ci : getAllKnownImplementors(view, 
Step.Deserializer.class)) {
-            reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, 
ci.name().toString()));
+            reflectiveClass.produce(reflectiveClassBuildItem(true, true, ci));
         }
         for (ClassInfo ci : getAllKnownSubclasses(view, 
ProcessorDefinition.class)) {
-            reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, 
ci.name().toString()));
+            reflectiveClass.produce(reflectiveClassBuildItem(true, true, ci));
         }
         for (ClassInfo ci : getAllKnownSubclasses(view, 
ExpressionDefinition.class)) {
-            reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, 
ci.name().toString()));
+            reflectiveClass.produce(reflectiveClassBuildItem(true, true, ci));
         }
         for (ClassInfo ci : getAllKnownSubclasses(view, 
DataFormatDefinition.class)) {
-            reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, 
ci.name().toString()));
+            reflectiveClass.produce(reflectiveClassBuildItem(true, true, ci));
         }
 
         reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, 
Step.Deserializer.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, true, 
ProcessorDefinitionMixIn.class));
-        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, 
ExpressionNodeMixIn.class));
-        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, 
Any23DataFormatMixIn.class));
-        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, 
XStreamDataFormatMixIn.class));
-    }
-
-    private static Iterable<ClassInfo> getAllKnownImplementors(IndexView view, 
String name) {
-        return getAllKnownImplementors(view, DotName.createSimple(name));
-    }
-
-    private static Iterable<ClassInfo> getAllKnownImplementors(IndexView view, 
Class<?> type) {
-        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 getAllKnownSubclasses(view, DotName.createSimple(name));
-    }
-
-    private static Iterable<ClassInfo> getAllKnownSubclasses(IndexView view, 
Class<?> type) {
-        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-knative/src/main/java/org/apache/camel/k/knative/yaml/parser/KnativeStepParser.java
 
b/camel-k-runtime-knative/src/main/java/org/apache/camel/k/knative/yaml/parser/KnativeStepParser.java
index 581ae1d..48c07f8 100644
--- 
a/camel-k-runtime-knative/src/main/java/org/apache/camel/k/knative/yaml/parser/KnativeStepParser.java
+++ 
b/camel-k-runtime-knative/src/main/java/org/apache/camel/k/knative/yaml/parser/KnativeStepParser.java
@@ -23,9 +23,9 @@ import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.apache.camel.component.knative.spi.Knative;
-import org.apache.camel.k.loader.yaml.parser.ProcessorStepParser;
-import org.apache.camel.k.loader.yaml.parser.StartStepParser;
-import org.apache.camel.k.loader.yaml.parser.StepParserSupport;
+import org.apache.camel.k.loader.yaml.spi.ProcessorStepParser;
+import org.apache.camel.k.loader.yaml.spi.StartStepParser;
+import org.apache.camel.k.loader.yaml.spi.StepParserSupport;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.ToDefinition;
diff --git a/examples/camel-k-runtime-example-knative/data/routes.yaml 
b/examples/camel-k-runtime-example-knative/data/routes.yaml
index 72b90e4..dae43ba 100644
--- a/examples/camel-k-runtime-example-knative/data/routes.yaml
+++ b/examples/camel-k-runtime-example-knative/data/routes.yaml
@@ -21,7 +21,7 @@
     from:
       uri: "knative:endpoint/from"
       steps:
-        - convert-body:
+        - convert-body-to:
             type: "java.lang.String"
         - to:
             uri: "log:knative"
diff --git a/examples/camel-k-runtime-example-quarkus-knative/data/routes.yaml 
b/examples/camel-k-runtime-example-quarkus-knative/data/routes.yaml
index e0559a5..31bda66 100644
--- a/examples/camel-k-runtime-example-quarkus-knative/data/routes.yaml
+++ b/examples/camel-k-runtime-example-quarkus-knative/data/routes.yaml
@@ -21,7 +21,7 @@
     from:
       uri: "knative://endpoint/source"
       steps:
-        - convert-body:
+        - convert-body-to:
             type: "java.lang.String"
         - choice:
             when:
diff --git a/examples/camel-k-runtime-example-quarkus-yaml/data/routes.yaml 
b/examples/camel-k-runtime-example-quarkus-yaml/data/routes.yaml
index 23c82e8..287fd74 100644
--- a/examples/camel-k-runtime-example-quarkus-yaml/data/routes.yaml
+++ b/examples/camel-k-runtime-example-quarkus-yaml/data/routes.yaml
@@ -21,7 +21,7 @@
     from:
       uri: "platform-http:/hello"
       steps:
-        - convert-body:
+        - convert-body-to:
             type: "java.lang.String"
         - to:
             uri: "log:info"
diff --git 
a/examples/camel-k-runtime-example-yaml/src/main/resources/routes.yaml 
b/examples/camel-k-runtime-example-yaml/src/main/resources/routes.yaml
index 11244a0..7a5dd03 100644
--- a/examples/camel-k-runtime-example-yaml/src/main/resources/routes.yaml
+++ b/examples/camel-k-runtime-example-yaml/src/main/resources/routes.yaml
@@ -24,7 +24,7 @@
       accepts: "text/plain"
       binding-mode: "off"
       steps:
-        - convert-body:
+        - convert-body-to:
             type: "java.lang.String"
         - to:
             uri: "log:in"
@@ -50,7 +50,7 @@
                             uri: "log:contains2"
         - marshal:
             json: {}
-        - convert-body:
+        - convert-body-to:
             type: "java.lang.String"
         - to:
             uri: "log:out"
@@ -63,7 +63,7 @@
       accepts: "text/plain"
       binding-mode: "off"
       steps:
-        - convert-body:
+        - convert-body-to:
             type: "java.lang.String"
         - to:
             uri: "log:in"
@@ -84,7 +84,7 @@
       accepts: "text/plain"
       binding-mode: "off"
       steps:
-        - convert-body:
+        - convert-body-to:
             type: "java.lang.String"
         - to:
             uri: "log:in"
diff --git a/pom.xml b/pom.xml
index 7b59509..c76999e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -70,7 +70,7 @@
         <gmavenplus-plugin.version>1.9.0</gmavenplus-plugin.version>
         <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
         <maven-surefire-plugin.version>3.0.0-M4</maven-surefire-plugin.version>
-        
<maven-remote-resources-plugin.version>1.7.0</maven-remote-resources-plugin.version>
+        
<maven-remote-resources-plugin.version>1.5</maven-remote-resources-plugin.version>
         <maven-failsafe-plugin.version>3.0.0-M4</maven-failsafe-plugin.version>
         <versions-maven-plugin.version>2.7</versions-maven-plugin.version>
         <directory-maven-plugin.version>0.3.1</directory-maven-plugin.version>
diff --git 
a/tooling/camel-k-apt/src/main/java/org/apache/camel/k/tooling/apt/CamelProcessor.java
 
b/tooling/camel-k-apt/src/main/java/org/apache/camel/k/tooling/apt/CamelProcessor.java
index fd3d69b..886668a 100644
--- 
a/tooling/camel-k-apt/src/main/java/org/apache/camel/k/tooling/apt/CamelProcessor.java
+++ 
b/tooling/camel-k-apt/src/main/java/org/apache/camel/k/tooling/apt/CamelProcessor.java
@@ -38,12 +38,10 @@ import javax.tools.StandardLocation;
 
 import org.apache.camel.k.annotation.Loader;
 import org.apache.camel.k.annotation.LoaderInterceptor;
-import org.apache.camel.k.annotation.yaml.YAMLStepParser;
 
 @SupportedAnnotationTypes({
     "org.apache.camel.k.annotation.Loader",
     "org.apache.camel.k.annotation.LoaderInterceptor",
-    "org.apache.camel.k.annotation.yaml.YAMLStepParser"
 })
 @SupportedSourceVersion(SourceVersion.RELEASE_8)
 public class CamelProcessor extends AbstractProcessor {
@@ -67,14 +65,6 @@ public class CamelProcessor extends AbstractProcessor {
                         e
                     );
                 });
-                on(element, YAMLStepParser.class, (e, a) -> {
-                    for (String id: a.value()) {
-                        service(
-                            
output("META-INF/services/org/apache/camel/k/loader/yaml-parser/%s", id),
-                            e
-                        );
-                    }
-                });
             }
         }
 
diff --git a/tooling/camel-k-maven-plugin/pom.xml 
b/tooling/camel-k-maven-plugin/pom.xml
index dbab817..00cf287 100644
--- a/tooling/camel-k-maven-plugin/pom.xml
+++ b/tooling/camel-k-maven-plugin/pom.xml
@@ -34,7 +34,7 @@
   <artifactId>camel-k-maven-plugin</artifactId>
 
   <properties>
-    <maven.version>3.6.1</maven.version>
+    <maven.version>3.6.3</maven.version>
     <maven-plugin-tools.version>3.6.0</maven-plugin-tools.version>
     <maven-shaded.version>3.1.0</maven-shaded.version>
   </properties>
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
index f681f60..3982257 100644
--- 
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
@@ -19,11 +19,16 @@ package org.apache.camel.k.tooling.maven;
 
 import java.io.IOException;
 import java.nio.file.Paths;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Set;
 
 import javax.lang.model.element.Modifier;
 
 import com.fasterxml.jackson.core.Version;
 import com.fasterxml.jackson.databind.Module;
+import com.google.common.base.CaseFormat;
+import com.squareup.javapoet.ClassName;
 import com.squareup.javapoet.CodeBlock;
 import com.squareup.javapoet.JavaFile;
 import com.squareup.javapoet.MethodSpec;
@@ -55,6 +60,10 @@ public class GenerateYamlLoaderSupportClasses extends 
GenerateYamlSupport {
                 .indent("    ")
                 .build()
                 .writeTo(Paths.get(output));
+            JavaFile.builder("org.apache.camel.k.loader.yaml", 
generateResolver())
+                .indent("    ")
+                .build()
+                .writeTo(Paths.get(output));
         } catch (IOException e) {
             throw new MojoFailureException(e.getMessage());
         }
@@ -86,14 +95,15 @@ public class GenerateYamlLoaderSupportClasses extends 
GenerateYamlSupport {
             .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)
+            (k, v) -> mb.addStatement("context.registerSubtypes(new 
com.fasterxml.jackson.databind.jsontype.NamedType($L.class, $S))", v.getName(), 
k)
         );
         definitions(DATAFORMAT_DEFINITION_CLASS).forEach(
-            (k, v) -> mb.addStatement("context.registerSubtypes(new 
com.fasterxml.jackson.databind.jsontype.NamedType($T.class, $S))", v, k)
+            (k, v) -> mb.addStatement("context.registerSubtypes(new 
com.fasterxml.jackson.databind.jsontype.NamedType($L.class, $S))", v.getName(), 
k)
         );
         definitions(LOAD_BALANCE_DEFINITION_CLASS).forEach(
-            (k, v) -> mb.addStatement("context.registerSubtypes(new 
com.fasterxml.jackson.databind.jsontype.NamedType($T.class, $S))", v, k)
+            (k, v) -> mb.addStatement("context.registerSubtypes(new 
com.fasterxml.jackson.databind.jsontype.NamedType($L.class, $S))", v.getName(), 
k)
         );
+
         annotated(YAML_MIXIN_ANNOTATION).forEach(i -> {
             final AnnotationInstance annotation = 
i.classAnnotation(YAML_MIXIN_ANNOTATION);
             final AnnotationValue targets = annotation.value("value");
@@ -124,18 +134,18 @@ public class GenerateYamlLoaderSupportClasses extends 
GenerateYamlSupport {
             .addModifiers(Modifier.PUBLIC)
             .addModifiers(Modifier.STATIC);
 
-        annotated(YAML_STEP_DEFINITION_ANNOTATION).forEach(i -> {
-            final AnnotationInstance annotation = 
i.classAnnotation(YAML_STEP_DEFINITION_ANNOTATION);
+        annotated(YAML_NODE_DEFINITION_ANNOTATION).forEach(i -> {
+            final AnnotationInstance annotation = 
i.classAnnotation(YAML_NODE_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) {
+                String name = i.toString();
+                if (i.nestingType() == ClassInfo.NestingType.INNER) {
+                    name = i.enclosingClass().toString() + "." + 
i.simpleName();
+                }
+
                 for (String reifier: reifiers.asStringArray()) {
-                    
mb.addStatement("org.apache.camel.reifier.ProcessorReifier.registerReifier($L.class,
 $L::new);", name, reifier);
+                    
mb.addStatement("org.apache.camel.reifier.ProcessorReifier.registerReifier($L.class,
 $L::new)", name, reifier);
                 }
             }
         });
@@ -144,4 +154,93 @@ public class GenerateYamlLoaderSupportClasses extends 
GenerateYamlSupport {
 
         return type.build();
     }
+
+    public final TypeSpec generateResolver() {
+        Set<String> ids = new HashSet<>();
+
+        MethodSpec.Builder mb = MethodSpec.methodBuilder("resolve")
+            .addAnnotation(Override.class)
+            .addModifiers(Modifier.PUBLIC)
+            .addParameter(ClassName.get("org.apache.camel", "CamelContext"), 
"camelContext")
+            .addParameter(ClassName.get("java.lang", "String"), "id")
+            .returns(ClassName.get("org.apache.camel.k.loader.yaml.spi", 
"StepParser"));
+
+        mb.beginControlFlow("switch(id)");
+
+        // custom parsers
+        annotated(YAML_STEP_PARSER_ANNOTATION)
+            .sorted(Comparator.comparing(i -> i.name().toString()))
+            .forEach(
+                i -> {
+                    AnnotationValue value = 
i.classAnnotation(YAML_STEP_PARSER_ANNOTATION).value();
+                    for (String id: value.asStringArray()) {
+                        if (ids.add(id)) {
+                            mb.beginControlFlow("case $S:", id);
+                            mb.addStatement("return new $L()", 
i.name().toString());
+                            mb.endControlFlow();
+                        }
+                    }
+                }
+            );
+
+        // auto generated parsers
+        annotated(XMLROOTELEMENT_ANNOTATION_CLASS)
+            .forEach(
+                i -> {
+                    AnnotationInstance meta = 
i.classAnnotation(METADATA_ANNOTATION);
+                    AnnotationInstance root = 
i.classAnnotation(XMLROOTELEMENT_ANNOTATION_CLASS);
+
+                    if (meta != null && root != null) {
+                        AnnotationValue name = root.value("name");
+                        AnnotationValue label = meta.value("label");
+
+                        if (name != null && label != null) {
+                            // skip known definitions for which there is a 
custom
+                            // implementation
+                            switch (i.name().toString()) {
+                                case 
"org.apache.camel.model.Resilience4jConfigurationDefinition":
+                                case 
"org.apache.camel.model.HystrixConfigurationDefinition":
+                                case 
"org.apache.camel.model.config.StreamResequencerConfig":
+                                case 
"org.apache.camel.model.config.BatchResequencerConfig":
+                                case 
"org.apache.camel.model.OnFallbackDefinition":
+                                case "org.apache.camel.model.InOnlyDefinition":
+                                case "org.apache.camel.model.InOutDefinition":
+                                case 
"org.apache.camel.model.OtherwiseDefinition":
+                                case "org.apache.camel.model.WhenDefinition":
+                                    return;
+                                default:
+                                    break;
+                            }
+                            switch (i.name().prefix().toString()) {
+                                case "org.apache.camel.model.loadbalancer":
+                                    return;
+                                default:
+                                    break;
+                            }
+
+                            Set<String> labels = 
Set.of(label.asString().split(",", -1));
+                            if (labels.contains("eip")) {
+                                String id = 
CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, name.asString());
+                                if (ids.add(id)) {
+                                    mb.beginControlFlow("case $S:", id);
+                                    mb.addStatement("return new 
org.apache.camel.k.loader.yaml.parser.TypedProcessorStepParser($L.class)", 
i.name().toString());
+                                    mb.endControlFlow();
+                                }
+                            }
+                        }
+                    }
+                }
+            );
+
+        mb.beginControlFlow("default:");
+        mb.addStatement("return lookup(camelContext, id)");
+        mb.endControlFlow();
+        mb.endControlFlow();
+
+        return TypeSpec.classBuilder("YamlStepResolver")
+            .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
+            
.addSuperinterface(ClassName.get("org.apache.camel.k.loader.yaml.spi", 
"StepParser.Resolver"))
+            .addMethod(mb.build())
+            .build();
+    }
 }
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
index 337e045..1d9c540 100644
--- 
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
@@ -47,9 +47,11 @@ 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_ANNOTATION = 
DotName.createSimple("org.apache.camel.k.annotation.yaml.YAMLNodeDefinition");
+    public static final DotName YAML_NODE_DEFINITION_ANNOTATION = 
DotName.createSimple("org.apache.camel.k.annotation.yaml.YAMLNodeDefinition");
+    public static final DotName YAML_STEP_PARSER_ANNOTATION = 
DotName.createSimple("org.apache.camel.k.annotation.yaml.YAMLStepParser");
     public static final DotName YAML_MIXIN_ANNOTATION = 
DotName.createSimple("org.apache.camel.k.annotation.yaml.YAMLMixIn");
     public static final DotName LOAD_BALANCE_DEFINITION_CLASS = 
DotName.createSimple("org.apache.camel.model.LoadBalancerDefinition");
+    public static final DotName METADATA_ANNOTATION = 
DotName.createSimple("org.apache.camel.spi.Metadata");
 
     @Parameter(defaultValue = "${project}", readonly = true, required = true)
     protected MavenProject project;
@@ -89,7 +91,6 @@ public abstract class GenerateYamlSupport extends 
AbstractMojo {
         ClassLoader cl = getClassLoader();
         IndexView view = getCompositeIndexer(cl);
 
-
         return view.getAnnotations(type).stream()
             .map(AnnotationInstance::target)
             .filter(t -> t.kind() == AnnotationTarget.Kind.CLASS)

Reply via email to