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:43 UTC

[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.

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;