You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/07/29 15:22:42 UTC

[camel] branch main updated (af21269 -> 5003dbb)

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

davsclaus pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git.


    from af21269  Regen
     new e02ceef  CAMEL-16828: camel-cloud - should not use reflection when configuring model to factory. For this we need to use generated configurer classes.
     new 5003dbb  CAMEL-16828: camel-cloud - should not use reflection when configuring model to factory. For this we need to use generated configurer classes.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 components/camel-consul/pom.xml                    |  25 ++++
 .../ConsulServiceDiscoveryFactoryConfigurer.java   | 103 +++++++++++++
 ...nent.consul.cloud.ConsulServiceDiscoveryFactory |   2 +
 .../cloud/ConsulServiceDiscoveryFactory.java       |  20 +--
 components/camel-dns/pom.xml                       |  25 ++++
 .../DnsServiceDiscoveryFactoryConfigurer.java      |  55 +++++++
 ....component.dns.cloud.DnsServiceDiscoveryFactory |   2 +
 .../dns/cloud/DnsServiceDiscoveryFactory.java      |   2 +
 components/camel-etcd/pom.xml                      |  25 ++++
 .../EtcdServiceDiscoveryFactoryConfigurer.java     |  91 ++++++++++++
 ...omponent.etcd.cloud.EtcdServiceDiscoveryFactory |   2 +
 .../etcd/cloud/EtcdServiceDiscoveryFactory.java    |   2 +
 components/camel-http/pom.xml                      |  25 ++++
 .../HttpServiceExpressionFactoryConfigurer.java    |  35 +++++
 ...mponent.http.cloud.HttpServiceExpressionFactory |   2 +
 .../http/cloud/HttpServiceExpressionFactory.java   |   2 +
 components/camel-kubernetes/pom.xml                |  24 +++
 ...ubernetesServiceDiscoveryFactoryConfigurer.java | 157 ++++++++++++++++++++
 ...ernetes.cloud.KubernetesServiceDiscoveryFactory |   2 +
 .../cloud/KubernetesServiceDiscoveryFactory.java   |   2 +
 components/camel-netty-http/pom.xml                |   1 +
 ...ettyHttpServiceExpressionFactoryConfigurer.java |  35 +++++
 ...ty.http.cloud.NettyHttpServiceExpressionFactory |   2 +
 .../cloud/NettyHttpServiceExpressionFactory.java   |   2 +
 components/camel-ribbon/pom.xml                    |  25 ++++
 ...RibbonServiceLoadBalancerFactoryConfigurer.java |  82 +++++++++++
 ...t.ribbon.cloud.RibbonServiceLoadBalancerFactory |   2 +
 .../cloud/RibbonServiceLoadBalancerFactory.java    |   2 +
 components/camel-undertow/pom.xml                  |  25 ++++
 ...UndertowServiceExpressionFactoryConfigurer.java |  35 +++++
 ...undertow.cloud.UndertowServiceExpressionFactory |   2 +
 .../cloud/UndertowServiceExpressionFactory.java    |   2 +
 components/camel-zookeeper/pom.xml                 |  19 +++
 ...ZooKeeperServiceDiscoveryFactoryConfigurer.java | 162 +++++++++++++++++++++
 ...ookeeper.cloud.ZooKeeperServiceDiscoveryFactory |   2 +
 .../cloud/ZooKeeperServiceDiscoveryFactory.java    |   2 +
 36 files changed, 985 insertions(+), 18 deletions(-)
 create mode 100644 components/camel-consul/src/generated/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryFactoryConfigurer.java
 create mode 100644 components/camel-consul/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.consul.cloud.ConsulServiceDiscoveryFactory
 create mode 100644 components/camel-dns/src/generated/java/org/apache/camel/component/dns/cloud/DnsServiceDiscoveryFactoryConfigurer.java
 create mode 100644 components/camel-dns/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.dns.cloud.DnsServiceDiscoveryFactory
 create mode 100644 components/camel-etcd/src/generated/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryFactoryConfigurer.java
 create mode 100644 components/camel-etcd/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.etcd.cloud.EtcdServiceDiscoveryFactory
 create mode 100644 components/camel-http/src/generated/java/org/apache/camel/component/http/cloud/HttpServiceExpressionFactoryConfigurer.java
 create mode 100644 components/camel-http/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.http.cloud.HttpServiceExpressionFactory
 create mode 100644 components/camel-kubernetes/src/generated/java/org/apache/camel/component/kubernetes/cloud/KubernetesServiceDiscoveryFactoryConfigurer.java
 create mode 100644 components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.kubernetes.cloud.KubernetesServiceDiscoveryFactory
 create mode 100644 components/camel-netty-http/src/generated/java/org/apache/camel/component/netty/http/cloud/NettyHttpServiceExpressionFactoryConfigurer.java
 create mode 100644 components/camel-netty-http/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.netty.http.cloud.NettyHttpServiceExpressionFactory
 create mode 100644 components/camel-ribbon/src/generated/java/org/apache/camel/component/ribbon/cloud/RibbonServiceLoadBalancerFactoryConfigurer.java
 create mode 100644 components/camel-ribbon/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancerFactory
 create mode 100644 components/camel-undertow/src/generated/java/org/apache/camel/component/undertow/cloud/UndertowServiceExpressionFactoryConfigurer.java
 create mode 100644 components/camel-undertow/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.undertow.cloud.UndertowServiceExpressionFactory
 create mode 100644 components/camel-zookeeper/src/generated/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceDiscoveryFactoryConfigurer.java
 create mode 100644 components/camel-zookeeper/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.zookeeper.cloud.ZooKeeperServiceDiscoveryFactory

[camel] 01/02: CAMEL-16828: camel-cloud - should not use reflection when configuring model to factory. For this we need to use generated configurer classes.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit e02ceef9c8b0dba810ffb17f717ab9725e0c25cb
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Jul 29 17:17:26 2021 +0200

    CAMEL-16828: camel-cloud - should not use reflection when configuring model to factory. For this we need to use generated configurer classes.
