Update to camel-quarkus 1.0.0-M7 and camel 3.2.0 #316
diff --git a/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/RestConfiguration.groovy b/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/RestConfiguration.groovy
index a9e82e9..fd2114e 100644
--- a/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/RestConfiguration.groovy
+++ b/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/RestConfiguration.groovy
@@ -30,12 +30,6 @@
         callable.call()
     }
 
-    def configuration(String component, @DelegatesTo(RestConfigurationDefinition) Closure<?> callable) {
-        callable.resolveStrategy = Closure.DELEGATE_FIRST
-        callable.delegate = builder.restConfiguration(component)
-        callable.call()
-    }
-
     def path(String path, @DelegatesTo(RestVerbConfiguration) Closure<?> callable) {
         callable.resolveStrategy = Closure.DELEGATE_FIRST
         callable.delegate = new RestVerbConfiguration(builder, path)
diff --git a/camel-k-loader-groovy/src/test/groovy/org/apache/camel/k/loader/groovy/dsl/IntegrationTest.groovy b/camel-k-loader-groovy/src/test/groovy/org/apache/camel/k/loader/groovy/dsl/IntegrationTest.groovy
index 8a53b1e..409705e 100644
--- a/camel-k-loader-groovy/src/test/groovy/org/apache/camel/k/loader/groovy/dsl/IntegrationTest.groovy
+++ b/camel-k-loader-groovy/src/test/groovy/org/apache/camel/k/loader/groovy/dsl/IntegrationTest.groovy
@@ -62,8 +62,6 @@
         then:
             context.restConfiguration.host == 'my-host'
             context.restConfiguration.port == 9192
-            context.getRestConfiguration('undertow', false).host == 'my-undertow-host'
-            context.getRestConfiguration('undertow', false).port == 9193
 
             context.restDefinitions.size() == 2
 
diff --git a/camel-k-loader-groovy/src/test/resources/routes-with-rest.groovy b/camel-k-loader-groovy/src/test/resources/routes-with-rest.groovy
index e3c6687..8ae6cdf 100644
--- a/camel-k-loader-groovy/src/test/resources/routes-with-rest.groovy
+++ b/camel-k-loader-groovy/src/test/resources/routes-with-rest.groovy
@@ -20,11 +20,6 @@
         port '9192'
     }
 
-    configuration('undertow') {
-        host 'my-undertow-host'
-        port '9193'
-    }
-
     path('/my/path') {
         get('/get') {
             consumes 'application/json'
diff --git a/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestConfiguration.kt b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestConfiguration.kt
index 737b9db..e4261c4 100644
--- a/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestConfiguration.kt
+++ b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestConfiguration.kt
@@ -27,11 +27,6 @@
         delegate.block()
     }
 
-    fun configuration(component: String, block: RestConfigurationDefinition.() -> Unit) {
-        val delegate = builder.restConfiguration(component)
-        delegate.block()
-    }
-
     fun path(path: String, block: RestVerbConfiguration.() -> Unit) {
         RestVerbConfiguration(builder, path).block()
     }
diff --git a/camel-k-loader-kotlin/src/test/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationTest.kt b/camel-k-loader-kotlin/src/test/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationTest.kt
index 71c8299..95c0da7 100644
--- a/camel-k-loader-kotlin/src/test/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationTest.kt
+++ b/camel-k-loader-kotlin/src/test/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationTest.kt
@@ -33,11 +33,7 @@
 import org.apache.camel.support.DefaultHeaderFilterStrategy
 import org.assertj.core.api.Assertions.assertThat
 import org.assertj.core.api.Assertions.assertThatExceptionOfType
-import org.assertj.core.api.Assertions.assertThatThrownBy
 import org.junit.jupiter.api.Test
-import org.junit.jupiter.api.assertThrows
-import java.lang.IllegalArgumentException
-import java.lang.RuntimeException
 import javax.sql.DataSource
 
 class IntegrationTest {
@@ -50,8 +46,6 @@
 
         assertThat(context.restConfiguration.host).isEqualTo("my-host")
         assertThat(context.restConfiguration.port).isEqualTo(9192)
-        assertThat(context.getRestConfiguration("undertow", false).host).isEqualTo("my-undertow-host")
-        assertThat(context.getRestConfiguration("undertow", false).port).isEqualTo(9193)
         assertThat(context.adapt(ModelCamelContext::class.java).restDefinitions.size).isEqualTo(2)
 
         with(context.adapt(ModelCamelContext::class.java).restDefinitions.find { it.path == "/my/path" }) {
@@ -164,7 +158,7 @@
 
         try {
             assertThat(context.routes).hasSize(1)
-            assertThat(context.routes[0].routeContext.getOnException("my-on-exception")).isInstanceOf(FatalFallbackErrorHandler::class.java)
+            assertThat(context.routes[0].getOnException("my-on-exception")).isInstanceOf(FatalFallbackErrorHandler::class.java)
         } finally {
             context.stop()
         }
diff --git a/camel-k-loader-kotlin/src/test/resources/routes-with-rest.kts b/camel-k-loader-kotlin/src/test/resources/routes-with-rest.kts
index 37f2828..d9dd70b 100644
--- a/camel-k-loader-kotlin/src/test/resources/routes-with-rest.kts
+++ b/camel-k-loader-kotlin/src/test/resources/routes-with-rest.kts
@@ -20,11 +20,6 @@
         port = "9192"
     }
 
-    configuration("undertow") {
-        host = "my-undertow-host"
-        port = "9193"
-    }
-
     path("/my/path") {
         get("/get") {
             consumes("application/json")
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/Any23DataFormatMixIn.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/Any23DataFormatMixIn.java
new file mode 100644
index 0000000..75e1ab0
--- /dev/null
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/Any23DataFormatMixIn.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.loader.yaml.support;
+
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.camel.k.annotation.yaml.YAMLMixIn;
+
+@YAMLMixIn(org.apache.camel.model.dataformat.Any23DataFormat.class)
+public abstract class Any23DataFormatMixIn {
+    @JsonIgnore
+    public abstract void setConfiguration(Map<String, String> configuration);
+}
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/ExpressionNodeMixIn.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/ExpressionNodeMixIn.java
new file mode 100644
index 0000000..ffb2568
--- /dev/null
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/ExpressionNodeMixIn.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.loader.yaml.support;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.camel.Predicate;
+import org.apache.camel.k.annotation.yaml.YAMLMixIn;
+
+@YAMLMixIn(org.apache.camel.model.ExpressionNode.class)
+public abstract class ExpressionNodeMixIn {
+    @JsonIgnore
+    private void setExpression(Predicate predicate) {
+    }
+}
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/ProcessorDefinitionMixIn.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/ProcessorDefinitionMixIn.java
new file mode 100644
index 0000000..16caa38
--- /dev/null
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/ProcessorDefinitionMixIn.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.loader.yaml.support;
+
+import java.util.function.Function;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.camel.Exchange;
+import org.apache.camel.k.annotation.yaml.YAMLMixIn;
+import org.apache.camel.model.Block;
+import org.apache.camel.model.OptionalIdentifiedDefinition;
+
+@YAMLMixIn(org.apache.camel.model.ProcessorDefinition.class)
+public abstract class ProcessorDefinitionMixIn<Type extends org.apache.camel.model.ProcessorDefinition<Type>>
+    extends OptionalIdentifiedDefinition<Type>
+    implements Block {
+
+    @JsonIgnore
+    public abstract <Result> Type setBody(Function<Exchange, Result> function);
+}
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/XStreamDataFormatMixIn.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/XStreamDataFormatMixIn.java
new file mode 100644
index 0000000..750f2cc
--- /dev/null
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/XStreamDataFormatMixIn.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.loader.yaml.support;
+
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.camel.k.annotation.yaml.YAMLMixIn;
+
+@YAMLMixIn(org.apache.camel.model.dataformat.XStreamDataFormat.class)
+public abstract class XStreamDataFormatMixIn {
+    @JsonIgnore
+    public abstract void setConverters(Map<String, String> converters);
+    @JsonIgnore
+    public abstract void setAliases(Map<String, String> aliases);
+    @JsonIgnore
+    public abstract void setOmitFields(Map<String, String> omitFields);
+    @JsonIgnore
+    public abstract void setImplicitCollections(Map<String, String> implicitCollections);
+}
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 1448b70..ed865c3 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
@@ -22,9 +22,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.function.Function;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.MapperFeature;
@@ -34,7 +32,6 @@
 import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
 import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.k.Runtime;
 import org.apache.camel.k.Source;
@@ -43,15 +40,12 @@
 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.model.Block;
-import org.apache.camel.model.OptionalIdentifiedDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
 
-
 @Loader("yaml")
 public class YamlSourceLoader implements SourceLoader {
     static {
@@ -70,10 +64,9 @@
             .setSerializationInclusion(JsonInclude.Include.NON_EMPTY)
             .setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE)
             .enable(MapperFeature.USE_GETTERS_AS_SETTERS)
+            .disable(MapperFeature.REQUIRE_SETTERS_FOR_GETTERS)
             .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
             .enable(SerializationFeature.INDENT_OUTPUT);
-
-        mapper.addMixIn(ProcessorDefinition.class, ProcessorDefinitionMixIn.class);
     }
 
     @Override
@@ -104,7 +97,7 @@
                 final List<RouteDefinition> routes = new ArrayList<>();
                 final List<RestDefinition> rests = new ArrayList<>();
 
-                try {
+                try (is) {
                     for (Step step : mapper.readValue(is, Step[].class)) {
                         final StepParser.Context context = new StepParser.Context(camelContext, mapper, step.node);
                         final ProcessorDefinition<?> root = StartStepParser.invoke(context, step.id);
@@ -136,23 +129,8 @@
 
                         setRestCollection(definition);
                     }
-                } finally {
-                    is.close();
                 }
             }
         };
     }
-
-    /**
-     * ProcessorDefinition declares multiple methods for setBody and Jackson get confused
-     * about what method to use so to hide such fields from the deserialization process
-     * without having to change the original class, a MixIn is required.
-     */
-    public abstract static class ProcessorDefinitionMixIn<Type extends ProcessorDefinition<Type>>
-        extends OptionalIdentifiedDefinition<Type>
-        implements Block {
-
-        @JsonIgnore
-        public abstract <Result> Type setBody(Function<Exchange, Result> function);
-    }
 }
diff --git a/camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationRuntime.java b/camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationRuntime.java
index 2586b84..b3f3578 100644
--- a/camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationRuntime.java
+++ b/camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationRuntime.java
@@ -16,14 +16,12 @@
  */
 package org.apache.camel.k.main;
 
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Properties;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
@@ -88,23 +86,12 @@
 
     @Override
     public void setInitialProperties(Properties properties) {
-        this.main.setInitialProperties(properties);
+        this.main.getCamelContext().getPropertiesComponent().setInitialProperties(properties);
     }
 
     @Override
     public void setProperties(Properties properties) {
-        this.main.setOverrideProperties(properties);
-    }
-
-    @Override
-    public void setPropertiesLocations(Collection<String> locations) {
-        this.main.setPropertyPlaceholderLocations(
-            locations.stream()
-                .map(location -> location.startsWith("file:") ? location : "file:" + location)
-                .distinct()
-                .sorted()
-                .collect(Collectors.joining(","))
-        );
+        this.main.getCamelContext().getPropertiesComponent().setOverrideProperties(properties);
     }
 
     public void addListeners(Iterable<Runtime.Listener> listeners) {
@@ -143,12 +130,8 @@
 
     private final class MainListenerAdapter implements org.apache.camel.main.MainListener {
         @Override
-        public void beforeStart(BaseMainSupport main) {
-            invokeListeners(Phase.Starting);
-        }
-
-        @Override
         public void beforeConfigure(BaseMainSupport main) {
+            invokeListeners(Phase.ConfigureProperties);
             invokeListeners(Phase.ConfigureRoutes);
         }
 
@@ -158,6 +141,11 @@
         }
 
         @Override
+        public void beforeStart(BaseMainSupport main) {
+            invokeListeners(Phase.Starting);
+        }
+
+        @Override
         public void afterStart(BaseMainSupport main) {
             invokeListeners(Phase.Started);
         }
@@ -185,6 +173,11 @@
 
     private final class MainAdapter extends MainSupport {
         @Override
+        public CamelContext getCamelContext() {
+            return ApplicationRuntime.this.context;
+        }
+
+        @Override
         protected CamelContext createCamelContext() {
             return ApplicationRuntime.this.context;
         }
diff --git a/camel-k-main/camel-k-runtime-main/src/test/resources/routes-with-expression.xml b/camel-k-main/camel-k-runtime-main/src/test/resources/routes-with-expression.xml
index dc1090d..a86d9e1 100644
--- a/camel-k-main/camel-k-runtime-main/src/test/resources/routes-with-expression.xml
+++ b/camel-k-main/camel-k-runtime-main/src/test/resources/routes-with-expression.xml
@@ -21,7 +21,7 @@
   <route>
     <from uri="timer:tick"/>
     <filter>
-      <simple>in.body == {{the.body}}</simple>
+      <simple>${in.body} == {{the.body}}</simple>
       <to uri="log:info"/>
     </filter>
   </route>
diff --git a/camel-k-quarkus/camel-k-quarkus-core/runtime/src/main/java/org/apache/camel/k/core/quarkus/RuntimeListenerAdapter.java b/camel-k-quarkus/camel-k-quarkus-core/runtime/src/main/java/org/apache/camel/k/core/quarkus/RuntimeListenerAdapter.java
index 4452a4c..3d31a22 100644
--- a/camel-k-quarkus/camel-k-quarkus-core/runtime/src/main/java/org/apache/camel/k/core/quarkus/RuntimeListenerAdapter.java
+++ b/camel-k-quarkus/camel-k-quarkus-core/runtime/src/main/java/org/apache/camel/k/core/quarkus/RuntimeListenerAdapter.java
@@ -17,11 +17,9 @@
 package org.apache.camel.k.core.quarkus;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Properties;
-import java.util.stream.Collectors;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
@@ -46,12 +44,8 @@
     }
 
     @Override
-    public void beforeStart(BaseMainSupport main) {
-        invokeListeners(listeners, on(main), Runtime.Phase.Starting);
-    }
-
-    @Override
     public void beforeConfigure(BaseMainSupport main) {
+        invokeListeners(listeners, on(main), Runtime.Phase.ConfigureProperties);
         invokeListeners(listeners, on(main), Runtime.Phase.ConfigureRoutes);
     }
 
@@ -61,6 +55,11 @@
     }
 
     @Override
+    public void beforeStart(BaseMainSupport main) {
+        invokeListeners(listeners, on(main), Runtime.Phase.Starting);
+    }
+
+    @Override
     public void afterStart(BaseMainSupport main) {
         invokeListeners(listeners, on(main), Runtime.Phase.Started);
     }
@@ -114,23 +113,12 @@
 
             @Override
             public void setInitialProperties(Properties properties) {
-                main.setInitialProperties(properties);
+                main.getCamelContext().getPropertiesComponent().setInitialProperties(properties);
             }
 
             @Override
             public void setProperties(Properties properties) {
-                main.setOverrideProperties(properties);
-            }
-
-            @Override
-            public void setPropertiesLocations(Collection<String> locations) {
-                main.setPropertyPlaceholderLocations(
-                    locations.stream()
-                        .map(location -> location.startsWith("file:") ? location : "file:" + location)
-                        .distinct()
-                        .sorted()
-                        .collect(Collectors.joining(","))
-                );
+                main.getCamelContext().getPropertiesComponent().setOverrideProperties(properties);
             }
         };
     }
diff --git a/camel-k-quarkus/camel-k-quarkus-knative/deployment/pom.xml b/camel-k-quarkus/camel-k-quarkus-knative/deployment/pom.xml
index 33dd66d..3c1f96d 100644
--- a/camel-k-quarkus/camel-k-quarkus-knative/deployment/pom.xml
+++ b/camel-k-quarkus/camel-k-quarkus-knative/deployment/pom.xml
@@ -57,6 +57,10 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-core-cloud-deployment</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-http-common-deployment</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>io.quarkus</groupId>
diff --git a/camel-k-quarkus/camel-k-quarkus-knative/runtime/pom.xml b/camel-k-quarkus/camel-k-quarkus-knative/runtime/pom.xml
index d89f3e3..6e2da3b 100644
--- a/camel-k-quarkus/camel-k-quarkus-knative/runtime/pom.xml
+++ b/camel-k-quarkus/camel-k-quarkus-knative/runtime/pom.xml
@@ -41,10 +41,6 @@
             <artifactId>camel-k-quarkus-core</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-core-cloud</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-knative-api</artifactId>
         </dependency>