---
 components/camel-consul/pom.xml                    |  25 ++++
 .../ConsulServiceDiscoveryFactoryConfigurer.java   | 103 +++++++++++++
 ...nent.consul.cloud.ConsulServiceDiscoveryFactory |   2 +
 .../cloud/ConsulServiceDiscoveryFactory.java       |  20 +--
 components/camel-dns/pom.xml                       |  25 ++++
 .../DnsServiceDiscoveryFactoryConfigurer.java      |  55 +++++++
 ....component.dns.cloud.DnsServiceDiscoveryFactory |   2 +
 .../dns/cloud/DnsServiceDiscoveryFactory.java      |   2 +
 components/camel-etcd/pom.xml                      |  25 ++++
 .../EtcdServiceDiscoveryFactoryConfigurer.java     |  91 ++++++++++++
 ...omponent.etcd.cloud.EtcdServiceDiscoveryFactory |   2 +
 .../etcd/cloud/EtcdServiceDiscoveryFactory.java    |   2 +
 components/camel-kubernetes/pom.xml                |  24 +++
 ...ubernetesServiceDiscoveryFactoryConfigurer.java | 157 ++++++++++++++++++++
 ...ernetes.cloud.KubernetesServiceDiscoveryFactory |   2 +
 .../cloud/KubernetesServiceDiscoveryFactory.java   |   2 +
 components/camel-ribbon/pom.xml                    |  25 ++++
 ...RibbonServiceLoadBalancerFactoryConfigurer.java |  82 +++++++++++
 ...t.ribbon.cloud.RibbonServiceLoadBalancerFactory |   2 +
 .../cloud/RibbonServiceLoadBalancerFactory.java    |   2 +
 components/camel-zookeeper/pom.xml                 |  19 +++
 ...ZooKeeperServiceDiscoveryFactoryConfigurer.java | 162 +++++++++++++++++++++
 ...ookeeper.cloud.ZooKeeperServiceDiscoveryFactory |   2 +
 .../cloud/ZooKeeperServiceDiscoveryFactory.java    |   2 +
 24 files changed, 817 insertions(+), 18 deletions(-)

diff --git a/components/camel-consul/pom.xml b/components/camel-consul/pom.xml
index 203cbcc..bc99d44 100644
--- a/components/camel-consul/pom.xml
+++ b/components/camel-consul/pom.xml
@@ -171,4 +171,29 @@
         </dependency>
 
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-configurer</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>generate-configurer</goal>
+                        </goals>
+                        <configuration>
+                            <discoverClasses>false</discoverClasses>
+                            <classes>
+                                <class>org.apache.camel.component.consul.cloud.ConsulServiceDiscoveryFactory</class>
+                            </classes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
diff --git a/components/camel-consul/src/generated/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryFactoryConfigurer.java b/components/camel-consul/src/generated/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryFactoryConfigurer.java
new file mode 100644
index 0000000..f9afa31
--- /dev/null
+++ b/components/camel-consul/src/generated/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryFactoryConfigurer.java
@@ -0,0 +1,103 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.consul.cloud;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.component.consul.cloud.ConsulServiceDiscoveryFactory;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class ConsulServiceDiscoveryFactoryConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        org.apache.camel.component.consul.cloud.ConsulServiceDiscoveryFactory target = (org.apache.camel.component.consul.cloud.ConsulServiceDiscoveryFactory) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "acltoken":
+        case "AclToken": target.setAclToken(property(camelContext, java.lang.String.class, value)); return true;
+        case "blockseconds":
+        case "BlockSeconds": target.setBlockSeconds(property(camelContext, java.lang.Integer.class, value)); return true;
+        case "connecttimeoutmillis":
+        case "ConnectTimeoutMillis": target.setConnectTimeoutMillis(property(camelContext, java.lang.Long.class, value)); return true;
+        case "datacenter":
+        case "Datacenter": target.setDatacenter(property(camelContext, java.lang.String.class, value)); return true;
+        case "password":
+        case "Password": target.setPassword(property(camelContext, java.lang.String.class, value)); return true;
+        case "readtimeoutmillis":
+        case "ReadTimeoutMillis": target.setReadTimeoutMillis(property(camelContext, java.lang.Long.class, value)); return true;
+        case "sslcontextparameters":
+        case "SslContextParameters": target.setSslContextParameters(property(camelContext, org.apache.camel.support.jsse.SSLContextParameters.class, value)); return true;
+        case "url":
+        case "Url": target.setUrl(property(camelContext, java.lang.String.class, value)); return true;
+        case "username":
+        case "UserName": target.setUserName(property(camelContext, java.lang.String.class, value)); return true;
+        case "writetimeoutmillis":
+        case "WriteTimeoutMillis": target.setWriteTimeoutMillis(property(camelContext, java.lang.Long.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "acltoken":
+        case "AclToken": return java.lang.String.class;
+        case "blockseconds":
+        case "BlockSeconds": return java.lang.Integer.class;
+        case "connecttimeoutmillis":
+        case "ConnectTimeoutMillis": return java.lang.Long.class;
+        case "datacenter":
+        case "Datacenter": return java.lang.String.class;
+        case "password":
+        case "Password": return java.lang.String.class;
+        case "readtimeoutmillis":
+        case "ReadTimeoutMillis": return java.lang.Long.class;
+        case "sslcontextparameters":
+        case "SslContextParameters": return org.apache.camel.support.jsse.SSLContextParameters.class;
+        case "url":
+        case "Url": return java.lang.String.class;
+        case "username":
+        case "UserName": return java.lang.String.class;
+        case "writetimeoutmillis":
+        case "WriteTimeoutMillis": return java.lang.Long.class;
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        org.apache.camel.component.consul.cloud.ConsulServiceDiscoveryFactory target = (org.apache.camel.component.consul.cloud.ConsulServiceDiscoveryFactory) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "acltoken":
+        case "AclToken": return target.getAclToken();
+        case "blockseconds":
+        case "BlockSeconds": return target.getBlockSeconds();
+        case "connecttimeoutmillis":
+        case "ConnectTimeoutMillis": return target.getConnectTimeoutMillis();
+        case "datacenter":
+        case "Datacenter": return target.getDatacenter();
+        case "password":
+        case "Password": return target.getPassword();
+        case "readtimeoutmillis":
+        case "ReadTimeoutMillis": return target.getReadTimeoutMillis();
+        case "sslcontextparameters":
+        case "SslContextParameters": return target.getSslContextParameters();
+        case "url":
+        case "Url": return target.getUrl();
+        case "username":
+        case "UserName": return target.getUserName();
+        case "writetimeoutmillis":
+        case "WriteTimeoutMillis": return target.getWriteTimeoutMillis();
+        default: return null;
+        }
+    }
+}
+
diff --git a/components/camel-consul/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.consul.cloud.ConsulServiceDiscoveryFactory b/components/camel-consul/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.consul.cloud.ConsulServiceDiscoveryFactory
new file mode 100644
index 0000000..845bdf4
--- /dev/null
+++ b/components/camel-consul/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.consul.cloud.ConsulServiceDiscoveryFactory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.consul.cloud.ConsulServiceDiscoveryFactoryConfigurer
diff --git a/components/camel-consul/src/main/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryFactory.java b/components/camel-consul/src/main/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryFactory.java
index 8f7bcad..ea0d727 100644
--- a/components/camel-consul/src/main/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryFactory.java
+++ b/components/camel-consul/src/main/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryFactory.java
@@ -20,10 +20,12 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.cloud.ServiceDiscovery;
 import org.apache.camel.cloud.ServiceDiscoveryFactory;
 import org.apache.camel.component.consul.ConsulConfiguration;
+import org.apache.camel.spi.Configurer;
 import org.apache.camel.spi.annotations.CloudServiceFactory;
 import org.apache.camel.support.jsse.SSLContextParameters;
 
 @CloudServiceFactory("consul-service-discovery")
+@Configurer
 public class ConsulServiceDiscoveryFactory implements ServiceDiscoveryFactory {
     private final ConsulConfiguration configuration;
 
@@ -47,24 +49,6 @@ public class ConsulServiceDiscoveryFactory implements ServiceDiscoveryFactory {
         configuration.setUrl(url);
     }
 
-    /**
-     * @deprecated, @deprecated replaced by {@link #getDatacenter()} ()}
-     * 
-     * @return
-     */
-    @Deprecated
-    public String getDc() {
-        return configuration.getDatacenter();
-    }
-
-    /**
-     * @deprecated, @deprecated replaced by {@link #setDatacenter(String)}} ()}
-     */
-    @Deprecated
-    public void setDc(String dc) {
-        configuration.setDc(dc);
-    }
-
     public void setDatacenter(String dc) {
         configuration.setDatacenter(dc);
     }
diff --git a/components/camel-dns/pom.xml b/components/camel-dns/pom.xml
index 1bfdf2c..e85554f 100644
--- a/components/camel-dns/pom.xml
+++ b/components/camel-dns/pom.xml
@@ -72,4 +72,29 @@
 
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-configurer</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>generate-configurer</goal>
+                        </goals>
+                        <configuration>
+                            <discoverClasses>false</discoverClasses>
+                            <classes>
+                                <class>org.apache.camel.component.dns.cloud.DnsServiceDiscoveryFactory</class>
+                            </classes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+
 </project>
diff --git a/components/camel-dns/src/generated/java/org/apache/camel/component/dns/cloud/DnsServiceDiscoveryFactoryConfigurer.java b/components/camel-dns/src/generated/java/org/apache/camel/component/dns/cloud/DnsServiceDiscoveryFactoryConfigurer.java
new file mode 100644
index 0000000..10457b7
--- /dev/null
+++ b/components/camel-dns/src/generated/java/org/apache/camel/component/dns/cloud/DnsServiceDiscoveryFactoryConfigurer.java
@@ -0,0 +1,55 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.dns.cloud;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.component.dns.cloud.DnsServiceDiscoveryFactory;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class DnsServiceDiscoveryFactoryConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        org.apache.camel.component.dns.cloud.DnsServiceDiscoveryFactory target = (org.apache.camel.component.dns.cloud.DnsServiceDiscoveryFactory) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "domain":
+        case "Domain": target.setDomain(property(camelContext, java.lang.String.class, value)); return true;
+        case "proto":
+        case "Proto": target.setProto(property(camelContext, java.lang.String.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "domain":
+        case "Domain": return java.lang.String.class;
+        case "proto":
+        case "Proto": return java.lang.String.class;
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        org.apache.camel.component.dns.cloud.DnsServiceDiscoveryFactory target = (org.apache.camel.component.dns.cloud.DnsServiceDiscoveryFactory) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "domain":
+        case "Domain": return target.getDomain();
+        case "proto":
+        case "Proto": return target.getProto();
+        default: return null;
+        }
+    }
+}
+
diff --git a/components/camel-dns/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.dns.cloud.DnsServiceDiscoveryFactory b/components/camel-dns/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.dns.cloud.DnsServiceDiscoveryFactory
new file mode 100644
index 0000000..1331ed7
--- /dev/null
+++ b/components/camel-dns/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.dns.cloud.DnsServiceDiscoveryFactory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.dns.cloud.DnsServiceDiscoveryFactoryConfigurer
diff --git a/components/camel-dns/src/main/java/org/apache/camel/component/dns/cloud/DnsServiceDiscoveryFactory.java b/components/camel-dns/src/main/java/org/apache/camel/component/dns/cloud/DnsServiceDiscoveryFactory.java
index d327e84..1ad2348 100644
--- a/components/camel-dns/src/main/java/org/apache/camel/component/dns/cloud/DnsServiceDiscoveryFactory.java
+++ b/components/camel-dns/src/main/java/org/apache/camel/component/dns/cloud/DnsServiceDiscoveryFactory.java
@@ -20,9 +20,11 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.cloud.ServiceDiscovery;
 import org.apache.camel.cloud.ServiceDiscoveryFactory;
 import org.apache.camel.component.dns.DnsConfiguration;
+import org.apache.camel.spi.Configurer;
 import org.apache.camel.spi.annotations.CloudServiceFactory;
 
 @CloudServiceFactory("dns-service-discovery")
+@Configurer
 public class DnsServiceDiscoveryFactory implements ServiceDiscoveryFactory {
     private final DnsConfiguration configuration;
 
diff --git a/components/camel-etcd/pom.xml b/components/camel-etcd/pom.xml
index c7512f9..a350325 100644
--- a/components/camel-etcd/pom.xml
+++ b/components/camel-etcd/pom.xml
@@ -98,4 +98,29 @@
         </dependency>
 
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-configurer</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>generate-configurer</goal>
+                        </goals>
+                        <configuration>
+                            <discoverClasses>false</discoverClasses>
+                            <classes>
+                                <class>org.apache.camel.component.etcd.cloud.EtcdServiceDiscoveryFactory</class>
+                            </classes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
diff --git a/components/camel-etcd/src/generated/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryFactoryConfigurer.java b/components/camel-etcd/src/generated/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryFactoryConfigurer.java
new file mode 100644
index 0000000..490c81b
--- /dev/null
+++ b/components/camel-etcd/src/generated/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryFactoryConfigurer.java
@@ -0,0 +1,91 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.etcd.cloud;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.component.etcd.cloud.EtcdServiceDiscoveryFactory;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class EtcdServiceDiscoveryFactoryConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        org.apache.camel.component.etcd.cloud.EtcdServiceDiscoveryFactory target = (org.apache.camel.component.etcd.cloud.EtcdServiceDiscoveryFactory) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "password":
+        case "Password": target.setPassword(property(camelContext, java.lang.String.class, value)); return true;
+        case "servicepath":
+        case "ServicePath": target.setServicePath(property(camelContext, java.lang.String.class, value)); return true;
+        case "sslcontextparameters":
+        case "SslContextParameters": target.setSslContextParameters(property(camelContext, org.apache.camel.support.jsse.SSLContextParameters.class, value)); return true;
+        case "timetolive":
+        case "TimeToLive": target.setTimeToLive(property(camelContext, java.lang.Integer.class, value)); return true;
+        case "timeout":
+        case "Timeout": target.setTimeout(property(camelContext, java.lang.Long.class, value)); return true;
+        case "type":
+        case "Type": target.setType(property(camelContext, java.lang.String.class, value)); return true;
+        case "uris":
+        case "Uris": target.setUris(property(camelContext, java.lang.String.class, value)); return true;
+        case "username":
+        case "UserName": target.setUserName(property(camelContext, java.lang.String.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "password":
+        case "Password": return java.lang.String.class;
+        case "servicepath":
+        case "ServicePath": return java.lang.String.class;
+        case "sslcontextparameters":
+        case "SslContextParameters": return org.apache.camel.support.jsse.SSLContextParameters.class;
+        case "timetolive":
+        case "TimeToLive": return java.lang.Integer.class;
+        case "timeout":
+        case "Timeout": return java.lang.Long.class;
+        case "type":
+        case "Type": return java.lang.String.class;
+        case "uris":
+        case "Uris": return java.lang.String.class;
+        case "username":
+        case "UserName": return java.lang.String.class;
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        org.apache.camel.component.etcd.cloud.EtcdServiceDiscoveryFactory target = (org.apache.camel.component.etcd.cloud.EtcdServiceDiscoveryFactory) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "password":
+        case "Password": return target.getPassword();
+        case "servicepath":
+        case "ServicePath": return target.getServicePath();
+        case "sslcontextparameters":
+        case "SslContextParameters": return target.getSslContextParameters();
+        case "timetolive":
+        case "TimeToLive": return target.getTimeToLive();
+        case "timeout":
+        case "Timeout": return target.getTimeout();
+        case "type":
+        case "Type": return target.getType();
+        case "uris":
+        case "Uris": return target.getUris();
+        case "username":
+        case "UserName": return target.getUserName();
+        default: return null;
+        }
+    }
+}
+
diff --git a/components/camel-etcd/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.etcd.cloud.EtcdServiceDiscoveryFactory b/components/camel-etcd/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.etcd.cloud.EtcdServiceDiscoveryFactory
new file mode 100644
index 0000000..6b7d5fe
--- /dev/null
+++ b/components/camel-etcd/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.etcd.cloud.EtcdServiceDiscoveryFactory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.etcd.cloud.EtcdServiceDiscoveryFactoryConfigurer
diff --git a/components/camel-etcd/src/main/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryFactory.java b/components/camel-etcd/src/main/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryFactory.java
index a90ed64..5f6fd2d 100644
--- a/components/camel-etcd/src/main/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryFactory.java
+++ b/components/camel-etcd/src/main/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryFactory.java
@@ -20,11 +20,13 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.cloud.ServiceDiscovery;
 import org.apache.camel.cloud.ServiceDiscoveryFactory;
 import org.apache.camel.component.etcd.EtcdConfiguration;