@@ -57,8 +53,8 @@
             <artifactId>camel-knative-http</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-http-common</artifactId>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-http-common</artifactId>
         </dependency>
         <dependency>
             <groupId>org.graalvm.nativeimage</groupId>
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 bfb999e..f62abb4 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
@@ -22,12 +22,15 @@
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
-import org.apache.camel.k.loader.yaml.YamlSourceLoader;
 import org.apache.camel.k.loader.yaml.model.Node;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.k.loader.yaml.parser.HasDataFormat;
 import org.apache.camel.k.loader.yaml.parser.HasExpression;
 import org.apache.camel.k.loader.yaml.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.model.DataFormatDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.language.ExpressionDefinition;
@@ -81,9 +84,10 @@
         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, YamlSourceLoader.ProcessorDefinitionMixIn.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) {
diff --git a/camel-k-runtime-core/pom.xml b/camel-k-runtime-core/pom.xml
index f11052a..47b76fa 100644
--- a/camel-k-runtime-core/pom.xml
+++ b/camel-k-runtime-core/pom.xml
@@ -39,6 +39,10 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core-engine</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core-languages</artifactId>
+        </dependency>
 
         <!-- ****************************** -->
         <!--                                -->
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java
index 517d1bd..cac8eef 100644
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java
+++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java
@@ -21,6 +21,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
+import java.util.stream.Collectors;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Ordered;
@@ -90,7 +91,15 @@
         throw new UnsupportedOperationException();
     }
 
-    void setPropertiesLocations(Collection<String> locations);
+    default void setPropertiesLocations(Collection<String> locations) {
+        getCamelContext().getPropertiesComponent().setLocation(
+            locations.stream()
+                .map(location -> location.startsWith("file:") ? location : "file:" + location)
+                .distinct()
+                .sorted()
+                .collect(Collectors.joining(","))
+        );
+    }
 
     default void setPropertiesLocations(String... locations) {
         setPropertiesLocations(Arrays.asList(locations));
@@ -106,6 +115,7 @@
 
     enum Phase {
         Starting,
+        ConfigureProperties,
         ConfigureContext,
         ConfigureRoutes,
         Started,
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/PropertiesConfigurer.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/PropertiesConfigurer.java
new file mode 100644
index 0000000..45247df
--- /dev/null
+++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/PropertiesConfigurer.java
@@ -0,0 +1,79 @@
+/*
+ * 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.listener;
+
+import org.apache.camel.Ordered;
+import org.apache.camel.k.Constants;
+import org.apache.camel.k.Runtime;
+import org.apache.camel.k.support.KubernetesPropertiesFunction;
+import org.apache.camel.k.support.PropertiesSupport;
+
+public class PropertiesConfigurer extends AbstractPhaseListener {
+    public PropertiesConfigurer() {
+        super(Runtime.Phase.ConfigureProperties);
+    }
+
+    @Override
+    public int getOrder() {
+        return Ordered.HIGHEST;
+    }
+
+    @Override
+    protected void accept(Runtime runtime) {
+        runtime.setInitialProperties(
+            PropertiesSupport.loadApplicationProperties()
+        );
+        runtime.setPropertiesLocations(
+            PropertiesSupport.resolveUserPropertiesLocations()
+        );
+
+        //
+        // Register properties functions to resolve k8s secrets or config maps like:
+        //
+        // {{secret:name/key}}
+        // {{configmap:name/key}}
+        //
+
+        //
+        // ConfigMap
+        //
+        String cmPath = System.getProperty(
+            Constants.PROPERTY_CAMEL_K_MOUNT_PATH_CONFIGMAPS,
+            System.getenv(Constants.ENV_CAMEL_K_MOUNT_PATH_CONFIGMAPS)
+        );
+
+        if (cmPath != null) {
+            runtime.getCamelContext().getPropertiesComponent().addPropertiesFunction(
+                new KubernetesPropertiesFunction(cmPath, "configmap")
+            );
+        }
+
+        //
+        // Secret
+        //
+        String secretPath = System.getProperty(
+            Constants.PROPERTY_CAMEL_K_MOUNT_PATH_SECRETS,
+            System.getenv(Constants.ENV_CAMEL_K_MOUNT_PATH_SECRETS)
+        );
+
+        if (secretPath != null) {
+            runtime.getCamelContext().getPropertiesComponent().addPropertiesFunction(
+                new KubernetesPropertiesFunction(secretPath, "secret")
+            );
+        }
+    }
+}
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurer.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurer.java
deleted file mode 100644
index d16002a..0000000
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurer.java
+++ /dev/null
@@ -1,64 +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.listener;
-
-import org.apache.camel.k.Constants;
-import org.apache.camel.k.Runtime;
-import org.apache.camel.k.support.KubernetesPropertiesFunction;
-import org.apache.camel.spi.PropertiesComponent;
-
-public class PropertiesFunctionsConfigurer extends AbstractPhaseListener {
-    public PropertiesFunctionsConfigurer() {
-        super(Runtime.Phase.Starting);
-    }
-
-    @Override
-    protected void accept(Runtime runtime) {
-        //
-        // Register properties functions to resolve k8s secrets or config maps like:
-        //
-        // {{secret:name/key}}
-        // {{configmap:name/key}}
-        //
-        PropertiesComponent pc = runtime.getCamelContext().getPropertiesComponent();
-        if (pc instanceof org.apache.camel.component.properties.PropertiesComponent) {
-            //
-            // ConfigMap
-            //
-            String cmPath = System.getProperty(Constants.PROPERTY_CAMEL_K_MOUNT_PATH_CONFIGMAPS);
-            if (cmPath == null) {
-                cmPath = System.getenv(Constants.ENV_CAMEL_K_MOUNT_PATH_CONFIGMAPS);
-            }
-
-            ((org.apache.camel.component.properties.PropertiesComponent)pc).addFunction(
-                new KubernetesPropertiesFunction(cmPath, "configmap")
-            );
-
-            //
-            // Secret
-            //
-            String secretPath = System.getProperty(Constants.PROPERTY_CAMEL_K_MOUNT_PATH_SECRETS);
-            if (secretPath == null) {
-                secretPath = System.getenv(Constants.ENV_CAMEL_K_MOUNT_PATH_SECRETS);
-            }
-
-            ((org.apache.camel.component.properties.PropertiesComponent)pc).addFunction(
-                new KubernetesPropertiesFunction(secretPath, "secret")
-            );
-        }
-    }
-}
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/RuntimeConfigurer.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/RuntimeConfigurer.java
deleted file mode 100644
index f665f42..0000000
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/RuntimeConfigurer.java
+++ /dev/null
@@ -1,42 +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.listener;
-
-import org.apache.camel.Ordered;
-import org.apache.camel.k.Runtime;
-import org.apache.camel.k.support.PropertiesSupport;
-
-public class RuntimeConfigurer extends AbstractPhaseListener {
-    public RuntimeConfigurer() {
-        super(Runtime.Phase.Starting);
-    }
-
-    @Override
-    public int getOrder() {
-        return Ordered.HIGHEST;
-    }
-
-    @Override
-    protected void accept(Runtime runtime) {
-        runtime.setInitialProperties(
-            PropertiesSupport.loadApplicationProperties()
-        );
-        runtime.setPropertiesLocations(
-            PropertiesSupport.resolveUserPropertiesLocations()
-        );
-    }
-}
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/KubernetesPropertiesFunction.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/KubernetesPropertiesFunction.java
index f89073d..3c8443f 100644
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/KubernetesPropertiesFunction.java
+++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/KubernetesPropertiesFunction.java
@@ -22,7 +22,7 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
-import org.apache.camel.component.properties.PropertiesFunction;
+import org.apache.camel.spi.PropertiesFunction;
 import org.apache.camel.util.StringHelper;
 
 public class KubernetesPropertiesFunction implements PropertiesFunction {
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java
index 04a58b1..369dbff 100644
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java
+++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java
@@ -30,7 +30,6 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.builder.RouteBuilderLifecycleStrategy;
@@ -124,16 +123,12 @@
     public static ContextCustomizer lookupCustomizerByID(CamelContext context, String customizerId) {
         ContextCustomizer customizer = context.getRegistry().lookupByNameAndType(customizerId, ContextCustomizer.class);
         if (customizer == null) {
-            try {
-                customizer = context.adapt(ExtendedCamelContext.class)
-                    .getFactoryFinder(Constants.CONTEXT_CUSTOMIZER_RESOURCE_PATH)
-                    .newInstance(customizerId, ContextCustomizer.class)
-                    .orElseThrow(() -> new RuntimeException("Error creating instance for customizer: " + customizerId));
+            customizer = context.adapt(ExtendedCamelContext.class)
+                .getFactoryFinder(Constants.CONTEXT_CUSTOMIZER_RESOURCE_PATH)
+                .newInstance(customizerId, ContextCustomizer.class)
+                .orElseThrow(() -> new RuntimeException("Error creating instance for customizer: " + customizerId));
 
-                LOGGER.info("Found customizer {} with id {} from service definition", customizer, customizerId);
-            } catch (NoFactoryAvailableException e) {
-                throw new RuntimeException(e);
-            }
+            LOGGER.info("Found customizer {} with id {} from service definition", customizer, customizerId);
         } else {
             LOGGER.info("Found customizer {} with id {} from the registry", customizer, customizerId);
         }
@@ -203,18 +198,12 @@
     }
 
     public static SourceLoader lookupLoaderFromResource(CamelContext context, String loaderId) {
-        SourceLoader loader;
+        SourceLoader loader = context.adapt(ExtendedCamelContext.class)
+            .getFactoryFinder(Constants.SOURCE_LOADER_RESOURCE_PATH)
+            .newInstance(loaderId, SourceLoader.class)
+            .orElseThrow(() -> new RuntimeException("Error creating instance of loader: " + loaderId));
 
-        try {
-            loader = context.adapt(ExtendedCamelContext.class)
-                .getFactoryFinder(Constants.SOURCE_LOADER_RESOURCE_PATH)
-                .newInstance(loaderId, SourceLoader.class)
-                .orElseThrow(() -> new RuntimeException("Error creating instance of loader: " + loaderId));
-
-            LOGGER.info("Found loader {} for language {} from service definition", loader, loaderId);
-        } catch (NoFactoryAvailableException e) {
-            throw new IllegalArgumentException("Unable to find loader for: " + loaderId, e);
-        }
+        LOGGER.info("Found loader {} for language {} from service definition", loader, loaderId);
 
         return loader;
     }
diff --git a/camel-k-runtime-core/src/main/resources/META-INF/services/org.apache.camel.k.Runtime$Listener b/camel-k-runtime-core/src/main/resources/META-INF/services/org.apache.camel.k.Runtime$Listener
index d3a93c6..40ce062 100644
--- a/camel-k-runtime-core/src/main/resources/META-INF/services/org.apache.camel.k.Runtime$Listener
+++ b/camel-k-runtime-core/src/main/resources/META-INF/services/org.apache.camel.k.Runtime$Listener
@@ -15,8 +15,7 @@
 # limitations under the License.
 #
 
-org.apache.camel.k.listener.RuntimeConfigurer
 org.apache.camel.k.listener.ContextConfigurer
 org.apache.camel.k.listener.RoutesConfigurer
 org.apache.camel.k.listener.RoutesDumper
-org.apache.camel.k.listener.PropertiesFunctionsConfigurer
+org.apache.camel.k.listener.PropertiesConfigurer
diff --git a/camel-k-runtime-core/src/test/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurerTest.java b/camel-k-runtime-core/src/test/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurerTest.java
index d8223d3..0c59dc3 100644
--- a/camel-k-runtime-core/src/test/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurerTest.java
+++ b/camel-k-runtime-core/src/test/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurerTest.java
@@ -16,9 +16,6 @@
  */
 package org.apache.camel.k.listener;
 
-import java.util.Properties;
-
-import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.k.Runtime;
 import org.junit.jupiter.api.Test;
@@ -28,20 +25,18 @@
 public class PropertiesFunctionsConfigurerTest {
     @Test
     public void testConfigMapFunction() {
-        Properties properties = new Properties();
-        properties.setProperty("my.property", "{{secret:my-secret/my-property}}");
 
-        CamelContext context = new DefaultCamelContext();
-        context.getPropertiesComponent().setInitialProperties(properties);
+        Runtime runtime = Runtime.on(new DefaultCamelContext());
+        runtime.setProperties("my.property", "{{secret:my-secret/my-property}}");
 
-        new PropertiesFunctionsConfigurer().accept(Runtime.on(context));
+        new PropertiesConfigurer().accept(runtime);
 
-        assertThat(context.resolvePropertyPlaceholders("{{secret:my-secret/my-property}}")).isEqualTo("my-secret-property");
-        assertThat(context.resolvePropertyPlaceholders("{{secret:none/my-property}}")).isEqualTo("none/my-property");
+        assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{secret:my-secret/my-property}}")).isEqualTo("my-secret-property");
+        assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{secret:none/my-property}}")).isEqualTo("none/my-property");
 
-        assertThat(context.resolvePropertyPlaceholders("{{configmap:my-cm/my-property}}")).isEqualTo("my-cm-property");
-        assertThat(context.resolvePropertyPlaceholders("{{configmap:none/my-property}}")).isEqualTo("none/my-property");
+        assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{configmap:my-cm/my-property}}")).isEqualTo("my-cm-property");
+        assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{configmap:none/my-property}}")).isEqualTo("none/my-property");
 