+import org.apache.camel.spi.Configurer;
 import org.apache.camel.spi.annotations.CloudServiceFactory;
 import org.apache.camel.support.jsse.SSLContextParameters;
 import org.apache.camel.util.ObjectHelper;
 
 @CloudServiceFactory("etcd-service-discovery")
+@Configurer
 public class EtcdServiceDiscoveryFactory implements ServiceDiscoveryFactory {
     private final EtcdConfiguration configuration;
     private String type;
diff --git a/components/camel-kubernetes/pom.xml b/components/camel-kubernetes/pom.xml
index 0e18aad..ab9cb4c 100644
--- a/components/camel-kubernetes/pom.xml
+++ b/components/camel-kubernetes/pom.xml
@@ -132,6 +132,30 @@
 
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-configurer</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>generate-configurer</goal>
+                        </goals>
+                        <configuration>
+                            <discoverClasses>false</discoverClasses>
+                            <classes>
+                                <class>org.apache.camel.component.kubernetes.cloud.KubernetesServiceDiscoveryFactory</class>
+                            </classes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
     <profiles>
         <profile>
             <id>jdk9s-build</id>
diff --git a/components/camel-kubernetes/src/generated/java/org/apache/camel/component/kubernetes/cloud/KubernetesServiceDiscoveryFactoryConfigurer.java b/components/camel-kubernetes/src/generated/java/org/apache/camel/component/kubernetes/cloud/KubernetesServiceDiscoveryFactoryConfigurer.java
new file mode 100644
index 0000000..f22c49f
--- /dev/null
+++ b/components/camel-kubernetes/src/generated/java/org/apache/camel/component/kubernetes/cloud/KubernetesServiceDiscoveryFactoryConfigurer.java
@@ -0,0 +1,157 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.kubernetes.cloud;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.component.kubernetes.cloud.KubernetesServiceDiscoveryFactory;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class KubernetesServiceDiscoveryFactoryConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        org.apache.camel.component.kubernetes.cloud.KubernetesServiceDiscoveryFactory target = (org.apache.camel.component.kubernetes.cloud.KubernetesServiceDiscoveryFactory) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiversion":
+        case "ApiVersion": target.setApiVersion(property(camelContext, java.lang.String.class, value)); return true;
+        case "cacertdata":
+        case "CaCertData": target.setCaCertData(property(camelContext, java.lang.String.class, value)); return true;
+        case "cacertfile":
+        case "CaCertFile": target.setCaCertFile(property(camelContext, java.lang.String.class, value)); return true;
+        case "clientcertdata":
+        case "ClientCertData": target.setClientCertData(property(camelContext, java.lang.String.class, value)); return true;
+        case "clientcertfile":
+        case "ClientCertFile": target.setClientCertFile(property(camelContext, java.lang.String.class, value)); return true;
+        case "clientkeyalgo":
+        case "ClientKeyAlgo": target.setClientKeyAlgo(property(camelContext, java.lang.String.class, value)); return true;
+        case "clientkeydata":
+        case "ClientKeyData": target.setClientKeyData(property(camelContext, java.lang.String.class, value)); return true;
+        case "clientkeyfile":
+        case "ClientKeyFile": target.setClientKeyFile(property(camelContext, java.lang.String.class, value)); return true;
+        case "clientkeypassphrase":
+        case "ClientKeyPassphrase": target.setClientKeyPassphrase(property(camelContext, java.lang.String.class, value)); return true;
+        case "dnsdomain":
+        case "DnsDomain": target.setDnsDomain(property(camelContext, java.lang.String.class, value)); return true;
+        case "lookup":
+        case "Lookup": target.setLookup(property(camelContext, java.lang.String.class, value)); return true;
+        case "masterurl":
+        case "MasterUrl": target.setMasterUrl(property(camelContext, java.lang.String.class, value)); return true;
+        case "namespace":
+        case "Namespace": target.setNamespace(property(camelContext, java.lang.String.class, value)); return true;
+        case "oauthtoken":
+        case "OauthToken": target.setOauthToken(property(camelContext, java.lang.String.class, value)); return true;
+        case "password":
+        case "Password": target.setPassword(property(camelContext, java.lang.String.class, value)); return true;
+        case "portname":
+        case "PortName": target.setPortName(property(camelContext, java.lang.String.class, value)); return true;
+        case "portprotocol":
+        case "PortProtocol": target.setPortProtocol(property(camelContext, java.lang.String.class, value)); return true;
+        case "trustcerts":
+        case "TrustCerts": target.setTrustCerts(property(camelContext, java.lang.Boolean.class, value)); return true;
+        case "username":
+        case "Username": target.setUsername(property(camelContext, java.lang.String.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiversion":
+        case "ApiVersion": return java.lang.String.class;
+        case "cacertdata":
+        case "CaCertData": return java.lang.String.class;
+        case "cacertfile":
+        case "CaCertFile": return java.lang.String.class;
+        case "clientcertdata":
+        case "ClientCertData": return java.lang.String.class;
+        case "clientcertfile":
+        case "ClientCertFile": return java.lang.String.class;
+        case "clientkeyalgo":
+        case "ClientKeyAlgo": return java.lang.String.class;
+        case "clientkeydata":
+        case "ClientKeyData": return java.lang.String.class;
+        case "clientkeyfile":
+        case "ClientKeyFile": return java.lang.String.class;
+        case "clientkeypassphrase":
+        case "ClientKeyPassphrase": return java.lang.String.class;
+        case "dnsdomain":
+        case "DnsDomain": return java.lang.String.class;
+        case "lookup":
+        case "Lookup": return java.lang.String.class;
+        case "masterurl":
+        case "MasterUrl": return java.lang.String.class;
+        case "namespace":
+        case "Namespace": return java.lang.String.class;
+        case "oauthtoken":
+        case "OauthToken": return java.lang.String.class;
+        case "password":
+        case "Password": return java.lang.String.class;
+        case "portname":
+        case "PortName": return java.lang.String.class;
+        case "portprotocol":
+        case "PortProtocol": return java.lang.String.class;
+        case "trustcerts":
+        case "TrustCerts": return java.lang.Boolean.class;
+        case "username":
+        case "Username": return java.lang.String.class;
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        org.apache.camel.component.kubernetes.cloud.KubernetesServiceDiscoveryFactory target = (org.apache.camel.component.kubernetes.cloud.KubernetesServiceDiscoveryFactory) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiversion":
+        case "ApiVersion": return target.getApiVersion();
+        case "cacertdata":
+        case "CaCertData": return target.getCaCertData();
+        case "cacertfile":
+        case "CaCertFile": return target.getCaCertFile();
+        case "clientcertdata":
+        case "ClientCertData": return target.getClientCertData();
+        case "clientcertfile":
+        case "ClientCertFile": return target.getClientCertFile();
+        case "clientkeyalgo":
+        case "ClientKeyAlgo": return target.getClientKeyAlgo();
+        case "clientkeydata":
+        case "ClientKeyData": return target.getClientKeyData();
+        case "clientkeyfile":
+        case "ClientKeyFile": return target.getClientKeyFile();
+        case "clientkeypassphrase":
+        case "ClientKeyPassphrase": return target.getClientKeyPassphrase();
+        case "dnsdomain":
+        case "DnsDomain": return target.getDnsDomain();
+        case "lookup":
+        case "Lookup": return target.getLookup();
+        case "masterurl":
+        case "MasterUrl": return target.getMasterUrl();
+        case "namespace":
+        case "Namespace": return target.getNamespace();
+        case "oauthtoken":
+        case "OauthToken": return target.getOauthToken();
+        case "password":
+        case "Password": return target.getPassword();
+        case "portname":
+        case "PortName": return target.getPortName();
+        case "portprotocol":
+        case "PortProtocol": return target.getPortProtocol();
+        case "trustcerts":
+        case "TrustCerts": return target.getTrustCerts();
+        case "username":
+        case "Username": return target.getUsername();
+        default: return null;
+        }
+    }
+}
+
diff --git a/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.kubernetes.cloud.KubernetesServiceDiscoveryFactory b/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.kubernetes.cloud.KubernetesServiceDiscoveryFactory
new file mode 100644
index 0000000..4bcf129
--- /dev/null
+++ b/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.kubernetes.cloud.KubernetesServiceDiscoveryFactory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.kubernetes.cloud.KubernetesServiceDiscoveryFactoryConfigurer
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cloud/KubernetesServiceDiscoveryFactory.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cloud/KubernetesServiceDiscoveryFactory.java
index b1d6798..b3b5cc7 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cloud/KubernetesServiceDiscoveryFactory.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cloud/KubernetesServiceDiscoveryFactory.java
@@ -20,10 +20,12 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.cloud.ServiceDiscovery;
 import org.apache.camel.cloud.ServiceDiscoveryFactory;
 import org.apache.camel.component.kubernetes.KubernetesConfiguration;