-        assertThat(context.resolvePropertyPlaceholders("{{my.property}}")).isEqualTo("my-secret-property");
+        assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{my.property}}")).isEqualTo("my-secret-property");
     }
 }
diff --git a/camel-k-runtime-http/pom.xml b/camel-k-runtime-http/pom.xml
index a581d43..9f1112e 100644
--- a/camel-k-runtime-http/pom.xml
+++ b/camel-k-runtime-http/pom.xml
@@ -40,10 +40,15 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core-engine</artifactId>
         </dependency>
+
+        <!--
+        Replace this with camel-platform-http-vertx when migrating to camel 3.3
+        -->
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-platform-http</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-runtime-core</artifactId>
diff --git a/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/PlatformHttpServiceContextCustomizer.java b/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/PlatformHttpServiceContextCustomizer.java
index 634e06e..80b3025 100644
--- a/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/PlatformHttpServiceContextCustomizer.java
+++ b/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/PlatformHttpServiceContextCustomizer.java
@@ -40,6 +40,7 @@
     @Override
     public void apply(CamelContext camelContext) {
         endpoint = new PlatformHttpServiceEndpoint(camelContext, this);
+        endpoint.start();
 
         try {
             camelContext.addService(endpoint, true, true);
@@ -47,29 +48,24 @@
             throw new RuntimeException(e);
         }
 
-        // add the platform-http component
-        PlatformHttpComponent component = new PlatformHttpComponent() {
-            @Override
-            protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
-                // remove matchOnUriPrefix as it will be fixed by camel 3.2 but will cause the context
-                // to fail as the property cannot be bound to the enpoint.
-                //
-                // TODO: remove once migrating to camel 3.2
-                parameters.remove("matchOnUriPrefix");
+        camelContext.addComponent(PlatformHttpConstants.PLATFORM_HTTP_COMPONENT_NAME,  new PlatformHttpComponentWrapper());
+    }
 
-                // the PlatformHttpComponent set this value but it is not handled which cause the
-                // context to fail as the property cannot be bound to the enpoint.
-                //
-                // TODO: fix upstream
-                parameters.remove("optionsEnabled");
+    public static final class PlatformHttpComponentWrapper extends PlatformHttpComponent {
+        public PlatformHttpComponentWrapper() {
+            setEngine(new RuntimePlatformHttpEngine());
+        }
 
-                // let the original component to create the endpoint
-                return super.createEndpoint(uri, remaining, parameters);
-            }
-        };
+        @Override
+        protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+            // the PlatformHttpComponent set this value but it is not handled which cause the
+            // context to fail as the property cannot be bound to the enpoint.
+            //
+            // TODO: fix upstream
+            parameters.remove("optionsEnabled");
 
-        component.setEngine(new RuntimePlatformHttpEngine());
-
-        camelContext.addComponent(PlatformHttpConstants.PLATFORM_HTTP_COMPONENT_NAME, component);
+            // let the original component to create the endpoint
+            return super.createEndpoint(uri, remaining, parameters);
+        }
     }
 }
diff --git a/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/engine/RuntimePlatformHttpConsumer.java b/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/engine/RuntimePlatformHttpConsumer.java
index bb44864..f325a91 100644
--- a/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/engine/RuntimePlatformHttpConsumer.java
+++ b/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/engine/RuntimePlatformHttpConsumer.java
@@ -71,7 +71,7 @@
     }
 
     @Override
-    protected void doStart() throws Exception {
+    protected void doInit() throws Exception {
         super.doStart();
 
         final PlatformHttpEndpoint endpoint = getEndpoint();
diff --git a/camel-k-runtime-webhook/src/main/java/org/apache/camel/k/webhook/WebhookRoutePolicyFactory.java b/camel-k-runtime-webhook/src/main/java/org/apache/camel/k/webhook/WebhookRoutePolicyFactory.java
index 8dfb3f9..d324b8b 100644
--- a/camel-k-runtime-webhook/src/main/java/org/apache/camel/k/webhook/WebhookRoutePolicyFactory.java
+++ b/camel-k-runtime-webhook/src/main/java/org/apache/camel/k/webhook/WebhookRoutePolicyFactory.java
@@ -45,10 +45,8 @@
         return null;
     }
 
-    private class WebhookRoutePolicy extends RoutePolicySupport {
-
+    private static class WebhookRoutePolicy extends RoutePolicySupport {
         private final CamelContext context;
-
         private final WebhookAction action;
 
         public WebhookRoutePolicy(CamelContext context, WebhookAction action) {
@@ -59,7 +57,7 @@
         @Override
         public void onInit(Route route) {
             super.onInit(route);
-            route.getRouteContext().setAutoStartup(false);
+            route.setAutoStartup(false);
 
             if (route.getEndpoint() instanceof WebhookEndpoint) {
                 WebhookEndpoint webhook = (WebhookEndpoint)route.getEndpoint();
diff --git a/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/DummyWebhookComponent.java b/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/DummyWebhookComponent.java
index 979b959..0d7f061 100644
--- a/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/DummyWebhookComponent.java
+++ b/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/DummyWebhookComponent.java
@@ -20,6 +20,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
@@ -52,14 +53,13 @@
 
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
-        return new DummyWebhookComponent.DummyWebhookEndpoint();
+        parameters.clear();
+        return new DummyWebhookComponent.DummyWebhookEndpoint(uri, this);
     }
 
     class DummyWebhookEndpoint extends DefaultEndpoint implements WebhookCapableEndpoint {
-
-        @Override
-        protected String createEndpointUri() {
-            return "dummy";
+        public DummyWebhookEndpoint(String endpointUri, Component component) {
+            super(endpointUri, component);
         }
 
         @Override
diff --git a/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/WebhookTest.java b/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/WebhookTest.java
index 5c65628..768e4f6 100644
--- a/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/WebhookTest.java
+++ b/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/WebhookTest.java
@@ -19,7 +19,6 @@
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Properties;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -37,7 +36,6 @@
 import org.apache.camel.spi.RoutePolicyFactory;
 import org.apache.camel.support.RoutePolicySupport;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.EnumSource;
@@ -45,24 +43,14 @@
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class WebhookTest {
-
-    private ApplicationRuntime runtime;
-
-    @BeforeEach
-    public void setUp() {
-        this.runtime = new ApplicationRuntime();
-        this.runtime.addListener(RoutesConfigurer.forRoutes("classpath:webhook.js"));
-        this.runtime.addListener(new ContextConfigurer());
-    }
-
     @ParameterizedTest
     @EnumSource(WebhookAction.class)
     public void testWebhookRegistration(WebhookAction action) throws Exception {
-        Properties properties = new Properties();
-        properties.setProperty("camel.component.webhook.configuration.webhook-auto-register", "false");
-        properties.setProperty("camel.k.customizer.webhook.enabled", "true");
-        properties.setProperty("camel.k.customizer.webhook.action", action.name().toLowerCase());
-        runtime.setProperties(properties);
+        ApplicationRuntime runtime = new ApplicationRuntime();
+        runtime.setProperties(
+            "camel.component.webhook.configuration.webhook-auto-register", "false",
+            "camel.k.customizer.webhook.enabled", "true",
+            "camel.k.customizer.webhook.action", action.name().toLowerCase());
 
         CountDownLatch operation = new CountDownLatch(1);
         Map<WebhookAction, AtomicInteger> registerCounters = new HashMap<>();
@@ -82,6 +70,8 @@
         );
 
         AtomicBoolean routeStarted = new AtomicBoolean();
+        runtime.addListener(new ContextConfigurer());
+        runtime.addListener(RoutesConfigurer.forRoutes("classpath:webhook.js"));
         runtime.getCamelContext().addRoutePolicyFactory(new RoutePolicyFactory() {
             @Override
             public RoutePolicy createRoutePolicy(CamelContext camelContext, String routeId, NamedNode route) {
@@ -124,11 +114,11 @@
     @ParameterizedTest()
     @EnumSource(WebhookAction.class)
     public void testRegistrationFailure(WebhookAction action) throws Exception {
-        Properties properties = new Properties();
-        properties.setProperty("camel.component.webhook.configuration.webhook-auto-register", "false");
-        properties.setProperty("camel.k.customizer.webhook.enabled", "true");
-        properties.setProperty("camel.k.customizer.webhook.action", action.name());
-        runtime.setProperties(properties);
+        ApplicationRuntime runtime = new ApplicationRuntime();
+        runtime.setProperties(
+            "camel.component.webhook.configuration.webhook-auto-register", "false",
+            "camel.k.customizer.webhook.enabled", "true",
+            "camel.k.customizer.webhook.action", action.name());
 
         runtime.getCamelContext().addComponent(
             "dummy",
@@ -141,19 +131,22 @@
             })
         );
 
+        runtime.addListener(new ContextConfigurer());
+        runtime.addListener(RoutesConfigurer.forRoutes("classpath:webhook.js"));
+
         Assertions.assertThrows(FailedToCreateRouteException.class, runtime::run);
     }
 
     @Test
     public void testAutoRegistrationNotDisabled() throws Exception {
-        Properties properties = new Properties();
-        properties.setProperty("camel.k.customizer.webhook.enabled", "true");
-        properties.setProperty("camel.k.customizer.webhook.action", WebhookAction.REGISTER.name());
-        runtime.setProperties(properties);
+        ApplicationRuntime runtime = new ApplicationRuntime();
+        runtime.setProperties(
+            "camel.k.customizer.webhook.enabled", "true",
+            "camel.k.customizer.webhook.action", WebhookAction.REGISTER.name());
 
-        runtime.getCamelContext().addComponent(
-            "dummy",
-            new DummyWebhookComponent());
+        runtime.getCamelContext().addComponent("dummy", new DummyWebhookComponent());
+        runtime.addListener(new ContextConfigurer());
+        runtime.addListener(RoutesConfigurer.forRoutes("classpath:webhook.js"));
 
         Assertions.assertThrows(FailedToCreateRouteException.class, runtime::run);
     }
diff --git a/camel-k-runtime-webhook/src/test/resources/webhook.js b/camel-k-runtime-webhook/src/test/resources/webhook.js
index da42d97..150113a 100644
--- a/camel-k-runtime-webhook/src/test/resources/webhook.js
+++ b/camel-k-runtime-webhook/src/test/resources/webhook.js
@@ -15,8 +15,7 @@
  * limitations under the License.
  */
 
-from('webhook:dummy')
+from('webhook:dummy:test?foo=bar')
     .to('log:info')
-
 from('timer:tick')
     .to('log:info')
diff --git a/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java b/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java
index 99f76ed..fb57da7 100644
--- a/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java
+++ b/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java
@@ -1,38 +1,63 @@
 /* Generated by camel build tools - do NOT edit this file! */
 package org.apache.camel.component.knative;
 
+import java.util.Map;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.util.CaseInsensitiveMap;
 import org.apache.camel.support.component.PropertyConfigurerSupport;
 
 /**
  * Generated by camel build tools - do NOT edit this file!
  */
 @SuppressWarnings("unchecked")
-public class KnativeComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer {
+public class KnativeComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
 
     @Override
     public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
         KnativeComponent target = (KnativeComponent) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
-        case "cloudeventsspecversion":
-        case "cloudEventsSpecVersion": target.setCloudEventsSpecVersion(property(camelContext, java.lang.String.class, value)); return true;
-        case "configuration": target.setConfiguration(property(camelContext, org.apache.camel.component.knative.KnativeConfiguration.class, value)); return true;
-        case "environment": target.setEnvironment(property(camelContext, org.apache.camel.component.knative.spi.KnativeEnvironment.class, value)); return true;
-        case "environmentpath":
-        case "environmentPath": target.setEnvironmentPath(property(camelContext, java.lang.String.class, value)); return true;
-        case "transport": target.setTransport(property(camelContext, org.apache.camel.component.knative.spi.KnativeTransport.class, value)); return true;
-        case "transportoptions":
-        case "transportOptions": target.setTransportOptions(property(camelContext, java.util.Map.class, value)); return true;
+        case "basicpropertybinding":
+        case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
-        case "basicpropertybinding":
-        case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
+        case "transport": target.setTransport(property(camelContext, org.apache.camel.component.knative.spi.KnativeTransport.class, value)); return true;
+        case "transportoptions":
+        case "transportOptions": target.setTransportOptions(property(camelContext, java.util.Map.class, value)); return true;
         default: return false;
         }
     }
 
+    @Override
+    public Map<String, Object> getAllOptions(Object target) {
+        Map<String, Object> answer = new CaseInsensitiveMap();
+        answer.put("basicPropertyBinding", boolean.class);
+        answer.put("bridgeErrorHandler", boolean.class);
+        answer.put("lazyStartProducer", boolean.class);
+        answer.put("transport", org.apache.camel.component.knative.spi.KnativeTransport.class);
+        answer.put("transportOptions", java.util.Map.class);
+        return answer;
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        KnativeComponent target = (KnativeComponent) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "basicpropertybinding":
+        case "basicPropertyBinding": return target.isBasicPropertyBinding();
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": return target.isBridgeErrorHandler();
+        case "lazystartproducer":
+        case "lazyStartProducer": return target.isLazyStartProducer();
+        case "transport": return target.getTransport();
+        case "transportoptions":
+        case "transportOptions": return target.getTransportOptions();
+        default: return null;
+        }
+    }
 }
 
diff --git a/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeEndpointConfigurer.java b/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeEndpointConfigurer.java
index 8f25832..05a9100 100644
--- a/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeEndpointConfigurer.java
+++ b/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeEndpointConfigurer.java
@@ -1,20 +1,30 @@
 /* Generated by camel build tools - do NOT edit this file! */
 package org.apache.camel.component.knative;
 
+import java.util.Map;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.util.CaseInsensitiveMap;
 import org.apache.camel.support.component.PropertyConfigurerSupport;
 
 /**
  * Generated by camel build tools - do NOT edit this file!
  */
 @SuppressWarnings("unchecked")
-public class KnativeEndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer {
+public class KnativeEndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
 
     @Override
     public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
         KnativeEndpoint target = (KnativeEndpoint) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiversion":
+        case "apiVersion": target.getConfiguration().setApiVersion(property(camelContext, java.lang.String.class, value)); return true;
+        case "basicpropertybinding":
+        case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
         case "ceoverride":
         case "ceOverride": target.getConfiguration().setCeOverride(property(camelContext, java.util.Map.class, value)); return true;
         case "cloudeventsspecversion":
@@ -22,30 +32,81 @@
         case "cloudeventstype":
         case "cloudEventsType": target.getConfiguration().setCloudEventsType(property(camelContext, java.lang.String.class, value)); return true;
         case "environment": target.getConfiguration().setEnvironment(property(camelContext, org.apache.camel.component.knative.spi.KnativeEnvironment.class, value)); return true;
-        case "filters": target.getConfiguration().setFilters(property(camelContext, java.util.Map.class, value)); return true;
-        case "servicename":
-        case "serviceName": target.getConfiguration().setServiceName(property(camelContext, java.lang.String.class, value)); return true;
-        case "transportoptions":
-        case "transportOptions": target.getConfiguration().setTransportOptions(property(camelContext, java.util.Map.class, value)); return true;
-        case "bridgeerrorhandler":
-        case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
-        case "replywithcloudevent":
-        case "replyWithCloudEvent": target.getConfiguration().setReplyWithCloudEvent(property(camelContext, boolean.class, value)); return true;
         case "exceptionhandler":
         case "exceptionHandler": target.setExceptionHandler(property(camelContext, org.apache.camel.spi.ExceptionHandler.class, value)); return true;
         case "exchangepattern":
         case "exchangePattern": target.setExchangePattern(property(camelContext, org.apache.camel.ExchangePattern.class, value)); return true;
+        case "filters": target.getConfiguration().setFilters(property(camelContext, java.util.Map.class, value)); return true;
+        case "kind": target.getConfiguration().setKind(property(camelContext, java.lang.String.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
-        case "apiversion":
-        case "apiVersion": target.getConfiguration().setApiVersion(property(camelContext, java.lang.String.class, value)); return true;
-        case "basicpropertybinding":
-        case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
-        case "kind": target.getConfiguration().setKind(property(camelContext, java.lang.String.class, value)); return true;
+        case "replywithcloudevent":
+        case "replyWithCloudEvent": target.getConfiguration().setReplyWithCloudEvent(property(camelContext, boolean.class, value)); return true;
+        case "servicename":
+        case "serviceName": target.getConfiguration().setServiceName(property(camelContext, java.lang.String.class, value)); return true;
         case "synchronous": target.setSynchronous(property(camelContext, boolean.class, value)); return true;
+        case "transportoptions":
+        case "transportOptions": target.getConfiguration().setTransportOptions(property(camelContext, java.util.Map.class, value)); return true;
         default: return false;
         }
     }
 
+    @Override
+    public Map<String, Object> getAllOptions(Object target) {
+        Map<String, Object> answer = new CaseInsensitiveMap();
+        answer.put("apiVersion", java.lang.String.class);
+        answer.put("basicPropertyBinding", boolean.class);
+        answer.put("bridgeErrorHandler", boolean.class);
+        answer.put("ceOverride", java.util.Map.class);
+        answer.put("cloudEventsSpecVersion", java.lang.String.class);
+        answer.put("cloudEventsType", java.lang.String.class);
+        answer.put("environment", org.apache.camel.component.knative.spi.KnativeEnvironment.class);
+        answer.put("exceptionHandler", org.apache.camel.spi.ExceptionHandler.class);
+        answer.put("exchangePattern", org.apache.camel.ExchangePattern.class);
+        answer.put("filters", java.util.Map.class);
+        answer.put("kind", java.lang.String.class);
+        answer.put("lazyStartProducer", boolean.class);
+        answer.put("replyWithCloudEvent", boolean.class);
+        answer.put("serviceName", java.lang.String.class);
+        answer.put("synchronous", boolean.class);
+        answer.put("transportOptions", java.util.Map.class);
+        return answer;
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        KnativeEndpoint target = (KnativeEndpoint) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiversion":
+        case "apiVersion": return target.getConfiguration().getApiVersion();
+        case "basicpropertybinding":
+        case "basicPropertyBinding": return target.isBasicPropertyBinding();
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": return target.isBridgeErrorHandler();
+        case "ceoverride":
+        case "ceOverride": return target.getConfiguration().getCeOverride();
+        case "cloudeventsspecversion":
+        case "cloudEventsSpecVersion": return target.getConfiguration().getCloudEventsSpecVersion();
+        case "cloudeventstype":
+        case "cloudEventsType": return target.getConfiguration().getCloudEventsType();
+        case "environment": return target.getConfiguration().getEnvironment();
+        case "exceptionhandler":
+        case "exceptionHandler": return target.getExceptionHandler();
+        case "exchangepattern":
+        case "exchangePattern": return target.getExchangePattern();
+        case "filters": return target.getConfiguration().getFilters();
+        case "kind": return target.getConfiguration().getKind();
+        case "lazystartproducer":
+        case "lazyStartProducer": return target.isLazyStartProducer();
+        case "replywithcloudevent":
+        case "replyWithCloudEvent": return target.getConfiguration().isReplyWithCloudEvent();
+        case "servicename":
+        case "serviceName": return target.getConfiguration().getServiceName();
+        case "synchronous": return target.isSynchronous();
+        case "transportoptions":
+        case "transportOptions": return target.getConfiguration().getTransportOptions();
+        default: return null;
+        }
+    }
 }
 
diff --git a/camel-knative/camel-knative/src/generated/resources/org/apache/camel/component/knative/knative.json b/camel-knative/camel-knative/src/generated/resources/org/apache/camel/component/knative/knative.json
index 98a5a45..9fc04b0 100644
--- a/camel-knative/camel-knative/src/generated/resources/org/apache/camel/component/knative/knative.json
+++ b/camel-knative/camel-knative/src/generated/resources/org/apache/camel/component/knative/knative.json
@@ -1,6 +1,7 @@
 {
   "component": {
     "kind": "component",
+    "name": "knative",
     "scheme": "knative",
     "extendsScheme": "",
     "syntax": "knative:type\/name",
@@ -19,10 +20,6 @@
     "version": "1.3.0-SNAPSHOT"
   },
   "componentProperties": {
-    "cloudEventsSpecVersion": { "kind": "property", "displayName": "Cloud Events Spec Version", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Set the version of the cloudevents spec." },
-    "configuration": { "kind": "property", "displayName": "Configuration", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.KnativeConfiguration", "deprecated": false, "secret": false, "description": "Set the configuration." },
-    "environment": { "kind": "property", "displayName": "Environment", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeEnvironment", "deprecated": false, "secret": false, "description": "The environment" },
-    "environmentPath": { "kind": "property", "displayName": "Environment Path", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The path ot the environment definition" },
     "transport": { "kind": "property", "displayName": "Transport", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeTransport", "deprecated": false, "secret": false, "defaultValue": "http", "description": "The transport implementation." },
     "transportOptions": { "kind": "property", "displayName": "Transport Options", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "deprecated": false, "secret": false, "description": "Transport options." },
     "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored." },
diff --git a/examples/camel-k-runtime-example-quarkus-groovy/data/application.properties b/examples/camel-k-runtime-example-quarkus-groovy/data/application.properties
index b5802ce..b3c7007 100644
--- a/examples/camel-k-runtime-example-quarkus-groovy/data/application.properties
+++ b/examples/camel-k-runtime-example-quarkus-groovy/data/application.properties
@@ -16,6 +16,11 @@
 ## ---------------------------------------------------------------------------
 
 #
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+#
 # camel - main
 #
 camel.main.name = camel-q
diff --git a/examples/camel-k-runtime-example-quarkus-java/data/application.properties b/examples/camel-k-runtime-example-quarkus-java/data/application.properties
index b5802ce..b3c7007 100644
--- a/examples/camel-k-runtime-example-quarkus-java/data/application.properties
+++ b/examples/camel-k-runtime-example-quarkus-java/data/application.properties
@@ -16,6 +16,11 @@
 ## ---------------------------------------------------------------------------
 
 #
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+#
 # camel - main
 #
 camel.main.name = camel-q
diff --git a/examples/camel-k-runtime-example-quarkus-js/data/application.properties b/examples/camel-k-runtime-example-quarkus-js/data/application.properties
index b5802ce..b3c7007 100644
--- a/examples/camel-k-runtime-example-quarkus-js/data/application.properties
+++ b/examples/camel-k-runtime-example-quarkus-js/data/application.properties
@@ -16,6 +16,11 @@
 ## ---------------------------------------------------------------------------
 
 #
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+#
 # camel - main
 #
 camel.main.name = camel-q
diff --git a/examples/camel-k-runtime-example-quarkus-knative/data/application.properties b/examples/camel-k-runtime-example-quarkus-knative/data/application.properties
index 111c9b6..afc8456 100644
--- a/examples/camel-k-runtime-example-quarkus-knative/data/application.properties
+++ b/examples/camel-k-runtime-example-quarkus-knative/data/application.properties
@@ -14,11 +14,16 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
+
+#
+# Quarkus
+#
+quarkus.banner.enabled = false
+
 #
 # camel
 #
 camel.context.name = camel-q
 camel.main.stream-caching-enabled = true
 camel.main.stream-caching-spool-directory = ${java.io.tmpdir}/camel-q
-#camel.main.autowire-component-properties = false
 
diff --git a/examples/camel-k-runtime-example-quarkus-xml/data/application.properties b/examples/camel-k-runtime-example-quarkus-xml/data/application.properties
index 48757ed..15f63b0 100644
--- a/examples/camel-k-runtime-example-quarkus-xml/data/application.properties
+++ b/examples/camel-k-runtime-example-quarkus-xml/data/application.properties
@@ -16,6 +16,11 @@
 ## ---------------------------------------------------------------------------
 
 #
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+#
 # camel - main
 #
 camel.main.name = camel-q
diff --git a/examples/camel-k-runtime-example-quarkus-yaml/data/application.properties b/examples/camel-k-runtime-example-quarkus-yaml/data/application.properties
index 404ae13..5d62cff 100644
--- a/examples/camel-k-runtime-example-quarkus-yaml/data/application.properties
+++ b/examples/camel-k-runtime-example-quarkus-yaml/data/application.properties
@@ -19,6 +19,7 @@
 # Quarkus
 #
 quarkus.http.port = 9988
+quarkus.banner.enabled = false
 
 #
 # camel - main
@@ -28,6 +29,11 @@
 camel.main.stream-caching-spool-directory = ${java.io.tmpdir}/camel-q
 
 #
+# Camel - rest
+#
+camel.context.rest-configuration.component = platform-http
+
+#
 # Integration
 #
 message = test-app
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 f634446..23c82e8 100644
--- a/examples/camel-k-runtime-example-quarkus-yaml/data/routes.yaml
+++ b/examples/camel-k-runtime-example-quarkus-yaml/data/routes.yaml
@@ -19,7 +19,7 @@
     id: "flow-1"
     group: "routes"
     from:
-      uri: "platform-http://hello"
+      uri: "platform-http:/hello"
       steps:
         - convert-body:
             type: "java.lang.String"
@@ -31,11 +31,11 @@
     from:
       uri: "timer:tick"
       parameters:
-        period: "5s"
+        period: "5000"
       steps:
         - set-body:
             simple: "${exchangeProperty.CamelTimerName} -> ${exchangeProperty.CamelTimerCounter}"
         - to:
             uri: "log:tick"
         - log:
-            message: "${properties:message}"
\ No newline at end of file
+            message: "{{message}}"
\ No newline at end of file
diff --git a/examples/camel-k-runtime-example-yaml/pom.xml b/examples/camel-k-runtime-example-yaml/pom.xml
index f0525a7..4040593 100644
--- a/examples/camel-k-runtime-example-yaml/pom.xml
+++ b/examples/camel-k-runtime-example-yaml/pom.xml
@@ -37,12 +37,12 @@
             <artifactId>camel-k-loader-yaml</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-log</artifactId>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-runtime-http</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-undertow</artifactId>
+            <artifactId>camel-log</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
diff --git a/examples/camel-k-runtime-example-yaml/src/main/resources/conf.d/user.properties b/examples/camel-k-runtime-example-yaml/src/main/resources/conf.d/user.properties
index 86bf56f..52e3c6f 100644
--- a/examples/camel-k-runtime-example-yaml/src/main/resources/conf.d/user.properties
+++ b/examples/camel-k-runtime-example-yaml/src/main/resources/conf.d/user.properties
@@ -16,23 +16,6 @@
 ## ---------------------------------------------------------------------------
 
 #
-# Logging
-#
-logging.level.org.apache.camel.k = DEBUG
-
-#
-# camel - main
-#
-camel.main.name = camel-k
-camel.main.stream-caching-enabled = true
-camel.main.stream-caching-spool-directory = ${java.io.tmpdir}/camel-k
-
-#
-# Camel REST
-#
-camel.context.rest-configuration.component = undertow
-
-#
 # Integration
 #
 message = test-user
\ No newline at end of file
diff --git a/examples/camel-k-runtime-example-yaml/src/main/resources/conf/application.properties b/examples/camel-k-runtime-example-yaml/src/main/resources/conf/application.properties
index 60eb8e9..fbb9d81 100644
--- a/examples/camel-k-runtime-example-yaml/src/main/resources/conf/application.properties
+++ b/examples/camel-k-runtime-example-yaml/src/main/resources/conf/application.properties
@@ -26,11 +26,16 @@
 camel.main.name = camel-k
 camel.main.stream-caching-enabled = true
 camel.main.stream-caching-spool-directory = ${java.io.tmpdir}/camel-k
+#
+# Camel - rest
+#
+camel.context.rest-configuration.component = platform-http
 
 #
-# Camel REST
+# camel-k - platform http
 #
-camel.context.rest-configuration.component = undertow
+camel.k.customizer.platform-http.enabled = true
+camel.k.customizer.platform-http.bind-port = 8080
 
 #
 # Integration
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 ce5f331..11244a0 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
@@ -112,11 +112,11 @@
     from:
       uri: "timer:tick"
       parameters:
-        period: "5s"
+        period: "5000"
       steps:
         - set-body:
             simple: "${exchangeProperty.CamelTimerName} -> ${exchangeProperty.CamelTimerCounter}"
         - to:
             uri: "log:tick"
         - log:
-            message: "${properties:message}"
\ No newline at end of file
+            message: "{{message}}"
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 57ae8b6..7b59509 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,8 +39,8 @@
         <maven.compiler.target>11</maven.compiler.target>
         <kotlin.compiler.target>1.8</kotlin.compiler.target>
 
-        <camel.version>3.1.0</camel.version>
-        <camel-quarkus.version>1.0.0-M6</camel-quarkus.version>
+        <camel.version>3.2.0</camel.version>
+        <camel-quarkus.version>1.0.0-M7</camel-quarkus.version>
         <catalog.version>${camel.version}</catalog.version>
         <junit.version>5.6.2</junit.version>
         <joor.version>0.9.13</joor.version>
@@ -62,24 +62,25 @@
         <semver4j.version>3.1.0</semver4j.version>
         <vertx.version>3.8.5</vertx.version>
         <graalvm.version>19.3.1</graalvm.version>
-        <quarkus.version>1.3.2.Final</quarkus.version>
+        <quarkus.version>1.4.1.Final</quarkus.version>
         <jandex.version>2.1.3.Final</jandex.version>
         <javapoet.version>1.11.1</javapoet.version>
         <rest-assured.version>4.3.0</rest-assured.version>
+
         <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.6.0</maven-remote-resources-plugin.version>
+        <maven-remote-resources-plugin.version>1.7.0</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>
         <exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
         <mycila-license.version>3.0</mycila-license.version>
-        <maven-checkstyle-plugin.version>3.1.0</maven-checkstyle-plugin.version>
+        <maven-checkstyle-plugin.version>3.1.1</maven-checkstyle-plugin.version>
         <maven-checkstyle.version>8.26</maven-checkstyle.version>
         <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
         <maven-deploy-plugin.version>3.0.0-M1</maven-deploy-plugin.version>
-        <maven-javadoc-plugin.version>3.1.1</maven-javadoc-plugin.version>
+        <maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version>
         <maven-source-plugin.version>3.2.1</maven-source-plugin.version>
         <maven-assembly-plugin.version>3.2.0</maven-assembly-plugin.version>
         <jandex-maven-plugin.version>1.0.8</jandex-maven-plugin.version>
@@ -171,18 +172,6 @@
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-remote-resources-plugin</artifactId>
                     <version>${maven-remote-resources-plugin.version}</version>
-                    <executions>
-                        <execution>
-                            <goals>
-                                <goal>process</goal>
-                            </goals>
-                            <configuration>
-                                <resourceBundles>
-                                    <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
-                                </resourceBundles>
-                            </configuration>
-                        </execution>
-                    </executions>
                 </plugin>
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
@@ -650,68 +639,68 @@
             <id>release</id>
             <activation>
                 <property>
-                <name>release</name>
+                    <name>release</name>
                 </property>
             </activation>
             <build>
                 <plugins>
-                <!-- We want to deploy the artifact to a staging location for perusal -->
-                <plugin>
-                    <inherited>true</inherited>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-deploy-plugin</artifactId>
-                    <version>${maven-deploy-plugin.version}</version>
-                    <configuration>
-                        <updateReleaseInfo>true</updateReleaseInfo>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-source-plugin</artifactId>
-                    <version>${maven-source-plugin.version}</version>
-                    <executions>
-                        <execution>
-                            <id>attach-sources</id>
-                            <goals>
-                                <goal>jar</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-javadoc-plugin</artifactId>
-                    <version>${maven-javadoc-plugin.version}</version>
-                    <executions>
-                        <execution>
-                            <id>attach-javadocs</id>
-                            <goals>
-                                <goal>jar</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                    <configuration>
-                        <additionalOptions>${javadoc.opts}</additionalOptions>
-                        <source>8</source>
-                    </configuration>
-                </plugin>
-                <!-- We want to sign the artifact, the POM, and all attached artifacts -->
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-gpg-plugin</artifactId>
-                    <version>${maven-gpg-plugin.version}</version>
-                    <configuration>
-                        <passphrase>${gpg.passphrase}</passphrase>
-                        <useAgent>${gpg.useagent}</useAgent>
-                    </configuration>
-                    <executions>
-                        <execution>
-                            <goals>
-                                <goal>sign</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
+                    <!-- We want to deploy the artifact to a staging location for perusal -->
+                    <plugin>
+                        <inherited>true</inherited>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-deploy-plugin</artifactId>
+                        <version>${maven-deploy-plugin.version}</version>
+                        <configuration>
+                            <updateReleaseInfo>true</updateReleaseInfo>
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-source-plugin</artifactId>
+                        <version>${maven-source-plugin.version}</version>
+                        <executions>
+                            <execution>
+                                <id>attach-sources</id>
+                                <goals>
+                                    <goal>jar</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-javadoc-plugin</artifactId>
+                        <version>${maven-javadoc-plugin.version}</version>
+                        <executions>
+                            <execution>
+                                <id>attach-javadocs</id>
+                                <goals>
+                                    <goal>jar</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <additionalOptions>${javadoc.opts}</additionalOptions>
+                            <source>8</source>
+                        </configuration>
+                    </plugin>
+                    <!-- We want to sign the artifact, the POM, and all attached artifacts -->
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-gpg-plugin</artifactId>
+                        <version>${maven-gpg-plugin.version}</version>
+                        <configuration>
+                            <passphrase>${gpg.passphrase}</passphrase>
+                            <useAgent>${gpg.useagent}</useAgent>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>sign</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
                 </plugins>
             </build>
         </profile>
diff --git a/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLMixIn.java b/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLMixIn.java
new file mode 100644
index 0000000..fe181b8
--- /dev/null
+++ b/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLMixIn.java
@@ -0,0 +1,28 @@
+/*
+ * 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.annotation.yaml;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface YAMLMixIn {
+    Class<?>[] value() default {};
+}
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 8a4c36e..f681f60 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
@@ -94,6 +94,22 @@
         definitions(LOAD_BALANCE_DEFINITION_CLASS).forEach(
             (k, v) -> mb.addStatement("context.registerSubtypes(new com.fasterxml.jackson.databind.jsontype.NamedType($T.class, $S))", v, k)
         );
+        annotated(YAML_MIXIN_ANNOTATION).forEach(i -> {
+            final AnnotationInstance annotation = i.classAnnotation(YAML_MIXIN_ANNOTATION);
+            final AnnotationValue targets = annotation.value("value");
+
+            String name = i.toString();
+            if (i.nestingType() == ClassInfo.NestingType.INNER) {
+                name = i.enclosingClass().toString() + "." + i.simpleName();
+            }
+
+            if (targets != null) {
+                for (String target: targets.asStringArray()) {
+                    mb.addStatement("context.setMixInAnnotations($L.class, $L.class);", target, name);
+                }
+            }
+        });
+
 
         type.addMethod(mb.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 22bb25b..337e045 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
@@ -48,6 +48,7 @@
     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_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");
 
     @Parameter(defaultValue = "${project}", readonly = true, required = true)