+import org.apache.camel.spi.Configurer;
 import org.apache.camel.spi.annotations.CloudServiceFactory;
 import org.apache.camel.util.ObjectHelper;
 
 @CloudServiceFactory("kubernetes-service-discovery")
+@Configurer
 public class KubernetesServiceDiscoveryFactory implements ServiceDiscoveryFactory {
     private final KubernetesConfiguration configuration;
     private String lookup;
diff --git a/components/camel-ribbon/pom.xml b/components/camel-ribbon/pom.xml
index c8d661f..ebef261 100644
--- a/components/camel-ribbon/pom.xml
+++ b/components/camel-ribbon/pom.xml
@@ -109,4 +109,29 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-configurer</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>generate-configurer</goal>
+                        </goals>
+                        <configuration>
+                            <discoverClasses>false</discoverClasses>
+                            <classes>
+                                <class>org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancerFactory</class>
+                            </classes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
diff --git a/components/camel-ribbon/src/generated/java/org/apache/camel/component/ribbon/cloud/RibbonServiceLoadBalancerFactoryConfigurer.java b/components/camel-ribbon/src/generated/java/org/apache/camel/component/ribbon/cloud/RibbonServiceLoadBalancerFactoryConfigurer.java
new file mode 100644
index 0000000..16a62d0
--- /dev/null
+++ b/components/camel-ribbon/src/generated/java/org/apache/camel/component/ribbon/cloud/RibbonServiceLoadBalancerFactoryConfigurer.java
@@ -0,0 +1,82 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.ribbon.cloud;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancerFactory;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class RibbonServiceLoadBalancerFactoryConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancerFactory target = (org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancerFactory) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "clientname":
+        case "ClientName": target.setClientName(property(camelContext, java.lang.String.class, value)); return true;
+        case "namespace":
+        case "Namespace": target.setNamespace(property(camelContext, java.lang.String.class, value)); return true;
+        case "password":
+        case "Password": target.setPassword(property(camelContext, java.lang.String.class, value)); return true;
+        case "properties":
+        case "Properties": target.setProperties(property(camelContext, java.util.Map.class, value)); return true;
+        case "username":
+        case "Username": target.setUsername(property(camelContext, java.lang.String.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "clientname":
+        case "ClientName": return java.lang.String.class;
+        case "namespace":
+        case "Namespace": return java.lang.String.class;
+        case "password":
+        case "Password": return java.lang.String.class;
+        case "properties":
+        case "Properties": return java.util.Map.class;
+        case "username":
+        case "Username": return java.lang.String.class;
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancerFactory target = (org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancerFactory) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "clientname":
+        case "ClientName": return target.getClientName();
+        case "namespace":
+        case "Namespace": return target.getNamespace();
+        case "password":
+        case "Password": return target.getPassword();
+        case "properties":
+        case "Properties": return target.getProperties();
+        case "username":
+        case "Username": return target.getUsername();
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getCollectionValueType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "properties":
+        case "Properties": return java.lang.String.class;
+        default: return null;
+        }
+    }
+}
+
diff --git a/components/camel-ribbon/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancerFactory b/components/camel-ribbon/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancerFactory
new file mode 100644
index 0000000..6e8b2d7
--- /dev/null
+++ b/components/camel-ribbon/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancerFactory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancerFactoryConfigurer
diff --git a/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/cloud/RibbonServiceLoadBalancerFactory.java b/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/cloud/RibbonServiceLoadBalancerFactory.java
index f81924c..e791754 100644
--- a/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/cloud/RibbonServiceLoadBalancerFactory.java
+++ b/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/cloud/RibbonServiceLoadBalancerFactory.java
@@ -22,9 +22,11 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.cloud.ServiceLoadBalancer;
 import org.apache.camel.cloud.ServiceLoadBalancerFactory;
 import org.apache.camel.component.ribbon.RibbonConfiguration;
+import org.apache.camel.spi.Configurer;
 import org.apache.camel.spi.annotations.CloudServiceFactory;
 
 @CloudServiceFactory("ribbon-service-load-balancer")
+@Configurer
 public class RibbonServiceLoadBalancerFactory implements ServiceLoadBalancerFactory {
     private final RibbonConfiguration configuration;
 
diff --git a/components/camel-zookeeper/pom.xml b/components/camel-zookeeper/pom.xml
index 8c157d8..d76be5a 100644
--- a/components/camel-zookeeper/pom.xml
+++ b/components/camel-zookeeper/pom.xml
@@ -201,6 +201,25 @@
     <build>
         <plugins>
             <plugin>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-configurer</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>generate-configurer</goal>
+                        </goals>
+                        <configuration>
+                            <discoverClasses>false</discoverClasses>
+                            <classes>
+                                <class>org.apache.camel.component.zookeeper.cloud.ZooKeeperServiceDiscoveryFactory</class>
+                            </classes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <configuration>
                     <skipTests>${skipTests}</skipTests>
diff --git a/components/camel-zookeeper/src/generated/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceDiscoveryFactoryConfigurer.java b/components/camel-zookeeper/src/generated/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceDiscoveryFactoryConfigurer.java
new file mode 100644
index 0000000..6202e1d
--- /dev/null
+++ b/components/camel-zookeeper/src/generated/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceDiscoveryFactoryConfigurer.java
@@ -0,0 +1,162 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.zookeeper.cloud;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.component.zookeeper.cloud.ZooKeeperServiceDiscoveryFactory;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class ZooKeeperServiceDiscoveryFactoryConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        org.apache.camel.component.zookeeper.cloud.ZooKeeperServiceDiscoveryFactory target = (org.apache.camel.component.zookeeper.cloud.ZooKeeperServiceDiscoveryFactory) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "authinfolist":
+        case "AuthInfoList": target.setAuthInfoList(property(camelContext, java.util.List.class, value)); return true;
+        case "basepath":
+        case "BasePath": target.setBasePath(property(camelContext, java.lang.String.class, value)); return true;
+        case "configuration":
+        case "Configuration": target.setConfiguration(property(camelContext, org.apache.camel.component.zookeeper.ZooKeeperCuratorConfiguration.class, value)); return true;
+        case "connectiontimeout":
+        case "ConnectionTimeout": target.setConnectionTimeout(property(camelContext, long.class, value)); return true;
+        case "connectiontimeoutunit":
+        case "ConnectionTimeoutUnit": target.setConnectionTimeoutUnit(property(camelContext, java.util.concurrent.TimeUnit.class, value)); return true;
+        case "curatorframework":
+        case "CuratorFramework": target.setCuratorFramework(property(camelContext, org.apache.curator.framework.CuratorFramework.class, value)); return true;
+        case "maxclosewait":
+        case "MaxCloseWait": target.setMaxCloseWait(property(camelContext, long.class, value)); return true;
+        case "maxclosewaitunit":
+        case "MaxCloseWaitUnit": target.setMaxCloseWaitUnit(property(camelContext, java.util.concurrent.TimeUnit.class, value)); return true;
+        case "namespace":
+        case "Namespace": target.setNamespace(property(camelContext, java.lang.String.class, value)); return true;
+        case "nodes":
+        case "Nodes": target.setNodes(property(camelContext, java.util.List.class, value)); return true;
+        case "reconnectbasesleeptime":
+        case "ReconnectBaseSleepTime": target.setReconnectBaseSleepTime(property(camelContext, long.class, value)); return true;
+        case "reconnectbasesleeptimeunit":
+        case "ReconnectBaseSleepTimeUnit": target.setReconnectBaseSleepTimeUnit(property(camelContext, java.util.concurrent.TimeUnit.class, value)); return true;
+        case "reconnectmaxretries":
+        case "ReconnectMaxRetries": target.setReconnectMaxRetries(property(camelContext, int.class, value)); return true;
+        case "reconnectmaxsleeptime":
+        case "ReconnectMaxSleepTime": target.setReconnectMaxSleepTime(property(camelContext, long.class, value)); return true;
+        case "reconnectmaxsleeptimeunit":
+        case "ReconnectMaxSleepTimeUnit": target.setReconnectMaxSleepTimeUnit(property(camelContext, java.util.concurrent.TimeUnit.class, value)); return true;
+        case "retrypolicy":
+        case "RetryPolicy": target.setRetryPolicy(property(camelContext, org.apache.curator.RetryPolicy.class, value)); return true;
+        case "sessiontimeout":
+        case "SessionTimeout": target.setSessionTimeout(property(camelContext, long.class, value)); return true;
+        case "sessiontimeoutunit":
+        case "SessionTimeoutUnit": target.setSessionTimeoutUnit(property(camelContext, java.util.concurrent.TimeUnit.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "authinfolist":
+        case "AuthInfoList": return java.util.List.class;
+        case "basepath":
+        case "BasePath": return java.lang.String.class;
+        case "configuration":
+        case "Configuration": return org.apache.camel.component.zookeeper.ZooKeeperCuratorConfiguration.class;
+        case "connectiontimeout":
+        case "ConnectionTimeout": return long.class;
+        case "connectiontimeoutunit":
+        case "ConnectionTimeoutUnit": return java.util.concurrent.TimeUnit.class;
+        case "curatorframework":
+        case "CuratorFramework": return org.apache.curator.framework.CuratorFramework.class;
+        case "maxclosewait":
+        case "MaxCloseWait": return long.class;
+        case "maxclosewaitunit":
+        case "MaxCloseWaitUnit": return java.util.concurrent.TimeUnit.class;
+        case "namespace":
+        case "Namespace": return java.lang.String.class;
+        case "nodes":
+        case "Nodes": return java.util.List.class;
+        case "reconnectbasesleeptime":
+        case "ReconnectBaseSleepTime": return long.class;
+        case "reconnectbasesleeptimeunit":
+        case "ReconnectBaseSleepTimeUnit": return java.util.concurrent.TimeUnit.class;
+        case "reconnectmaxretries":
+        case "ReconnectMaxRetries": return int.class;
+        case "reconnectmaxsleeptime":
+        case "ReconnectMaxSleepTime": return long.class;
+        case "reconnectmaxsleeptimeunit":
+        case "ReconnectMaxSleepTimeUnit": return java.util.concurrent.TimeUnit.class;
+        case "retrypolicy":
+        case "RetryPolicy": return org.apache.curator.RetryPolicy.class;
+        case "sessiontimeout":
+        case "SessionTimeout": return long.class;
+        case "sessiontimeoutunit":
+        case "SessionTimeoutUnit": return java.util.concurrent.TimeUnit.class;
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        org.apache.camel.component.zookeeper.cloud.ZooKeeperServiceDiscoveryFactory target = (org.apache.camel.component.zookeeper.cloud.ZooKeeperServiceDiscoveryFactory) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "authinfolist":
+        case "AuthInfoList": return target.getAuthInfoList();
+        case "basepath":
+        case "BasePath": return target.getBasePath();
+        case "configuration":
+        case "Configuration": return target.getConfiguration();
+        case "connectiontimeout":
+        case "ConnectionTimeout": return target.getConnectionTimeout();
+        case "connectiontimeoutunit":
+        case "ConnectionTimeoutUnit": return target.getConnectionTimeoutUnit();
+        case "curatorframework":
+        case "CuratorFramework": return target.getCuratorFramework();
+        case "maxclosewait":
+        case "MaxCloseWait": return target.getMaxCloseWait();
+        case "maxclosewaitunit":
+        case "MaxCloseWaitUnit": return target.getMaxCloseWaitUnit();
+        case "namespace":
+        case "Namespace": return target.getNamespace();
+        case "nodes":
+        case "Nodes": return target.getNodes();
+        case "reconnectbasesleeptime":
+        case "ReconnectBaseSleepTime": return target.getReconnectBaseSleepTime();
+        case "reconnectbasesleeptimeunit":
+        case "ReconnectBaseSleepTimeUnit": return target.getReconnectBaseSleepTimeUnit();
+        case "reconnectmaxretries":
+        case "ReconnectMaxRetries": return target.getReconnectMaxRetries();
+        case "reconnectmaxsleeptime":
+        case "ReconnectMaxSleepTime": return target.getReconnectMaxSleepTime();
+        case "reconnectmaxsleeptimeunit":
+        case "ReconnectMaxSleepTimeUnit": return target.getReconnectMaxSleepTimeUnit();
+        case "retrypolicy":
+        case "RetryPolicy": return target.getRetryPolicy();
+        case "sessiontimeout":
+        case "SessionTimeout": return target.getSessionTimeout();
+        case "sessiontimeoutunit":
+        case "SessionTimeoutUnit": return target.getSessionTimeoutUnit();
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getCollectionValueType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "authinfolist":
+        case "AuthInfoList": return org.apache.curator.framework.AuthInfo.class;
+        case "nodes":
+        case "Nodes": return java.lang.String.class;
+        default: return null;
+        }
+    }
+}
+
diff --git a/components/camel-zookeeper/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.zookeeper.cloud.ZooKeeperServiceDiscoveryFactory b/components/camel-zookeeper/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.zookeeper.cloud.ZooKeeperServiceDiscoveryFactory
new file mode 100644
index 0000000..e1c234b
--- /dev/null
+++ b/components/camel-zookeeper/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.zookeeper.cloud.ZooKeeperServiceDiscoveryFactory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.zookeeper.cloud.ZooKeeperServiceDiscoveryFactoryConfigurer
diff --git a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceDiscoveryFactory.java b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceDiscoveryFactory.java
index 7891279..7060b52 100644
--- a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceDiscoveryFactory.java
+++ b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceDiscoveryFactory.java
@@ -23,12 +23,14 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.cloud.ServiceDiscovery;
 import org.apache.camel.cloud.ServiceDiscoveryFactory;
 import org.apache.camel.component.zookeeper.ZooKeeperCuratorConfiguration;
+import org.apache.camel.spi.Configurer;
 import org.apache.camel.spi.annotations.CloudServiceFactory;
 import org.apache.curator.RetryPolicy;
 import org.apache.curator.framework.AuthInfo;
 import org.apache.curator.framework.CuratorFramework;
 
 @CloudServiceFactory("zookeeper-service-discovery")
+@Configurer
 public class ZooKeeperServiceDiscoveryFactory implements ServiceDiscoveryFactory {
 
     private ZooKeeperCuratorConfiguration configuration;

[camel] 02/02: CAMEL-16828: camel-cloud - should not use reflection when configuring model to factory. For this we need to use generated configurer classes.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 5003dbb1180f0545f79ea0b93d6605d5ee334f51
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Jul 29 17:21:36 2021 +0200

    CAMEL-16828: camel-cloud - should not use reflection when configuring model to factory. For this we need to use generated configurer classes.
---
 components/camel-http/pom.xml                      | 25 ++++++++++++++++
 .../HttpServiceExpressionFactoryConfigurer.java    | 35 ++++++++++++++++++++++
 ...mponent.http.cloud.HttpServiceExpressionFactory |  2 ++
 .../http/cloud/HttpServiceExpressionFactory.java   |  2 ++
 components/camel-netty-http/pom.xml                |  1 +
 ...ettyHttpServiceExpressionFactoryConfigurer.java | 35 ++++++++++++++++++++++
 ...ty.http.cloud.NettyHttpServiceExpressionFactory |  2 ++
 .../cloud/NettyHttpServiceExpressionFactory.java   |  2 ++
 components/camel-undertow/pom.xml                  | 25 ++++++++++++++++
 ...UndertowServiceExpressionFactoryConfigurer.java | 35 ++++++++++++++++++++++
 ...undertow.cloud.UndertowServiceExpressionFactory |  2 ++
 .../cloud/UndertowServiceExpressionFactory.java    |  2 ++
 12 files changed, 168 insertions(+)

diff --git a/components/camel-http/pom.xml b/components/camel-http/pom.xml
index 396944c..b616401 100644
--- a/components/camel-http/pom.xml
+++ b/components/camel-http/pom.xml
@@ -114,4 +114,29 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-configurer</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>generate-configurer</goal>
+                        </goals>
+                        <configuration>
+                            <discoverClasses>false</discoverClasses>
+                            <classes>
+                                <class>org.apache.camel.component.http.cloud.HttpServiceExpressionFactory</class>
+                            </classes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
diff --git a/components/camel-http/src/generated/java/org/apache/camel/component/http/cloud/HttpServiceExpressionFactoryConfigurer.java b/components/camel-http/src/generated/java/org/apache/camel/component/http/cloud/HttpServiceExpressionFactoryConfigurer.java
new file mode 100644
index 0000000..b346902
--- /dev/null
+++ b/components/camel-http/src/generated/java/org/apache/camel/component/http/cloud/HttpServiceExpressionFactoryConfigurer.java
@@ -0,0 +1,35 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.http.cloud;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.component.http.cloud.HttpServiceExpressionFactory;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class HttpServiceExpressionFactoryConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        return false;
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        return null;
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        return null;
+    }
+}
+
diff --git a/components/camel-http/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.http.cloud.HttpServiceExpressionFactory b/components/camel-http/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.http.cloud.HttpServiceExpressionFactory
new file mode 100644
index 0000000..97fb9e4
--- /dev/null
+++ b/components/camel-http/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.http.cloud.HttpServiceExpressionFactory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.http.cloud.HttpServiceExpressionFactoryConfigurer
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/cloud/HttpServiceExpressionFactory.java b/components/camel-http/src/main/java/org/apache/camel/component/http/cloud/HttpServiceExpressionFactory.java
index adfadea..25f21d2 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/cloud/HttpServiceExpressionFactory.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/cloud/HttpServiceExpressionFactory.java
@@ -19,9 +19,11 @@ package org.apache.camel.component.http.cloud;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.cloud.ServiceExpressionFactory;
+import org.apache.camel.spi.Configurer;
 import org.apache.camel.spi.annotations.CloudServiceFactory;
 
 @CloudServiceFactory("http-service-expression,https-service-expression")
+@Configurer
 public class HttpServiceExpressionFactory implements ServiceExpressionFactory {
     @Override
     public Expression newInstance(CamelContext camelContext) throws Exception {
diff --git a/components/camel-netty-http/pom.xml b/components/camel-netty-http/pom.xml
index 371fa23..1d70c0f 100644
--- a/components/camel-netty-http/pom.xml
+++ b/components/camel-netty-http/pom.xml
@@ -181,6 +181,7 @@
                         <configuration>
                             <discoverClasses>true</discoverClasses>
                             <classes>org.apache.camel.component.netty.http.NettyHttpConfiguration</classes>
+                            <classes>org.apache.camel.component.netty.http.cloud.NettyHttpServiceExpressionFactory</classes>
                         </configuration>
                     </execution>
                 </executions>
diff --git a/components/camel-netty-http/src/generated/java/org/apache/camel/component/netty/http/cloud/NettyHttpServiceExpressionFactoryConfigurer.java b/components/camel-netty-http/src/generated/java/org/apache/camel/component/netty/http/cloud/NettyHttpServiceExpressionFactoryConfigurer.java
new file mode 100644
index 0000000..75b21b2
--- /dev/null
+++ b/components/camel-netty-http/src/generated/java/org/apache/camel/component/netty/http/cloud/NettyHttpServiceExpressionFactoryConfigurer.java
@@ -0,0 +1,35 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.netty.http.cloud;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.component.netty.http.cloud.NettyHttpServiceExpressionFactory;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class NettyHttpServiceExpressionFactoryConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        return false;
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        return null;
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        return null;
+    }
+}
+
diff --git a/components/camel-netty-http/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.netty.http.cloud.NettyHttpServiceExpressionFactory b/components/camel-netty-http/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.netty.http.cloud.NettyHttpServiceExpressionFactory
new file mode 100644
index 0000000..8750407
--- /dev/null
+++ b/components/camel-netty-http/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.netty.http.cloud.NettyHttpServiceExpressionFactory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.netty.http.cloud.NettyHttpServiceExpressionFactoryConfigurer
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/cloud/NettyHttpServiceExpressionFactory.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/cloud/NettyHttpServiceExpressionFactory.java
index d3fe377..b0a1082 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/cloud/NettyHttpServiceExpressionFactory.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/cloud/NettyHttpServiceExpressionFactory.java
@@ -19,9 +19,11 @@ package org.apache.camel.component.netty.http.cloud;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.cloud.ServiceExpressionFactory;
+import org.apache.camel.spi.Configurer;
 import org.apache.camel.spi.annotations.CloudServiceFactory;
 
 @CloudServiceFactory("netty-http-service-expression")
+@Configurer
 public class NettyHttpServiceExpressionFactory implements ServiceExpressionFactory {
     @Override
     public Expression newInstance(CamelContext camelContext) throws Exception {
diff --git a/components/camel-undertow/pom.xml b/components/camel-undertow/pom.xml
index f7b1050..60a285f 100644
--- a/components/camel-undertow/pom.xml
+++ b/components/camel-undertow/pom.xml
@@ -166,4 +166,29 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-configurer</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>generate-configurer</goal>
+                        </goals>
+                        <configuration>
+                            <discoverClasses>false</discoverClasses>
+                            <classes>
+                                <class>org.apache.camel.component.undertow.cloud.UndertowServiceExpressionFactory</class>
+                            </classes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
diff --git a/components/camel-undertow/src/generated/java/org/apache/camel/component/undertow/cloud/UndertowServiceExpressionFactoryConfigurer.java b/components/camel-undertow/src/generated/java/org/apache/camel/component/undertow/cloud/UndertowServiceExpressionFactoryConfigurer.java
new file mode 100644
index 0000000..ecc8543
--- /dev/null
+++ b/components/camel-undertow/src/generated/java/org/apache/camel/component/undertow/cloud/UndertowServiceExpressionFactoryConfigurer.java
@@ -0,0 +1,35 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.undertow.cloud;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.component.undertow.cloud.UndertowServiceExpressionFactory;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class UndertowServiceExpressionFactoryConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        return false;
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        return null;
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        return null;
+    }
+}
+
diff --git a/components/camel-undertow/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.undertow.cloud.UndertowServiceExpressionFactory b/components/camel-undertow/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.undertow.cloud.UndertowServiceExpressionFactory
new file mode 100644
index 0000000..a2ca5f0
--- /dev/null
+++ b/components/camel-undertow/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.undertow.cloud.UndertowServiceExpressionFactory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.undertow.cloud.UndertowServiceExpressionFactoryConfigurer
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/cloud/UndertowServiceExpressionFactory.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/cloud/UndertowServiceExpressionFactory.java
index 1c03e83..013cb91 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/cloud/UndertowServiceExpressionFactory.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/cloud/UndertowServiceExpressionFactory.java
@@ -19,9 +19,11 @@ package org.apache.camel.component.undertow.cloud;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.cloud.ServiceExpressionFactory;
+import org.apache.camel.spi.Configurer;
 import org.apache.camel.spi.annotations.CloudServiceFactory;
 
 @CloudServiceFactory("undertow-service-expression")
+@Configurer
 public class UndertowServiceExpressionFactory implements ServiceExpressionFactory {
     @Override
     public Expression newInstance(CamelContext camelContext) throws Exception {