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 2020/08/17 19:07:45 UTC

[camel] branch master updated (c4119b4 -> 8de2143)

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

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


    from c4119b4  Regen
     new daa2736  CAMEL-15394: PropertyBindingSupport should use configurer to set array/list/map on root objects without reflection. WIP
     new c5a95fe  CAMEL-15160: Configurer - Generate details what type Map/List contains
     new 8bc6612  CAMEL-15160: Configurer - Generate details what type Map/List contains
     new 8de2143  Regen

The 4 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:
 .../org/apache/camel/catalog/others.properties     |   2 +
 .../org/apache/camel/catalog/others}/aws-xray.json |   0
 .../org/apache/camel/catalog/others}/hystrix.json  |   0
 ...ionsManagerEndpointConfigurationConfigurer.java |   9 +
 ...entsManagerEndpointConfigurationConfigurer.java |   9 +
 .../component/box/BoxConfigurationConfigurer.java  |   9 +
 ...LogsManagerEndpointConfigurationConfigurer.java |   9 +
 ...entsManagerEndpointConfigurationConfigurer.java |   9 +
 ...ilesManagerEndpointConfigurationConfigurer.java |   9 +
 ...dersManagerEndpointConfigurationConfigurer.java |   9 +
 ...oupsManagerEndpointConfigurationConfigurer.java |   9 +
 ...archManagerEndpointConfigurationConfigurer.java |   9 +
 ...asksManagerEndpointConfigurationConfigurer.java |   9 +
 ...sersManagerEndpointConfigurationConfigurer.java |   9 +
 ...apabilitiesEndpointConfigurationConfigurer.java |  11 +
 .../FhirCreateEndpointConfigurationConfigurer.java |   9 +
 .../FhirDeleteEndpointConfigurationConfigurer.java |   9 +
 ...FhirHistoryEndpointConfigurationConfigurer.java |  15 +
 ...hirLoadPageEndpointConfigurationConfigurer.java |  11 +
 .../FhirMetaEndpointConfigurationConfigurer.java   |  11 +
 ...irOperationEndpointConfigurationConfigurer.java |  17 ++
 .../FhirPatchEndpointConfigurationConfigurer.java  |   9 +
 .../FhirReadEndpointConfigurationConfigurer.java   |  11 +
 .../FhirSearchEndpointConfigurationConfigurer.java |   9 +
 ...TransactionEndpointConfigurationConfigurer.java |  11 +
 .../FhirUpdateEndpointConfigurationConfigurer.java |   9 +
 ...hirValidateEndpointConfigurationConfigurer.java |   9 +
 .../DriveAboutEndpointConfigurationConfigurer.java |   9 +
 .../DriveAppsEndpointConfigurationConfigurer.java  |   9 +
 ...riveChangesEndpointConfigurationConfigurer.java |   9 +
 ...iveChannelsEndpointConfigurationConfigurer.java |   9 +
 ...iveChildrenEndpointConfigurationConfigurer.java |   9 +
 ...iveCommentsEndpointConfigurationConfigurer.java |   9 +
 .../DriveFilesEndpointConfigurationConfigurer.java |   9 +
 ...riveParentsEndpointConfigurationConfigurer.java |   9 +
 ...PermissionsEndpointConfigurationConfigurer.java |   9 +
 ...ePropertiesEndpointConfigurationConfigurer.java |   9 +
 ...iveRealtimeEndpointConfigurationConfigurer.java |   9 +
 ...riveRepliesEndpointConfigurationConfigurer.java |   9 +
 ...veRevisionsEndpointConfigurationConfigurer.java |   9 +
 .../drive/GoogleDriveConfigurationConfigurer.java  |   9 +
 .../Olingo2AppEndpointConfigurationConfigurer.java |  13 +
 .../olingo2/Olingo2ConfigurationConfigurer.java    |   9 +
 .../Olingo4AppEndpointConfigurationConfigurer.java |  13 +
 .../olingo4/Olingo4ConfigurationConfigurer.java    |   9 +
 .../MessageEndpointConfigurationConfigurer.java    |   9 +
 .../ZendeskEndpointConfigurationConfigurer.java    |  17 ++
 .../apache/camel/spi/PropertyConfigurerGetter.java |  14 +
 .../camel/impl/ExtendedCamelContextConfigurer.java |   9 +
 .../camel/impl/RestConfigurationConfigurer.java    |  19 ++
 core/camel-main/pom.xml                            |  19 ++
 .../HealthConfigurationPropertiesConfigurer.java   |   9 +
 .../MainConfigurationPropertiesConfigurer.java     |  11 +
 .../RestConfigurationPropertiesConfigurer.java     |  19 ++
 ...hreadPoolConfigurationPropertiesConfigurer.java |   9 +
 .../java/org/apache/camel/main/MySecondBar.java    |  34 +++
 .../apache/camel/main/MySecondBarConfigurer.java   |  54 ++++
 .../java/org/apache/camel/main/MySecondFoo.java    |  35 +++
 .../apache/camel/main/MySecondFooConfigurer.java   |  54 ++++
 .../main/PropertyBindingSupportRootArrayTest.java  |  64 ++++
 ...yBindingSupportRootArrayWithConfigurerTest.java |  66 ++++
 .../org/apache/camel/configurer/MySecondBar        |   2 +
 .../org/apache/camel/configurer/MySecondFoo        |   2 +
 .../camel/tooling/model/BaseOptionModel.java       |   9 +
 ...jo.java => AbstractGenerateConfigurerMojo.java} | 107 ++++---
 .../maven/packaging/GenerateConfigurerMojo.java    | 335 +--------------------
 .../packaging/GenerateTestConfigurerMojo.java      |  77 +++++
 .../packaging/PropertyConfigurerGenerator.java     |  28 ++
 68 files changed, 1036 insertions(+), 378 deletions(-)
 copy {components/camel-aws-xray/src/generated/resources => catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others}/aws-xray.json (100%)
 copy {components/camel-hystrix/src/generated/resources => catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others}/hystrix.json (100%)
 create mode 100644 core/camel-main/src/test/java/org/apache/camel/main/MySecondBar.java
 create mode 100644 core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java
 create mode 100644 core/camel-main/src/test/java/org/apache/camel/main/MySecondFoo.java
 create mode 100644 core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java
 create mode 100644 core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayTest.java
 create mode 100644 core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayWithConfigurerTest.java
 create mode 100644 core/camel-main/src/test/resources/META-INF/services/org/apache/camel/configurer/MySecondBar
 create mode 100644 core/camel-main/src/test/resources/META-INF/services/org/apache/camel/configurer/MySecondFoo
 copy tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/{GenerateConfigurerMojo.java => AbstractGenerateConfigurerMojo.java} (81%)
 create mode 100644 tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateTestConfigurerMojo.java


[camel] 04/04: Regen

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

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

commit 8de21431e91a8fd1351c0d9a6ec65df6119e0f51
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Aug 17 21:07:00 2020 +0200

    Regen
---
 .../resources/org/apache/camel/catalog/others.properties  |  2 ++
 .../org/apache/camel/catalog/others/aws-xray.json         | 15 +++++++++++++++
 .../org/apache/camel/catalog/others/hystrix.json          | 15 +++++++++++++++
 3 files changed, 32 insertions(+)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties
index d0d2cbb..f4a9fc2 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties
@@ -1,7 +1,9 @@
 attachments
+aws-xray
 cdi
 cxf-transport
 headersmap
+hystrix
 jasypt
 jta
 leveldb
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/aws-xray.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/aws-xray.json
new file mode 100644
index 0000000..ccfac2e
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/aws-xray.json
@@ -0,0 +1,15 @@
+{
+  "other": {
+    "kind": "other",
+    "name": "aws-xray",
+    "title": "AWS XRay",
+    "description": "Distributed tracing using AWS XRay",
+    "deprecated": false,
+    "firstVersion": "2.21.0",
+    "label": "monitoring,microservice",
+    "supportLevel": "Stable",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-aws-xray",
+    "version": "3.5.0-SNAPSHOT"
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/hystrix.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/hystrix.json
new file mode 100644
index 0000000..ecdb3b8
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/hystrix.json
@@ -0,0 +1,15 @@
+{
+  "other": {
+    "kind": "other",
+    "name": "hystrix",
+    "title": "Hystrix",
+    "description": "Circuit Breaker EIP using Netflix Hystrix",
+    "deprecated": true,
+    "firstVersion": "2.18.0",
+    "label": "eip,microservice",
+    "supportLevel": "Stable",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-hystrix",
+    "version": "3.5.0-SNAPSHOT"
+  }
+}


[camel] 01/04: CAMEL-15394: PropertyBindingSupport should use configurer to set array/list/map on root objects without reflection. WIP

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

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

commit daa273617c278361d95451bc78b24c746dca7b69
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Aug 17 13:01:58 2020 +0200

    CAMEL-15394: PropertyBindingSupport should use configurer to set array/list/map on root objects without reflection. WIP
---
 core/camel-main/pom.xml                            |  19 ++
 .../java/org/apache/camel/main/MySecondBar.java    |  34 +++
 .../apache/camel/main/MySecondBarConfigurer.java   |  45 +++
 .../java/org/apache/camel/main/MySecondFoo.java    |  35 +++
 .../apache/camel/main/MySecondFooConfigurer.java   |  45 +++
 .../main/PropertyBindingSupportRootArrayTest.java  |  64 ++++
 ...yBindingSupportRootArrayWithConfigurerTest.java |  65 ++++
 .../org/apache/camel/configurer/MySecondBar        |   2 +
 .../org/apache/camel/configurer/MySecondFoo        |   2 +
 ...jo.java => AbstractGenerateConfigurerMojo.java} |  65 ++--
 .../maven/packaging/GenerateConfigurerMojo.java    | 335 +--------------------
 .../packaging/GenerateTestConfigurerMojo.java      |  77 +++++
 12 files changed, 417 insertions(+), 371 deletions(-)

diff --git a/core/camel-main/pom.xml b/core/camel-main/pom.xml
index c8b8802..7edbe4f 100644
--- a/core/camel-main/pom.xml
+++ b/core/camel-main/pom.xml
@@ -140,6 +140,25 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <!-- we need to generate additional configurer classes -->
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-test-configurer</id>
+                        <phase>process-test-classes</phase>
+                        <goals>
+                            <goal>generate-test-configurer</goal>
+                        </goals>
+                        <!-- only do these test classes -->
+                        <configuration>
+                            <discoverClasses>false</discoverClasses>
+                            <classes>org.apache.camel.main.MySecondFoo,org.apache.camel.main.MySecondBar</classes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/MySecondBar.java b/core/camel-main/src/test/java/org/apache/camel/main/MySecondBar.java
new file mode 100644
index 0000000..5110b07
--- /dev/null
+++ b/core/camel-main/src/test/java/org/apache/camel/main/MySecondBar.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.main;
+
+import java.util.List;
+
+import org.apache.camel.spi.Configurer;
+
+@Configurer
+public class MySecondBar {
+    private List<String> names;
+
+    public List<String> getNames() {
+        return names;
+    }
+
+    public void setNames(List<String> names) {
+        this.names = names;
+    }
+}
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java b/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java
new file mode 100644
index 0000000..d31f486
--- /dev/null
+++ b/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java
@@ -0,0 +1,45 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.main;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.main.MySecondBar;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class MySecondBarConfigurer 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.main.MySecondBar target = (org.apache.camel.main.MySecondBar) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "names":
+        case "Names": target.setNames(property(camelContext, java.util.List.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Map<String, Object> getAllOptions(Object target) {
+        Map<String, Object> answer = new CaseInsensitiveMap();
+        answer.put("Names", java.util.List.class);
+        return answer;
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        org.apache.camel.main.MySecondBar target = (org.apache.camel.main.MySecondBar) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "names":
+        case "Names": return target.getNames();
+        default: return null;
+        }
+    }
+}
+
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/MySecondFoo.java b/core/camel-main/src/test/java/org/apache/camel/main/MySecondFoo.java
new file mode 100644
index 0000000..f3442a7
--- /dev/null
+++ b/core/camel-main/src/test/java/org/apache/camel/main/MySecondFoo.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.main;
+
+import java.util.List;
+
+import org.apache.camel.spi.Configurer;
+
+@Configurer
+public class MySecondFoo {
+
+    private List<MySecondBar> bars;
+
+    public List<MySecondBar> getBars() {
+        return bars;
+    }
+
+    public void setBars(List<MySecondBar> bars) {
+        this.bars = bars;
+    }
+}
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java b/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java
new file mode 100644
index 0000000..5044c1f
--- /dev/null
+++ b/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java
@@ -0,0 +1,45 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.main;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.main.MySecondFoo;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class MySecondFooConfigurer 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.main.MySecondFoo target = (org.apache.camel.main.MySecondFoo) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "bars":
+        case "Bars": target.setBars(property(camelContext, java.util.List.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Map<String, Object> getAllOptions(Object target) {
+        Map<String, Object> answer = new CaseInsensitiveMap();
+        answer.put("Bars", java.util.List.class);
+        return answer;
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        org.apache.camel.main.MySecondFoo target = (org.apache.camel.main.MySecondFoo) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "bars":
+        case "Bars": return target.getBars();
+        default: return null;
+        }
+    }
+}
+
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayTest.java b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayTest.java
new file mode 100644
index 0000000..a26cb63
--- /dev/null
+++ b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayTest.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.main;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PropertyBindingSupport;
+import org.junit.jupiter.api.Test;
+
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * Unit test for PropertyBindingSupport
+ */
+public class PropertyBindingSupportRootArrayTest {
+
+    @Test
+    public void testRootArray() throws Exception {
+        CamelContext context = new DefaultCamelContext();
+
+        BeanIntrospection bi = context.adapt(ExtendedCamelContext.class).getBeanIntrospection();
+        bi.setExtendedStatistics(true);
+
+        context.start();
+
+        MySecondFoo target = new MySecondFoo();
+
+        PropertyBindingSupport.build()
+                .withCamelContext(context)
+                .withTarget(target)
+                .withProperty("bars[0]", "#class:" + MySecondBar.class.getName())
+                .withProperty("bars[0].names[0]", "a")
+                .withProperty("bars[0].names[1]", "b")
+                .withRemoveParameters(false).bind();
+
+        assertEquals(1, target.getBars().size());
+        assertEquals(2, target.getBars().get(0).getNames().size());
+        assertEquals("a", target.getBars().get(0).getNames().get(0));
+        assertEquals("b", target.getBars().get(0).getNames().get(1));
+
+        // no configurer so reflection is in use
+        assertEquals(3, bi.getInvokedCounter());
+
+        context.stop();
+    }
+
+}
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayWithConfigurerTest.java b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayWithConfigurerTest.java
new file mode 100644
index 0000000..2748e1a
--- /dev/null
+++ b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayWithConfigurerTest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.main;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PropertyBindingSupport;
+import org.junit.jupiter.api.Test;
+
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * Unit test for PropertyBindingSupport
+ */
+public class PropertyBindingSupportRootArrayWithConfigurerTest {
+
+    @Test
+    public void testRootArray() throws Exception {
+        CamelContext context = new DefaultCamelContext();
+
+        BeanIntrospection bi = context.adapt(ExtendedCamelContext.class).getBeanIntrospection();
+        bi.setExtendedStatistics(true);
+
+        context.start();
+
+        MySecondFoo target = new MySecondFoo();
+
+        PropertyBindingSupport.build()
+                .withCamelContext(context)
+                .withTarget(target)
+                .withProperty("bars[0]", "#class:" + MySecondBar.class.getName())
+                .withProperty("bars[0].names[0]", "a")
+                .withProperty("bars[0].names[1]", "b")
+                .withConfigurer(new MySecondFooConfigurer())
+                .withRemoveParameters(false).bind();
+
+        assertEquals(1, target.getBars().size());
+        assertEquals(2, target.getBars().get(0).getNames().size());
+        assertEquals("a", target.getBars().get(0).getNames().get(0));
+        assertEquals("b", target.getBars().get(0).getNames().get(1));
+
+        // TODO: CAMEL-15394
+        // assertEquals(0, bi.getInvokedCounter());
+
+        context.stop();
+    }
+
+}
diff --git a/core/camel-main/src/test/resources/META-INF/services/org/apache/camel/configurer/MySecondBar b/core/camel-main/src/test/resources/META-INF/services/org/apache/camel/configurer/MySecondBar
new file mode 100644
index 0000000..e223b95
--- /dev/null
+++ b/core/camel-main/src/test/resources/META-INF/services/org/apache/camel/configurer/MySecondBar
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.main.MySecondBarConfigurer
diff --git a/core/camel-main/src/test/resources/META-INF/services/org/apache/camel/configurer/MySecondFoo b/core/camel-main/src/test/resources/META-INF/services/org/apache/camel/configurer/MySecondFoo
new file mode 100644
index 0000000..8b49b25
--- /dev/null
+++ b/core/camel-main/src/test/resources/META-INF/services/org/apache/camel/configurer/MySecondFoo
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.main.MySecondFooConfigurer
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateConfigurerMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
similarity index 87%
copy from tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateConfigurerMojo.java
copy to tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
index 1abb926..12fc5a5 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateConfigurerMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
@@ -50,10 +50,7 @@ import org.apache.maven.model.Exclusion;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
-import org.apache.maven.plugins.annotations.LifecyclePhase;
-import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.plugins.annotations.ResolutionScope;
 import org.jboss.jandex.AnnotationInstance;
 import org.jboss.jandex.AnnotationTarget;
 import org.jboss.jandex.AnnotationValue;
@@ -62,44 +59,24 @@ import org.jboss.jandex.DotName;
 import org.jboss.jandex.Index;
 import org.jboss.jandex.IndexReader;
 
+
 import static org.apache.camel.tooling.util.ReflectionHelper.doWithMethods;
 import static org.apache.camel.tooling.util.Strings.between;
 
 /**
- * Generate configurer classes from @Configuer annotated classes.
+ * Abstract class for configurer generator.
  */
-@Mojo(name = "generate-configurer", threadSafe = true, defaultPhase = LifecyclePhase.PROCESS_CLASSES,
-        requiresDependencyCollection = ResolutionScope.COMPILE,
-        requiresDependencyResolution = ResolutionScope.COMPILE)
-// must include runtime dependencies to generate configurer source
-public class GenerateConfigurerMojo extends AbstractGeneratorMojo {
+public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMojo {
 
     public static final DotName CONFIGURER = DotName.createSimple("org.apache.camel.spi.Configurer");
 
     /**
-     * The output directory for generated java source code
-     */
-    @Parameter(defaultValue = "${project.basedir}/src/generated/java")
-    protected File sourcesOutputDir;
-
-    @Parameter(defaultValue = "${project.basedir}/src/generated/resources")
-    protected File resourcesOutputDir;
-
-    /**
      * Whether to discover configurer classes from classpath by scanning for @Configurer annotations.
      * This requires using jandex-maven-plugin.
      */
     @Parameter(defaultValue = "true")
     protected boolean discoverClasses = true;
 
-    /**
-     * To generate configurer for these classes.
-     * The syntax is either <tt>fqn</tt> or </tt>fqn=targetFqn</tt>.
-     * This allows to map source class to target class to generate the source code using a different classname.
-     */
-    @Parameter
-    protected List<String> classes;
-
     @Component
     private ArtifactFactory artifactFactory;
 
@@ -127,11 +104,10 @@ public class GenerateConfigurerMojo extends AbstractGeneratorMojo {
         }
     }
 
-    public GenerateConfigurerMojo() {
+    public AbstractGenerateConfigurerMojo() {
     }
 
-    @Override
-    public void execute() throws MojoExecutionException, MojoFailureException {
+    protected void doExecute(File sourcesOutputDir, File resourcesOutputDir, List<String> classes, boolean testClasspathOnly) throws MojoExecutionException, MojoFailureException {
         if ("pom".equals(project.getPackaging())) {
             return;
         }
@@ -145,7 +121,7 @@ public class GenerateConfigurerMojo extends AbstractGeneratorMojo {
 
         List<URL> urls = new ArrayList<>();
         // need to include project compile dependencies (code similar to camel-maven-plugin)
-        addRelevantProjectDependenciesToClasspath(urls);
+        addRelevantProjectDependenciesToClasspath(urls, testClasspathOnly);
         projectClassLoader = DynamicClassLoader.createDynamicClassLoaderFromUrls(urls);
 
         Set<String> set = new LinkedHashSet<>();
@@ -179,7 +155,6 @@ public class GenerateConfigurerMojo extends AbstractGeneratorMojo {
         if (getLog().isDebugEnabled()) {
             getLog().debug("Generating configuers for the following classes: " + set);
         }
-
         for (String fqn : set) {
             try {
                 String targetFqn = fqn;
@@ -189,8 +164,8 @@ public class GenerateConfigurerMojo extends AbstractGeneratorMojo {
                     fqn = fqn.substring(0, pos);
                 }
                 List<Option> options = processClass(fqn);
-                generateConfigurer(fqn, targetFqn, options);
-                generateMetaInfConfigurer(targetFqn);
+                generateConfigurer(fqn, targetFqn, options, sourcesOutputDir);
+                generateMetaInfConfigurer(targetFqn, resourcesOutputDir);
             } catch (Exception e) {
                 throw new MojoExecutionException("Error processing class: " + fqn, e);
             }
@@ -201,16 +176,22 @@ public class GenerateConfigurerMojo extends AbstractGeneratorMojo {
      * Add any relevant project dependencies to the classpath. Takes
      * includeProjectDependencies into consideration.
      *
-     * @param path classpath of {@link java.net.URL} objects
+     * @param path classpath of {@link URL} objects
      * @throws MojoExecutionException
      */
-    private void addRelevantProjectDependenciesToClasspath(List<URL> path) throws MojoExecutionException {
+    private void addRelevantProjectDependenciesToClasspath(List<URL> path, boolean testClasspathOnly) throws MojoExecutionException {
         try {
             getLog().debug("Project Dependencies will be included.");
 
-            URL mainClasses = new File(project.getBuild().getOutputDirectory()).toURI().toURL();
-            getLog().debug("Adding to classpath : " + mainClasses);
-            path.add(mainClasses);
+            if (testClasspathOnly) {
+                URL testClasses = new File(project.getBuild().getTestOutputDirectory()).toURI().toURL();
+                getLog().debug("Adding to classpath : " + testClasses);
+                path.add(testClasses);
+            } else {
+                URL mainClasses = new File(project.getBuild().getOutputDirectory()).toURI().toURL();
+                getLog().debug("Adding to classpath : " + mainClasses);
+                path.add(mainClasses);
+            }
 
             Set<Artifact> dependencies = project.getArtifacts();
 
@@ -357,7 +338,7 @@ public class GenerateConfigurerMojo extends AbstractGeneratorMojo {
         return true;
     }
 
-    private void generateConfigurer(String fqn, String targetFqn, List<Option> options) throws IOException {
+    private void generateConfigurer(String fqn, String targetFqn, List<Option> options, File outputDir) throws IOException {
         int pos = targetFqn.lastIndexOf('.');
         String pn = targetFqn.substring(0, pos);
         String cn = targetFqn.substring(pos + 1) + "Configurer";
@@ -372,14 +353,14 @@ public class GenerateConfigurerMojo extends AbstractGeneratorMojo {
         String source = sw.toString();
 
         String fileName = pn.replace('.', '/') + "/" + cn + ".java";
-        sourcesOutputDir.mkdirs();
-        boolean updated = updateResource(sourcesOutputDir.toPath(), fileName, source);
+        outputDir.mkdirs();
+        boolean updated = updateResource(outputDir.toPath(), fileName, source);
         if (updated) {
             getLog().info("Updated " + fileName);
         }
     }
 
-    private void generateMetaInfConfigurer(String name) {
+    private void generateMetaInfConfigurer(String name, File resourcesOutputDir) {
         int pos = name.lastIndexOf('.');
         String pn = name.substring(0, pos);
         String en = name.substring(pos + 1);
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateConfigurerMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateConfigurerMojo.java
index 1abb926..52e8be5 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateConfigurerMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateConfigurerMojo.java
@@ -17,64 +17,23 @@
 package org.apache.camel.maven.packaging;
 
 import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.Set;
 
-import org.apache.camel.tooling.model.BaseOptionModel;
-import org.apache.camel.tooling.util.ReflectionHelper;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
-import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Exclusion;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
-import org.jboss.jandex.AnnotationInstance;
-import org.jboss.jandex.AnnotationTarget;
-import org.jboss.jandex.AnnotationValue;
-import org.jboss.jandex.ClassInfo;
-import org.jboss.jandex.DotName;
-import org.jboss.jandex.Index;
-import org.jboss.jandex.IndexReader;
-
-import static org.apache.camel.tooling.util.ReflectionHelper.doWithMethods;
-import static org.apache.camel.tooling.util.Strings.between;
 
 /**
- * Generate configurer classes from @Configuer annotated classes.
+ * Generate configurer classes from @Configuer annotated classes for main sources.
  */
 @Mojo(name = "generate-configurer", threadSafe = true, defaultPhase = LifecyclePhase.PROCESS_CLASSES,
         requiresDependencyCollection = ResolutionScope.COMPILE,
         requiresDependencyResolution = ResolutionScope.COMPILE)
 // must include runtime dependencies to generate configurer source
-public class GenerateConfigurerMojo extends AbstractGeneratorMojo {
-
-    public static final DotName CONFIGURER = DotName.createSimple("org.apache.camel.spi.Configurer");
+public class GenerateConfigurerMojo extends AbstractGenerateConfigurerMojo {
 
     /**
      * The output directory for generated java source code
@@ -82,15 +41,11 @@ public class GenerateConfigurerMojo extends AbstractGeneratorMojo {
     @Parameter(defaultValue = "${project.basedir}/src/generated/java")
     protected File sourcesOutputDir;
 
-    @Parameter(defaultValue = "${project.basedir}/src/generated/resources")
-    protected File resourcesOutputDir;
-
     /**
-     * Whether to discover configurer classes from classpath by scanning for @Configurer annotations.
-     * This requires using jandex-maven-plugin.
+     * The output directory for generated resource source code
      */
-    @Parameter(defaultValue = "true")
-    protected boolean discoverClasses = true;
+    @Parameter(defaultValue = "${project.basedir}/src/generated/resources")
+    protected File resourcesOutputDir;
 
     /**
      * To generate configurer for these classes.
@@ -100,33 +55,6 @@ public class GenerateConfigurerMojo extends AbstractGeneratorMojo {
     @Parameter
     protected List<String> classes;
 
-    @Component
-    private ArtifactFactory artifactFactory;
-
-    private DynamicClassLoader projectClassLoader;
-
-    private static class Option extends BaseOptionModel {
-
-        public Option(String name, Class type, String getter) {
-            // we just use name, type
-            setName(name);
-            if (byte[].class == type) {
-                // special for byte array
-                setJavaType("byte[]");
-            } else if (long[].class == type) {
-                // special for long array
-                setJavaType("long[]");
-            } else if (type.isArray()) {
-                // special for array
-                String arrType = between(type.getName(), "[L", ";") + "[]";
-                setJavaType(arrType);
-            } else {
-                setJavaType(type.getName());
-            }
-            setGetterMethod(getter);
-        }
-    }
-
     public GenerateConfigurerMojo() {
     }
 
@@ -143,258 +71,7 @@ public class GenerateConfigurerMojo extends AbstractGeneratorMojo {
             resourcesOutputDir = new File(project.getBasedir(), "src/generated/resources");
         }
 
-        List<URL> urls = new ArrayList<>();
-        // need to include project compile dependencies (code similar to camel-maven-plugin)
-        addRelevantProjectDependenciesToClasspath(urls);
-        projectClassLoader = DynamicClassLoader.createDynamicClassLoaderFromUrls(urls);
-
-        Set<String> set = new LinkedHashSet<>();
-
-        if (discoverClasses) {
-            Path output = Paths.get(project.getBuild().getOutputDirectory());
-            Index index;
-            try (InputStream is = Files.newInputStream(output.resolve("META-INF/jandex.idx"))) {
-                index = new IndexReader(is).read();
-            } catch (IOException e) {
-                throw new MojoExecutionException("IOException: " + e.getMessage(), e);
-            }
-
-            // discover all classes annotated with @Configurer
-            List<AnnotationInstance> annotations = index.getAnnotations(CONFIGURER);
-            annotations.stream()
-                    .filter(annotation -> annotation.target().kind() == AnnotationTarget.Kind.CLASS)
-                    .filter(annotation -> annotation.target().asClass().nestingType() == ClassInfo.NestingType.TOP_LEVEL)
-                    .filter(annotation -> asBooleanDefaultTrue(annotation, "generateConfigurer"))
-                    .forEach(annotation -> {
-                        String currentClass = annotation.target().asClass().name().toString();
-                        set.add(currentClass);
-                    });
-        }
-
-        // additional classes
-        if (classes != null && !classes.isEmpty()) {
-            set.addAll(classes);
-        }
-
-        if (getLog().isDebugEnabled()) {
-            getLog().debug("Generating configuers for the following classes: " + set);
-        }
-
-        for (String fqn : set) {
-            try {
-                String targetFqn = fqn;
-                int pos = fqn.indexOf('=');
-                if (pos != -1) {
-                    targetFqn = fqn.substring(pos + 1);
-                    fqn = fqn.substring(0, pos);
-                }
-                List<Option> options = processClass(fqn);
-                generateConfigurer(fqn, targetFqn, options);
-                generateMetaInfConfigurer(targetFqn);
-            } catch (Exception e) {
-                throw new MojoExecutionException("Error processing class: " + fqn, e);
-            }
-        }
-    }
-
-    /**
-     * Add any relevant project dependencies to the classpath. Takes
-     * includeProjectDependencies into consideration.
-     *
-     * @param path classpath of {@link java.net.URL} objects
-     * @throws MojoExecutionException
-     */
-    private void addRelevantProjectDependenciesToClasspath(List<URL> path) throws MojoExecutionException {
-        try {
-            getLog().debug("Project Dependencies will be included.");
-
-            URL mainClasses = new File(project.getBuild().getOutputDirectory()).toURI().toURL();
-            getLog().debug("Adding to classpath : " + mainClasses);
-            path.add(mainClasses);
-
-            Set<Artifact> dependencies = project.getArtifacts();
-
-            // system scope dependencies are not returned by maven 2.0. See
-            // MEXEC-17
-            dependencies.addAll(getAllNonTestScopedDependencies());
-
-            Iterator<Artifact> iter = dependencies.iterator();
-            while (iter.hasNext()) {
-                Artifact classPathElement = iter.next();
-                getLog().debug("Adding project dependency artifact: " + classPathElement.getArtifactId()
-                        + " to classpath");
-                File file = classPathElement.getFile();
-                if (file != null) {
-                    path.add(file.toURI().toURL());
-                }
-            }
-
-        } catch (MalformedURLException e) {
-            throw new MojoExecutionException("Error during setting up classpath", e);
-        }
-    }
-
-    private Collection<Artifact> getAllNonTestScopedDependencies() throws MojoExecutionException {
-        List<Artifact> answer = new ArrayList<>();
-
-        for (Artifact artifact : getAllDependencies()) {
-
-            // do not add test artifacts
-            if (!artifact.getScope().equals(Artifact.SCOPE_TEST)) {
-                answer.add(artifact);
-            }
-        }
-        return answer;
-    }
-
-    // generic method to retrieve all the transitive dependencies
-    private Collection<Artifact> getAllDependencies() throws MojoExecutionException {
-        List<Artifact> artifacts = new ArrayList<>();
-
-        for (Iterator<?> dependencies = project.getDependencies().iterator(); dependencies.hasNext();) {
-            Dependency dependency = (Dependency)dependencies.next();
-
-            String groupId = dependency.getGroupId();
-            String artifactId = dependency.getArtifactId();
-
-            VersionRange versionRange;
-            try {
-                versionRange = VersionRange.createFromVersionSpec(dependency.getVersion());
-            } catch (InvalidVersionSpecificationException e) {
-                throw new MojoExecutionException("unable to parse version", e);
-            }
-
-            String type = dependency.getType();
-            if (type == null) {
-                type = "jar";
-            }
-            String classifier = dependency.getClassifier();
-            boolean optional = dependency.isOptional();
-            String scope = dependency.getScope();
-            if (scope == null) {
-                scope = Artifact.SCOPE_COMPILE;
-            }
-
-            if (this.artifactFactory != null) {
-                Artifact art = this.artifactFactory.createDependencyArtifact(groupId, artifactId, versionRange,
-                        type, classifier, scope, null, optional);
-
-                if (scope.equalsIgnoreCase(Artifact.SCOPE_SYSTEM)) {
-                    art.setFile(new File(dependency.getSystemPath()));
-                }
-
-                List<String> exclusions = new ArrayList<>();
-                for (Exclusion exclusion : dependency.getExclusions()) {
-                    exclusions.add(exclusion.getGroupId() + ":" + exclusion.getArtifactId());
-                }
-
-                ArtifactFilter newFilter = new ExcludesArtifactFilter(exclusions);
-
-                art.setDependencyFilter(newFilter);
-
-                artifacts.add(art);
-            }
-        }
-
-        return artifacts;
-    }
-
-    private List<Option> processClass(String fqn) throws ClassNotFoundException {
-        List<Option> answer = new ArrayList<>();
-        // filter out duplicates by using a names set that has already added
-        Set<String> names = new HashSet<>();
-
-        Class clazz = projectClassLoader.loadClass(fqn);
-        // find all public setters
-        doWithMethods(clazz, m -> {
-            boolean setter = m.getName().length() >= 4 && m.getName().startsWith("set") && Character.isUpperCase(m.getName().charAt(3));
-            setter &= Modifier.isPublic(m.getModifiers()) && m.getParameterCount() == 1;
-            setter &= filterSetter(m);
-            if (setter) {
-                String getter = "get" + Character.toUpperCase(m.getName().charAt(3)) + m.getName().substring(4);
-                Class type = m.getParameterTypes()[0];
-                if (boolean.class == type || Boolean.class == type) {
-                    try {
-                        String isGetter = "is" + getter.substring(3);
-                        clazz.getMethod(isGetter, null);
-                        getter = isGetter;
-                    } catch (Exception e) {
-                        // ignore as its then assumed to be get
-                    }
-                }
-                String t = Character.toUpperCase(m.getName().charAt(3)) + m.getName().substring(3 + 1);
-                if (names.add(t)) {
-                    answer.add(new Option(t, type, getter));
-                } else {
-                    boolean replace = false;
-                    // try to find out what the real type is of the correspondent field so we chose among the clash
-                    Field field = ReflectionHelper.findField(clazz, Character.toLowerCase(t.charAt(0)) + t.substring(1));
-                    if (field != null && field.getType().equals(type)) {
-                        // this is the correct type for the new option
-                        replace = true;
-                    }
-                    if (replace) {
-                        answer.removeIf(o -> o.getName().equals(t));
-                        answer.add(new Option(t, type, getter));
-                    }
-                }
-            }
-        });
-
-        return answer;
-    }
-
-    private boolean filterSetter(Method setter) {
-        // special for some
-        if ("setBindingMode".equals(setter.getName())) {
-            // we only want the string setter
-            return setter.getParameterTypes()[0] == String.class;
-        } else if ("setHostNameResolver".equals(setter.getName())) {
-            // we only want the string setter
-            return setter.getParameterTypes()[0] == String.class;
-        }
-
-        return true;
-    }
-
-    private void generateConfigurer(String fqn, String targetFqn, List<Option> options) throws IOException {
-        int pos = targetFqn.lastIndexOf('.');
-        String pn = targetFqn.substring(0, pos);
-        String cn = targetFqn.substring(pos + 1) + "Configurer";
-        String en = fqn;
-        String pfqn = fqn;
-        String psn = "org.apache.camel.support.component.PropertyConfigurerSupport";
-
-        StringWriter sw = new StringWriter();
-        PropertyConfigurerGenerator.generatePropertyConfigurer(pn, cn, en, pfqn, psn,
-                false, false, options, sw);
-
-        String source = sw.toString();
-
-        String fileName = pn.replace('.', '/') + "/" + cn + ".java";
-        sourcesOutputDir.mkdirs();
-        boolean updated = updateResource(sourcesOutputDir.toPath(), fileName, source);
-        if (updated) {
-            getLog().info("Updated " + fileName);
-        }
-    }
-
-    private void generateMetaInfConfigurer(String name) {
-        int pos = name.lastIndexOf('.');
-        String pn = name.substring(0, pos);
-        String en = name.substring(pos + 1);
-        try (Writer w = new StringWriter()) {
-            w.append("# " + GENERATED_MSG + "\n");
-            w.append("class=").append(pn).append(".").append(en).append("Configurer").append("\n");
-            updateResource(resourcesOutputDir.toPath(), "META-INF/services/org/apache/camel/configurer/" + en, w.toString());
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private static boolean asBooleanDefaultTrue(AnnotationInstance ai, String name) {
-        AnnotationValue av = ai.value(name);
-        return av == null || av.asBoolean();
+        doExecute(sourcesOutputDir, resourcesOutputDir, classes, false);
     }
 
 }
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateTestConfigurerMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateTestConfigurerMojo.java
new file mode 100644
index 0000000..f423189
--- /dev/null
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateTestConfigurerMojo.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.maven.packaging;
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+
+/**
+ * Generate configurer classes from @Configuer annotated classes for test sources.
+ */
+@Mojo(name = "generate-test-configurer", threadSafe = true, defaultPhase = LifecyclePhase.PROCESS_CLASSES,
+        requiresDependencyCollection = ResolutionScope.COMPILE,
+        requiresDependencyResolution = ResolutionScope.COMPILE)
+// must include runtime dependencies to generate configurer source
+public class GenerateTestConfigurerMojo extends AbstractGenerateConfigurerMojo {
+
+    /**
+     * The output directory for generated test java source code
+     */
+    @Parameter(defaultValue = "${project.basedir}/src/test/java")
+    protected File sourcesOutputDir;
+
+    /**
+     * The output directory for generated test resource source code
+     */
+    @Parameter(defaultValue = "${project.basedir}/src/test/resources")
+    protected File resourcesOutputDir;
+
+    /**
+     * To generate configurer for these test classes.
+     * The syntax is either <tt>fqn</tt> or </tt>fqn=targetFqn</tt>.
+     * This allows to map source class to target class to generate the source code using a different classname.
+     */
+    @Parameter
+    protected List<String> classes;
+
+    public GenerateTestConfigurerMojo() {
+    }
+
+    @Override
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        if ("pom".equals(project.getPackaging())) {
+            return;
+        }
+
+        if (sourcesOutputDir == null) {
+            sourcesOutputDir = new File(project.getBasedir(), "src/test/java");
+        }
+        if (resourcesOutputDir == null) {
+            resourcesOutputDir = new File(project.getBasedir(), "src/test/resources");
+        }
+
+        doExecute(sourcesOutputDir, resourcesOutputDir, classes, true);
+    }
+
+}


[camel] 02/04: CAMEL-15160: Configurer - Generate details what type Map/List contains

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

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

commit c5a95fe117c44cd43560257699aafdcbe2846549
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Aug 17 16:49:19 2020 +0200

    CAMEL-15160: Configurer - Generate details what type Map/List contains
---
 .../apache/camel/spi/PropertyConfigurerGetter.java | 14 ++++++++++
 .../camel/impl/ExtendedCamelContextConfigurer.java |  9 +++++++
 .../camel/impl/RestConfigurationConfigurer.java    | 19 +++++++++++++
 ...ToleranceConfigurationDefinitionConfigurer.java |  7 +++++
 .../HystrixConfigurationDefinitionConfigurer.java  |  7 +++++
 ...ilience4jConfigurationDefinitionConfigurer.java |  7 +++++
 ...ToleranceConfigurationPropertiesConfigurer.java |  7 +++++
 ...althCheckConfigurationPropertiesConfigurer.java |  7 +++++
 .../HealthConfigurationPropertiesConfigurer.java   |  9 +++++++
 .../HystrixConfigurationPropertiesConfigurer.java  |  7 +++++
 .../main/LraConfigurationPropertiesConfigurer.java |  7 +++++
 .../MainConfigurationPropertiesConfigurer.java     | 11 ++++++++
 ...ilience4jConfigurationPropertiesConfigurer.java |  7 +++++
 .../RestConfigurationPropertiesConfigurer.java     | 19 +++++++++++++
 ...hreadPoolConfigurationPropertiesConfigurer.java |  9 +++++++
 .../apache/camel/main/MySecondBarConfigurer.java   |  9 +++++++
 .../apache/camel/main/MySecondFooConfigurer.java   |  9 +++++++
 .../DefaultExchangeFormatterConfigurer.java        |  7 +++++
 .../packaging/AbstractGenerateConfigurerMojo.java  | 31 ++++++++++++++++++++--
 .../packaging/PropertyConfigurerGenerator.java     | 28 +++++++++++++++++++
 20 files changed, 228 insertions(+), 2 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/PropertyConfigurerGetter.java b/core/camel-api/src/main/java/org/apache/camel/spi/PropertyConfigurerGetter.java
index c0d24f9..b50c141 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/PropertyConfigurerGetter.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/PropertyConfigurerGetter.java
@@ -38,6 +38,20 @@ public interface PropertyConfigurerGetter {
     Map<String, Object> getAllOptions(Object target);
 
     /**
+     * Gets the nested class type an option supports (such as list, map, or arrays)
+     *
+     * For maps, then the nested type returned is the type of the value in the map (not the map key type).
+     *
+     * @param target  the target instance such as {@link org.apache.camel.Endpoint} or {@link org.apache.camel.Component}.
+     * @param name          the property name
+     * @param ignoreCase    whether to ignore case for matching the property name
+     * @return the nested class type, or <tt>null</tt> if the option does not has nested types or not possible to resolve.
+     */
+    default Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        return null;
+    }
+
+    /**
      * Gets the property value
      *
      * @param target  the target instance such as {@link org.apache.camel.Endpoint} or {@link org.apache.camel.Component}.
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
index 2ba64b3..5a9386a 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
@@ -371,5 +371,14 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "globaloptions":
+        case "GlobalOptions": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/RestConfigurationConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/RestConfigurationConfigurer.java
index 003e3ad..6b5ce20 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/RestConfigurationConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/RestConfigurationConfigurer.java
@@ -176,5 +176,24 @@ public class RestConfigurationConfigurer extends org.apache.camel.support.compon
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiproperties":
+        case "ApiProperties": return java.lang.Object.class;
+        case "componentproperties":
+        case "ComponentProperties": return java.lang.Object.class;
+        case "consumerproperties":
+        case "ConsumerProperties": return java.lang.Object.class;
+        case "corsheaders":
+        case "CorsHeaders": return java.lang.String.class;
+        case "dataformatproperties":
+        case "DataFormatProperties": return java.lang.Object.class;
+        case "endpointproperties":
+        case "EndpointProperties": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java
index 9d2c49d..3733dbe 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java
@@ -106,5 +106,12 @@ public class FaultToleranceConfigurationDefinitionConfigurer extends org.apache.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java
index c2bc575..3072426 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java
@@ -196,5 +196,12 @@ public class HystrixConfigurationDefinitionConfigurer extends org.apache.camel.s
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java
index f397b9c..6e7b4ed 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java
@@ -136,5 +136,12 @@ public class Resilience4jConfigurationDefinitionConfigurer extends org.apache.ca
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java
index 2bd6e3e..f96afdd 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java
@@ -101,5 +101,12 @@ public class FaultToleranceConfigurationPropertiesConfigurer extends org.apache.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java
index 8e03776..9acf78b 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java
@@ -56,5 +56,12 @@ public class HealthCheckConfigurationPropertiesConfigurer extends org.apache.cam
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/HealthConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/HealthConfigurationPropertiesConfigurer.java
index 6aa5c20..0437f56 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/HealthConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/HealthConfigurationPropertiesConfigurer.java
@@ -61,5 +61,14 @@ public class HealthConfigurationPropertiesConfigurer extends org.apache.camel.su
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "config":
+        case "Config": return org.apache.camel.main.HealthCheckConfigurationProperties.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java
index 166ddad..495f967 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java
@@ -191,5 +191,12 @@ public class HystrixConfigurationPropertiesConfigurer extends org.apache.camel.s
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java
index 700c5d7..ad5fade 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java
@@ -56,5 +56,12 @@ public class LraConfigurationPropertiesConfigurer extends org.apache.camel.suppo
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java
index 102d328..c861558 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java
@@ -451,5 +451,16 @@ public class MainConfigurationPropertiesConfigurer extends org.apache.camel.supp
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "configurations":
+        case "Configurations": return java.lang.Object.class;
+        case "routesbuilders":
+        case "RoutesBuilders": return org.apache.camel.RoutesBuilder.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java
index 1bb5386..4227b05 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java
@@ -131,5 +131,12 @@ public class Resilience4jConfigurationPropertiesConfigurer extends org.apache.ca
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/RestConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/RestConfigurationPropertiesConfigurer.java
index 275583b..be282d2 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/RestConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/RestConfigurationPropertiesConfigurer.java
@@ -176,5 +176,24 @@ public class RestConfigurationPropertiesConfigurer extends org.apache.camel.supp
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiproperties":
+        case "ApiProperties": return java.lang.Object.class;
+        case "componentproperties":
+        case "ComponentProperties": return java.lang.Object.class;
+        case "consumerproperties":
+        case "ConsumerProperties": return java.lang.Object.class;
+        case "corsheaders":
+        case "CorsHeaders": return java.lang.String.class;
+        case "dataformatproperties":
+        case "DataFormatProperties": return java.lang.Object.class;
+        case "endpointproperties":
+        case "EndpointProperties": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/ThreadPoolConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/ThreadPoolConfigurationPropertiesConfigurer.java
index a78e807..d7b70c4 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/ThreadPoolConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/ThreadPoolConfigurationPropertiesConfigurer.java
@@ -76,5 +76,14 @@ public class ThreadPoolConfigurationPropertiesConfigurer extends org.apache.came
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "config":
+        case "Config": return org.apache.camel.main.ThreadPoolProfileConfigurationProperties.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java b/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java
index d31f486..323fb8e 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java
+++ b/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java
@@ -41,5 +41,14 @@ public class MySecondBarConfigurer extends org.apache.camel.support.component.Pr
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "names":
+        case "Names": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java b/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java
index 5044c1f..b14c7df 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java
+++ b/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java
@@ -41,5 +41,14 @@ public class MySecondFooConfigurer extends org.apache.camel.support.component.Pr
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "bars":
+        case "Bars": return org.apache.camel.main.MySecondBar.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java b/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java
index a1d77ec..0126166 100644
--- a/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java
+++ b/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java
@@ -121,5 +121,12 @@ public class DefaultExchangeFormatterConfigurer extends org.apache.camel.support
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
index 12fc5a5..2a69649 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
@@ -39,6 +39,7 @@ import java.util.Set;
 
 import org.apache.camel.tooling.model.BaseOptionModel;
 import org.apache.camel.tooling.util.ReflectionHelper;
+import org.apache.camel.tooling.util.Strings;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
@@ -102,6 +103,11 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo
             }
             setGetterMethod(getter);
         }
+
+        public void setNestedType(String nestedType) {
+            // trick to use deprecation note for nested type
+            setDeprecationNote(nestedType);
+        }
     }
 
     public AbstractGenerateConfigurerMojo() {
@@ -303,9 +309,12 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo
                         // ignore as its then assumed to be get
                     }
                 }
+
+                Option option = null;
                 String t = Character.toUpperCase(m.getName().charAt(3)) + m.getName().substring(3 + 1);
                 if (names.add(t)) {
-                    answer.add(new Option(t, type, getter));
+                    option = new Option(t, type, getter);
+                    answer.add(option);
                 } else {
                     boolean replace = false;
                     // try to find out what the real type is of the correspondent field so we chose among the clash
@@ -316,7 +325,25 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo
                     }
                     if (replace) {
                         answer.removeIf(o -> o.getName().equals(t));
-                        answer.add(new Option(t, type, getter));
+                        option = new Option(t, type, getter);
+                        answer.add(option);
+                    }
+                }
+
+                if (option != null) {
+                    String desc = type.isArray() ? type.getComponentType().getName() : m.toGenericString();
+                    if (desc.contains("<") && desc.contains(">")) {
+                        desc = Strings.between(desc, "<", ">");
+                        // if its a map then it has a key/value, so we only want the last part
+                        int pos = desc.indexOf(',');
+                        if (pos != -1) {
+                            desc = desc.substring(pos + 1);
+                        }
+                        desc = desc.replace('$', '.');
+                        desc = desc.trim();
+                        if (!desc.isEmpty()) {
+                            option.setNestedType(desc);
+                        }
                     }
                 }
             }
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
index fdf60c0..f22f94e 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
@@ -135,6 +135,34 @@ public final class PropertyConfigurerGenerator {
                 w.write("        }\n");
             }
             w.write("    }\n");
+
+            // nested type was stored in deprecation note as we use BaseOptionModel to hold the option data
+            boolean hasNestedTypes = options.stream().map(BaseOptionModel::getDeprecationNote).anyMatch(s -> s != null && !s.trim().isEmpty());
+            if (hasNestedTypes) {
+                w.write("\n");
+                w.write("    @Override\n");
+                w.write("    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {\n");
+                if (!options.isEmpty()) {
+                    w.write("        switch (ignoreCase ? name.toLowerCase() : name) {\n");
+                    for (BaseOptionModel option : options) {
+                        String nestedType = option.getDeprecationNote();
+                        if (nestedType != null && !nestedType.isEmpty()) {
+                            nestedType = nestedType.replace('$', '.');
+                            if (!option.getName().toLowerCase().equals(option.getName())) {
+                                w.write(String.format("        case \"%s\":\n", option.getName().toLowerCase()));
+                            }
+                            w.write(String.format("        case \"%s\": return %s.class;\n", option.getName(), nestedType));
+                        }
+                    }
+                    if (hasSuper) {
+                        w.write("        default: return super.getOptionNestedType(target, name, ignoreCase);\n");
+                    } else {
+                        w.write("        default: return null;\n");
+                    }
+                    w.write("        }\n");
+                }
+                w.write("    }\n");
+            }
         }
 
         w.write("}\n");


[camel] 03/04: CAMEL-15160: Configurer - Generate details what type Map/List contains

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

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

commit 8bc6612e622d0a1ef0b39e01fa052dd560856011
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Aug 17 21:06:00 2020 +0200

    CAMEL-15160: Configurer - Generate details what type Map/List contains
---
 ...ionsManagerEndpointConfigurationConfigurer.java |  9 ++++++++
 ...entsManagerEndpointConfigurationConfigurer.java |  9 ++++++++
 .../component/box/BoxConfigurationConfigurer.java  |  9 ++++++++
 ...LogsManagerEndpointConfigurationConfigurer.java |  9 ++++++++
 ...entsManagerEndpointConfigurationConfigurer.java |  9 ++++++++
 ...ilesManagerEndpointConfigurationConfigurer.java |  9 ++++++++
 ...dersManagerEndpointConfigurationConfigurer.java |  9 ++++++++
 ...oupsManagerEndpointConfigurationConfigurer.java |  9 ++++++++
 ...archManagerEndpointConfigurationConfigurer.java |  9 ++++++++
 ...asksManagerEndpointConfigurationConfigurer.java |  9 ++++++++
 ...sersManagerEndpointConfigurationConfigurer.java |  9 ++++++++
 ...apabilitiesEndpointConfigurationConfigurer.java | 11 ++++++++++
 .../FhirCreateEndpointConfigurationConfigurer.java |  9 ++++++++
 .../FhirDeleteEndpointConfigurationConfigurer.java |  9 ++++++++
 ...FhirHistoryEndpointConfigurationConfigurer.java | 15 +++++++++++++
 ...hirLoadPageEndpointConfigurationConfigurer.java | 11 ++++++++++
 .../FhirMetaEndpointConfigurationConfigurer.java   | 11 ++++++++++
 ...irOperationEndpointConfigurationConfigurer.java | 17 +++++++++++++++
 .../FhirPatchEndpointConfigurationConfigurer.java  |  9 ++++++++
 .../FhirReadEndpointConfigurationConfigurer.java   | 11 ++++++++++
 .../FhirSearchEndpointConfigurationConfigurer.java |  9 ++++++++
 ...TransactionEndpointConfigurationConfigurer.java | 11 ++++++++++
 .../FhirUpdateEndpointConfigurationConfigurer.java |  9 ++++++++
 ...hirValidateEndpointConfigurationConfigurer.java |  9 ++++++++
 .../DriveAboutEndpointConfigurationConfigurer.java |  9 ++++++++
 .../DriveAppsEndpointConfigurationConfigurer.java  |  9 ++++++++
 ...riveChangesEndpointConfigurationConfigurer.java |  9 ++++++++
 ...iveChannelsEndpointConfigurationConfigurer.java |  9 ++++++++
 ...iveChildrenEndpointConfigurationConfigurer.java |  9 ++++++++
 ...iveCommentsEndpointConfigurationConfigurer.java |  9 ++++++++
 .../DriveFilesEndpointConfigurationConfigurer.java |  9 ++++++++
 ...riveParentsEndpointConfigurationConfigurer.java |  9 ++++++++
 ...PermissionsEndpointConfigurationConfigurer.java |  9 ++++++++
 ...ePropertiesEndpointConfigurationConfigurer.java |  9 ++++++++
 ...iveRealtimeEndpointConfigurationConfigurer.java |  9 ++++++++
 ...riveRepliesEndpointConfigurationConfigurer.java |  9 ++++++++
 ...veRevisionsEndpointConfigurationConfigurer.java |  9 ++++++++
 .../drive/GoogleDriveConfigurationConfigurer.java  |  9 ++++++++
 .../Olingo2AppEndpointConfigurationConfigurer.java | 13 +++++++++++
 .../olingo2/Olingo2ConfigurationConfigurer.java    |  9 ++++++++
 .../Olingo4AppEndpointConfigurationConfigurer.java | 13 +++++++++++
 .../olingo4/Olingo4ConfigurationConfigurer.java    |  9 ++++++++
 .../MessageEndpointConfigurationConfigurer.java    |  9 ++++++++
 .../ZendeskEndpointConfigurationConfigurer.java    | 17 +++++++++++++++
 ...ToleranceConfigurationDefinitionConfigurer.java |  7 ------
 .../HystrixConfigurationDefinitionConfigurer.java  |  7 ------
 ...ilience4jConfigurationDefinitionConfigurer.java |  7 ------
 ...ToleranceConfigurationPropertiesConfigurer.java |  7 ------
 ...althCheckConfigurationPropertiesConfigurer.java |  7 ------
 .../HystrixConfigurationPropertiesConfigurer.java  |  7 ------
 .../main/LraConfigurationPropertiesConfigurer.java |  7 ------
 ...ilience4jConfigurationPropertiesConfigurer.java |  7 ------
 ...yBindingSupportRootArrayWithConfigurerTest.java |  1 +
 .../DefaultExchangeFormatterConfigurer.java        |  7 ------
 .../camel/tooling/model/BaseOptionModel.java       |  9 ++++++++
 .../packaging/AbstractGenerateConfigurerMojo.java  | 25 +++++++++++-----------
 .../packaging/PropertyConfigurerGenerator.java     |  6 +++---
 57 files changed, 462 insertions(+), 78 deletions(-)

diff --git a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxCollaborationsManagerEndpointConfigurationConfigurer.java b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxCollaborationsManagerEndpointConfigurationConfigurer.java
index 9369e00..6ff62ba 100644
--- a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxCollaborationsManagerEndpointConfigurationConfigurer.java
+++ b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxCollaborationsManagerEndpointConfigurationConfigurer.java
@@ -151,5 +151,14 @@ public class BoxCollaborationsManagerEndpointConfigurationConfigurer extends org
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "httpparams":
+        case "HttpParams": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxCommentsManagerEndpointConfigurationConfigurer.java b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxCommentsManagerEndpointConfigurationConfigurer.java
index d593098..d30438b 100644
--- a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxCommentsManagerEndpointConfigurationConfigurer.java
+++ b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxCommentsManagerEndpointConfigurationConfigurer.java
@@ -136,5 +136,14 @@ public class BoxCommentsManagerEndpointConfigurationConfigurer extends org.apach
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "httpparams":
+        case "HttpParams": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxConfigurationConfigurer.java b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxConfigurationConfigurer.java
index 36448f2..a0deda7 100644
--- a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxConfigurationConfigurer.java
+++ b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxConfigurationConfigurer.java
@@ -121,5 +121,14 @@ public class BoxConfigurationConfigurer extends org.apache.camel.support.compone
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "httpparams":
+        case "HttpParams": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxEventLogsManagerEndpointConfigurationConfigurer.java b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxEventLogsManagerEndpointConfigurationConfigurer.java
index eb224a6..4496bbf 100644
--- a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxEventLogsManagerEndpointConfigurationConfigurer.java
+++ b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxEventLogsManagerEndpointConfigurationConfigurer.java
@@ -141,5 +141,14 @@ public class BoxEventLogsManagerEndpointConfigurationConfigurer extends org.apac
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "httpparams":
+        case "HttpParams": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxEventsManagerEndpointConfigurationConfigurer.java b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxEventsManagerEndpointConfigurationConfigurer.java
index e5550b8..ade7888 100644
--- a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxEventsManagerEndpointConfigurationConfigurer.java
+++ b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxEventsManagerEndpointConfigurationConfigurer.java
@@ -126,5 +126,14 @@ public class BoxEventsManagerEndpointConfigurationConfigurer extends org.apache.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "httpparams":
+        case "HttpParams": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxFilesManagerEndpointConfigurationConfigurer.java b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxFilesManagerEndpointConfigurationConfigurer.java
index e7ea403..8c7512b 100644
--- a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxFilesManagerEndpointConfigurationConfigurer.java
+++ b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxFilesManagerEndpointConfigurationConfigurer.java
@@ -271,5 +271,14 @@ public class BoxFilesManagerEndpointConfigurationConfigurer extends org.apache.c
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "httpparams":
+        case "HttpParams": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxFoldersManagerEndpointConfigurationConfigurer.java b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxFoldersManagerEndpointConfigurationConfigurer.java
index cc0d939..e7223a5 100644
--- a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxFoldersManagerEndpointConfigurationConfigurer.java
+++ b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxFoldersManagerEndpointConfigurationConfigurer.java
@@ -191,5 +191,14 @@ public class BoxFoldersManagerEndpointConfigurationConfigurer extends org.apache
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "httpparams":
+        case "HttpParams": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxGroupsManagerEndpointConfigurationConfigurer.java b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxGroupsManagerEndpointConfigurationConfigurer.java
index 62aa318..37335c7 100644
--- a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxGroupsManagerEndpointConfigurationConfigurer.java
+++ b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxGroupsManagerEndpointConfigurationConfigurer.java
@@ -176,5 +176,14 @@ public class BoxGroupsManagerEndpointConfigurationConfigurer extends org.apache.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "httpparams":
+        case "HttpParams": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxSearchManagerEndpointConfigurationConfigurer.java b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxSearchManagerEndpointConfigurationConfigurer.java
index fcc0868..24f6899 100644
--- a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxSearchManagerEndpointConfigurationConfigurer.java
+++ b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxSearchManagerEndpointConfigurationConfigurer.java
@@ -131,5 +131,14 @@ public class BoxSearchManagerEndpointConfigurationConfigurer extends org.apache.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "httpparams":
+        case "HttpParams": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxTasksManagerEndpointConfigurationConfigurer.java b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxTasksManagerEndpointConfigurationConfigurer.java
index a278909..0427b9a 100644
--- a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxTasksManagerEndpointConfigurationConfigurer.java
+++ b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxTasksManagerEndpointConfigurationConfigurer.java
@@ -161,5 +161,14 @@ public class BoxTasksManagerEndpointConfigurationConfigurer extends org.apache.c
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "httpparams":
+        case "HttpParams": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxUsersManagerEndpointConfigurationConfigurer.java b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxUsersManagerEndpointConfigurationConfigurer.java
index 60390ae..07ab08a 100644
--- a/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxUsersManagerEndpointConfigurationConfigurer.java
+++ b/components/camel-box/camel-box-component/src/generated/java/org/apache/camel/component/box/BoxUsersManagerEndpointConfigurationConfigurer.java
@@ -176,5 +176,14 @@ public class BoxUsersManagerEndpointConfigurationConfigurer extends org.apache.c
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "httpparams":
+        case "HttpParams": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirCapabilitiesEndpointConfigurationConfigurer.java b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirCapabilitiesEndpointConfigurationConfigurer.java
index a566312..8e4572c 100644
--- a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirCapabilitiesEndpointConfigurationConfigurer.java
+++ b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirCapabilitiesEndpointConfigurationConfigurer.java
@@ -171,5 +171,16 @@ public class FhirCapabilitiesEndpointConfigurationConfigurer extends org.apache.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "extraparameters":
+        case "ExtraParameters": return java.lang.Object.class;
+        case "type":
+        case "Type": return org.hl7.fhir.instance.model.api.IBaseConformance.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirCreateEndpointConfigurationConfigurer.java b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirCreateEndpointConfigurationConfigurer.java
index 2a0f375..342bb76 100644
--- a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirCreateEndpointConfigurationConfigurer.java
+++ b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirCreateEndpointConfigurationConfigurer.java
@@ -186,5 +186,14 @@ public class FhirCreateEndpointConfigurationConfigurer extends org.apache.camel.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "extraparameters":
+        case "ExtraParameters": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirDeleteEndpointConfigurationConfigurer.java b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirDeleteEndpointConfigurationConfigurer.java
index 1d9e3bd..14a5b10 100644
--- a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirDeleteEndpointConfigurationConfigurer.java
+++ b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirDeleteEndpointConfigurationConfigurer.java
@@ -191,5 +191,14 @@ public class FhirDeleteEndpointConfigurationConfigurer extends org.apache.camel.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "extraparameters":
+        case "ExtraParameters": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirHistoryEndpointConfigurationConfigurer.java b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirHistoryEndpointConfigurationConfigurer.java
index c41e102..6e003ca 100644
--- a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirHistoryEndpointConfigurationConfigurer.java
+++ b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirHistoryEndpointConfigurationConfigurer.java
@@ -196,5 +196,20 @@ public class FhirHistoryEndpointConfigurationConfigurer extends org.apache.camel
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "extraparameters":
+        case "ExtraParameters": return java.lang.Object.class;
+        case "icutoff":
+        case "ICutoff": return java.util.Date.class;
+        case "resourcetype":
+        case "ResourceType": return org.hl7.fhir.instance.model.api.IBaseResource.class;
+        case "returntype":
+        case "ReturnType": return org.hl7.fhir.instance.model.api.IBaseBundle.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirLoadPageEndpointConfigurationConfigurer.java b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirLoadPageEndpointConfigurationConfigurer.java
index 54f1fe3..3dafbf8 100644
--- a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirLoadPageEndpointConfigurationConfigurer.java
+++ b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirLoadPageEndpointConfigurationConfigurer.java
@@ -181,5 +181,16 @@ public class FhirLoadPageEndpointConfigurationConfigurer extends org.apache.came
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "extraparameters":
+        case "ExtraParameters": return java.lang.Object.class;
+        case "returntype":
+        case "ReturnType": return org.hl7.fhir.instance.model.api.IBaseBundle.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirMetaEndpointConfigurationConfigurer.java b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirMetaEndpointConfigurationConfigurer.java
index 9b75033..db58a28 100644
--- a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirMetaEndpointConfigurationConfigurer.java
+++ b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirMetaEndpointConfigurationConfigurer.java
@@ -186,5 +186,16 @@ public class FhirMetaEndpointConfigurationConfigurer extends org.apache.camel.su
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "extraparameters":
+        case "ExtraParameters": return java.lang.Object.class;
+        case "metatype":
+        case "MetaType": return org.hl7.fhir.instance.model.api.IBaseMetaType.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirOperationEndpointConfigurationConfigurer.java b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirOperationEndpointConfigurationConfigurer.java
index 35edc9d..7c2fd46 100644
--- a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirOperationEndpointConfigurationConfigurer.java
+++ b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirOperationEndpointConfigurationConfigurer.java
@@ -221,5 +221,22 @@ public class FhirOperationEndpointConfigurationConfigurer extends org.apache.cam
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "extraparameters":
+        case "ExtraParameters": return java.lang.Object.class;
+        case "outputparametertype":
+        case "OutputParameterType": return org.hl7.fhir.instance.model.api.IBaseParameters.class;
+        case "resourcetype":
+        case "ResourceType": return org.hl7.fhir.instance.model.api.IBaseResource.class;
+        case "responseclass":
+        case "ResponseClass": return org.hl7.fhir.instance.model.api.IBaseBundle.class;
+        case "returntype":
+        case "ReturnType": return org.hl7.fhir.instance.model.api.IBaseResource.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirPatchEndpointConfigurationConfigurer.java b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirPatchEndpointConfigurationConfigurer.java
index 11c8416..85cdb62 100644
--- a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirPatchEndpointConfigurationConfigurer.java
+++ b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirPatchEndpointConfigurationConfigurer.java
@@ -191,5 +191,14 @@ public class FhirPatchEndpointConfigurationConfigurer extends org.apache.camel.s
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "extraparameters":
+        case "ExtraParameters": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirReadEndpointConfigurationConfigurer.java b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirReadEndpointConfigurationConfigurer.java
index 4fbf850..3486325 100644
--- a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirReadEndpointConfigurationConfigurer.java
+++ b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirReadEndpointConfigurationConfigurer.java
@@ -226,5 +226,16 @@ public class FhirReadEndpointConfigurationConfigurer extends org.apache.camel.su
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "extraparameters":
+        case "ExtraParameters": return java.lang.Object.class;
+        case "resource":
+        case "Resource": return org.hl7.fhir.instance.model.api.IBaseResource.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirSearchEndpointConfigurationConfigurer.java b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirSearchEndpointConfigurationConfigurer.java
index 7906cfa..07b950c 100644
--- a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirSearchEndpointConfigurationConfigurer.java
+++ b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirSearchEndpointConfigurationConfigurer.java
@@ -171,5 +171,14 @@ public class FhirSearchEndpointConfigurationConfigurer extends org.apache.camel.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "extraparameters":
+        case "ExtraParameters": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirTransactionEndpointConfigurationConfigurer.java b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirTransactionEndpointConfigurationConfigurer.java
index bcddddc..3db27aa 100644
--- a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirTransactionEndpointConfigurationConfigurer.java
+++ b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirTransactionEndpointConfigurationConfigurer.java
@@ -181,5 +181,16 @@ public class FhirTransactionEndpointConfigurationConfigurer extends org.apache.c
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "extraparameters":
+        case "ExtraParameters": return java.lang.Object.class;
+        case "resources":
+        case "Resources": return org.hl7.fhir.instance.model.api.IBaseResource.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirUpdateEndpointConfigurationConfigurer.java b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirUpdateEndpointConfigurationConfigurer.java
index 43e71d9..165189c 100644
--- a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirUpdateEndpointConfigurationConfigurer.java
+++ b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirUpdateEndpointConfigurationConfigurer.java
@@ -196,5 +196,14 @@ public class FhirUpdateEndpointConfigurationConfigurer extends org.apache.camel.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "extraparameters":
+        case "ExtraParameters": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirValidateEndpointConfigurationConfigurer.java b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirValidateEndpointConfigurationConfigurer.java
index 7f386ac..aacb518 100644
--- a/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirValidateEndpointConfigurationConfigurer.java
+++ b/components/camel-fhir/camel-fhir-component/src/generated/java/org/apache/camel/component/fhir/FhirValidateEndpointConfigurationConfigurer.java
@@ -176,5 +176,14 @@ public class FhirValidateEndpointConfigurationConfigurer extends org.apache.came
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "extraparameters":
+        case "ExtraParameters": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveAboutEndpointConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveAboutEndpointConfigurationConfigurer.java
index 25f87af..ef0cef2 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveAboutEndpointConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveAboutEndpointConfigurationConfigurer.java
@@ -76,5 +76,14 @@ public class DriveAboutEndpointConfigurationConfigurer extends org.apache.camel.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveAppsEndpointConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveAppsEndpointConfigurationConfigurer.java
index b1379c2..f14794b 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveAppsEndpointConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveAppsEndpointConfigurationConfigurer.java
@@ -81,5 +81,14 @@ public class DriveAppsEndpointConfigurationConfigurer extends org.apache.camel.s
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveChangesEndpointConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveChangesEndpointConfigurationConfigurer.java
index 09e3610..d551978 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveChangesEndpointConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveChangesEndpointConfigurationConfigurer.java
@@ -86,5 +86,14 @@ public class DriveChangesEndpointConfigurationConfigurer extends org.apache.came
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveChannelsEndpointConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveChannelsEndpointConfigurationConfigurer.java
index ce0a01b..167a691 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveChannelsEndpointConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveChannelsEndpointConfigurationConfigurer.java
@@ -81,5 +81,14 @@ public class DriveChannelsEndpointConfigurationConfigurer extends org.apache.cam
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveChildrenEndpointConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveChildrenEndpointConfigurationConfigurer.java
index 0908fc5..86d2c91 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveChildrenEndpointConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveChildrenEndpointConfigurationConfigurer.java
@@ -91,5 +91,14 @@ public class DriveChildrenEndpointConfigurationConfigurer extends org.apache.cam
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveCommentsEndpointConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveCommentsEndpointConfigurationConfigurer.java
index aa312fb..9ed0825 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveCommentsEndpointConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveCommentsEndpointConfigurationConfigurer.java
@@ -91,5 +91,14 @@ public class DriveCommentsEndpointConfigurationConfigurer extends org.apache.cam
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveFilesEndpointConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveFilesEndpointConfigurationConfigurer.java
index ac9e15d..9ff5186 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveFilesEndpointConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveFilesEndpointConfigurationConfigurer.java
@@ -101,5 +101,14 @@ public class DriveFilesEndpointConfigurationConfigurer extends org.apache.camel.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveParentsEndpointConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveParentsEndpointConfigurationConfigurer.java
index be8ee6e..127d698 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveParentsEndpointConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveParentsEndpointConfigurationConfigurer.java
@@ -91,5 +91,14 @@ public class DriveParentsEndpointConfigurationConfigurer extends org.apache.came
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DrivePermissionsEndpointConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DrivePermissionsEndpointConfigurationConfigurer.java
index 37c6a1b..422d104 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DrivePermissionsEndpointConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DrivePermissionsEndpointConfigurationConfigurer.java
@@ -96,5 +96,14 @@ public class DrivePermissionsEndpointConfigurationConfigurer extends org.apache.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DrivePropertiesEndpointConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DrivePropertiesEndpointConfigurationConfigurer.java
index 39d9c29..dd91ec6 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DrivePropertiesEndpointConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DrivePropertiesEndpointConfigurationConfigurer.java
@@ -91,5 +91,14 @@ public class DrivePropertiesEndpointConfigurationConfigurer extends org.apache.c
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveRealtimeEndpointConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveRealtimeEndpointConfigurationConfigurer.java
index 982ea48..d5d76af 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveRealtimeEndpointConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveRealtimeEndpointConfigurationConfigurer.java
@@ -86,5 +86,14 @@ public class DriveRealtimeEndpointConfigurationConfigurer extends org.apache.cam
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveRepliesEndpointConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveRepliesEndpointConfigurationConfigurer.java
index ac80383..90d32fe 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveRepliesEndpointConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveRepliesEndpointConfigurationConfigurer.java
@@ -96,5 +96,14 @@ public class DriveRepliesEndpointConfigurationConfigurer extends org.apache.came
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveRevisionsEndpointConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveRevisionsEndpointConfigurationConfigurer.java
index 381afbd..44ab2a3 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveRevisionsEndpointConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/DriveRevisionsEndpointConfigurationConfigurer.java
@@ -91,5 +91,14 @@ public class DriveRevisionsEndpointConfigurationConfigurer extends org.apache.ca
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/GoogleDriveConfigurationConfigurer.java b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/GoogleDriveConfigurationConfigurer.java
index 530eb01..6bac635 100644
--- a/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/GoogleDriveConfigurationConfigurer.java
+++ b/components/camel-google-drive/src/generated/java/org/apache/camel/component/google/drive/GoogleDriveConfigurationConfigurer.java
@@ -76,5 +76,14 @@ public class GoogleDriveConfigurationConfigurer extends org.apache.camel.support
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "scopes":
+        case "Scopes": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-olingo2/camel-olingo2-component/src/generated/java/org/apache/camel/component/olingo2/Olingo2AppEndpointConfigurationConfigurer.java b/components/camel-olingo2/camel-olingo2-component/src/generated/java/org/apache/camel/component/olingo2/Olingo2AppEndpointConfigurationConfigurer.java
index 9b4fb1c..b2d477d 100644
--- a/components/camel-olingo2/camel-olingo2-component/src/generated/java/org/apache/camel/component/olingo2/Olingo2AppEndpointConfigurationConfigurer.java
+++ b/components/camel-olingo2/camel-olingo2-component/src/generated/java/org/apache/camel/component/olingo2/Olingo2AppEndpointConfigurationConfigurer.java
@@ -136,5 +136,18 @@ public class Olingo2AppEndpointConfigurationConfigurer extends org.apache.camel.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "endpointhttpheaders":
+        case "EndpointHttpHeaders": return java.lang.String.class;
+        case "httpheaders":
+        case "HttpHeaders": return java.lang.String.class;
+        case "queryparams":
+        case "QueryParams": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-olingo2/camel-olingo2-component/src/generated/java/org/apache/camel/component/olingo2/Olingo2ConfigurationConfigurer.java b/components/camel-olingo2/camel-olingo2-component/src/generated/java/org/apache/camel/component/olingo2/Olingo2ConfigurationConfigurer.java
index 7723701..6889d23 100644
--- a/components/camel-olingo2/camel-olingo2-component/src/generated/java/org/apache/camel/component/olingo2/Olingo2ConfigurationConfigurer.java
+++ b/components/camel-olingo2/camel-olingo2-component/src/generated/java/org/apache/camel/component/olingo2/Olingo2ConfigurationConfigurer.java
@@ -101,5 +101,14 @@ public class Olingo2ConfigurationConfigurer extends org.apache.camel.support.com
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "httpheaders":
+        case "HttpHeaders": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-olingo4/camel-olingo4-component/src/generated/java/org/apache/camel/component/olingo4/Olingo4AppEndpointConfigurationConfigurer.java b/components/camel-olingo4/camel-olingo4-component/src/generated/java/org/apache/camel/component/olingo4/Olingo4AppEndpointConfigurationConfigurer.java
index 25e2ade..3bfe940 100644
--- a/components/camel-olingo4/camel-olingo4-component/src/generated/java/org/apache/camel/component/olingo4/Olingo4AppEndpointConfigurationConfigurer.java
+++ b/components/camel-olingo4/camel-olingo4-component/src/generated/java/org/apache/camel/component/olingo4/Olingo4AppEndpointConfigurationConfigurer.java
@@ -136,5 +136,18 @@ public class Olingo4AppEndpointConfigurationConfigurer extends org.apache.camel.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "endpointhttpheaders":
+        case "EndpointHttpHeaders": return java.lang.String.class;
+        case "httpheaders":
+        case "HttpHeaders": return java.lang.String.class;
+        case "queryparams":
+        case "QueryParams": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-olingo4/camel-olingo4-component/src/generated/java/org/apache/camel/component/olingo4/Olingo4ConfigurationConfigurer.java b/components/camel-olingo4/camel-olingo4-component/src/generated/java/org/apache/camel/component/olingo4/Olingo4ConfigurationConfigurer.java
index b0da7fb..765e2b4 100644
--- a/components/camel-olingo4/camel-olingo4-component/src/generated/java/org/apache/camel/component/olingo4/Olingo4ConfigurationConfigurer.java
+++ b/components/camel-olingo4/camel-olingo4-component/src/generated/java/org/apache/camel/component/olingo4/Olingo4ConfigurationConfigurer.java
@@ -101,5 +101,14 @@ public class Olingo4ConfigurationConfigurer extends org.apache.camel.support.com
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "httpheaders":
+        case "HttpHeaders": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-twilio/src/generated/java/org/apache/camel/component/twilio/MessageEndpointConfigurationConfigurer.java b/components/camel-twilio/src/generated/java/org/apache/camel/component/twilio/MessageEndpointConfigurationConfigurer.java
index 4453075..11307d5 100644
--- a/components/camel-twilio/src/generated/java/org/apache/camel/component/twilio/MessageEndpointConfigurationConfigurer.java
+++ b/components/camel-twilio/src/generated/java/org/apache/camel/component/twilio/MessageEndpointConfigurationConfigurer.java
@@ -81,5 +81,14 @@ public class MessageEndpointConfigurationConfigurer extends org.apache.camel.sup
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "mediaurl":
+        case "MediaUrl": return java.net.URI.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/components/camel-zendesk/src/generated/java/org/apache/camel/component/zendesk/ZendeskEndpointConfigurationConfigurer.java b/components/camel-zendesk/src/generated/java/org/apache/camel/component/zendesk/ZendeskEndpointConfigurationConfigurer.java
index 72dce4d..34a2843 100644
--- a/components/camel-zendesk/src/generated/java/org/apache/camel/component/zendesk/ZendeskEndpointConfigurationConfigurer.java
+++ b/components/camel-zendesk/src/generated/java/org/apache/camel/component/zendesk/ZendeskEndpointConfigurationConfigurer.java
@@ -546,5 +546,22 @@ public class ZendeskEndpointConfigurationConfigurer extends org.apache.camel.sup
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "attachments":
+        case "Attachments": return org.zendesk.client.v2.model.Attachment.class;
+        case "organizationlist":
+        case "OrganizationList": return org.zendesk.client.v2.model.Organization.class;
+        case "statuses":
+        case "Statuses": return org.zendesk.client.v2.model.JobStatus.class;
+        case "ticketlist":
+        case "TicketList": return org.zendesk.client.v2.model.Ticket.class;
+        case "userlist":
+        case "UserList": return org.zendesk.client.v2.model.User.class;
+        default: return null;
+        }
+    }
 }
 
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java
index 3733dbe..9d2c49d 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java
@@ -106,12 +106,5 @@ public class FaultToleranceConfigurationDefinitionConfigurer extends org.apache.
         default: return null;
         }
     }
-
-    @Override
-    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
-        switch (ignoreCase ? name.toLowerCase() : name) {
-        default: return null;
-        }
-    }
 }
 
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java
index 3072426..c2bc575 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java
@@ -196,12 +196,5 @@ public class HystrixConfigurationDefinitionConfigurer extends org.apache.camel.s
         default: return null;
         }
     }
-
-    @Override
-    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
-        switch (ignoreCase ? name.toLowerCase() : name) {
-        default: return null;
-        }
-    }
 }
 
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java
index 6e7b4ed..f397b9c 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java
@@ -136,12 +136,5 @@ public class Resilience4jConfigurationDefinitionConfigurer extends org.apache.ca
         default: return null;
         }
     }
-
-    @Override
-    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
-        switch (ignoreCase ? name.toLowerCase() : name) {
-        default: return null;
-        }
-    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java
index f96afdd..2bd6e3e 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java
@@ -101,12 +101,5 @@ public class FaultToleranceConfigurationPropertiesConfigurer extends org.apache.
         default: return null;
         }
     }
-
-    @Override
-    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
-        switch (ignoreCase ? name.toLowerCase() : name) {
-        default: return null;
-        }
-    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java
index 9acf78b..8e03776 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java
@@ -56,12 +56,5 @@ public class HealthCheckConfigurationPropertiesConfigurer extends org.apache.cam
         default: return null;
         }
     }
-
-    @Override
-    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
-        switch (ignoreCase ? name.toLowerCase() : name) {
-        default: return null;
-        }
-    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java
index 495f967..166ddad 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java
@@ -191,12 +191,5 @@ public class HystrixConfigurationPropertiesConfigurer extends org.apache.camel.s
         default: return null;
         }
     }
-
-    @Override
-    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
-        switch (ignoreCase ? name.toLowerCase() : name) {
-        default: return null;
-        }
-    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java
index ad5fade..700c5d7 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java
@@ -56,12 +56,5 @@ public class LraConfigurationPropertiesConfigurer extends org.apache.camel.suppo
         default: return null;
         }
     }
-
-    @Override
-    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
-        switch (ignoreCase ? name.toLowerCase() : name) {
-        default: return null;
-        }
-    }
 }
 
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java
index 4227b05..1bb5386 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java
@@ -131,12 +131,5 @@ public class Resilience4jConfigurationPropertiesConfigurer extends org.apache.ca
         default: return null;
         }
     }
-
-    @Override
-    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
-        switch (ignoreCase ? name.toLowerCase() : name) {
-        default: return null;
-        }
-    }
 }
 
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayWithConfigurerTest.java b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayWithConfigurerTest.java
index 2748e1a..3c8e6cb 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayWithConfigurerTest.java
+++ b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayWithConfigurerTest.java
@@ -45,6 +45,7 @@ public class PropertyBindingSupportRootArrayWithConfigurerTest {
         PropertyBindingSupport.build()
                 .withCamelContext(context)
                 .withTarget(target)
+// TODO: this should not be needed anymore with newly generated configurers
                 .withProperty("bars[0]", "#class:" + MySecondBar.class.getName())
                 .withProperty("bars[0].names[0]", "a")
                 .withProperty("bars[0].names[1]", "b")
diff --git a/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java b/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java
index 0126166..a1d77ec 100644
--- a/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java
+++ b/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java
@@ -121,12 +121,5 @@ public class DefaultExchangeFormatterConfigurer extends org.apache.camel.support
         default: return null;
         }
     }
-
-    @Override
-    public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {
-        switch (ignoreCase ? name.toLowerCase() : name) {
-        default: return null;
-        }
-    }
 }
 
diff --git a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java
index 30d8746..a95438e 100644
--- a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java
+++ b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java
@@ -46,6 +46,7 @@ public abstract class BaseOptionModel {
     protected String configurationClass;
     protected String configurationField;
     protected String description;
+    protected String extra;  // optional and currently only used by configurer
 
     // todo: move this as a helper method
     protected boolean newGroup; // special for documentation rendering
@@ -250,6 +251,14 @@ public abstract class BaseOptionModel {
         this.newGroup = newGroup;
     }
 
+    public String getExtra() {
+        return extra;
+    }
+
+    public void setExtra(String extra) {
+        this.extra = extra;
+    }
+
     public String getShortGroup() {
         if (group.endsWith(" (advanced)")) {
             return group.substring(0, group.length() - 11);
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
index 2a69649..f4cf234 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
@@ -83,9 +83,9 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo
 
     private DynamicClassLoader projectClassLoader;
 
-    private static class Option extends BaseOptionModel {
+    public static class ConfigurerOption extends BaseOptionModel {
 
-        public Option(String name, Class type, String getter) {
+        public ConfigurerOption(String name, Class type, String getter) {
             // we just use name, type
             setName(name);
             if (byte[].class == type) {
@@ -105,8 +105,8 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo
         }
 
         public void setNestedType(String nestedType) {
-            // trick to use deprecation note for nested type
-            setDeprecationNote(nestedType);
+            // store in extra
+            setExtra(nestedType);
         }
     }
 
@@ -169,7 +169,7 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo
                     targetFqn = fqn.substring(pos + 1);
                     fqn = fqn.substring(0, pos);
                 }
-                List<Option> options = processClass(fqn);
+                List<ConfigurerOption> options = processClass(fqn);
                 generateConfigurer(fqn, targetFqn, options, sourcesOutputDir);
                 generateMetaInfConfigurer(targetFqn, resourcesOutputDir);
             } catch (Exception e) {
@@ -286,8 +286,8 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo
         return artifacts;
     }
 
-    private List<Option> processClass(String fqn) throws ClassNotFoundException {
-        List<Option> answer = new ArrayList<>();
+    private List<ConfigurerOption> processClass(String fqn) throws ClassNotFoundException {
+        List<ConfigurerOption> answer = new ArrayList<>();
         // filter out duplicates by using a names set that has already added
         Set<String> names = new HashSet<>();
 
@@ -310,10 +310,10 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo
                     }
                 }
 
-                Option option = null;
+                ConfigurerOption option = null;
                 String t = Character.toUpperCase(m.getName().charAt(3)) + m.getName().substring(3 + 1);
                 if (names.add(t)) {
-                    option = new Option(t, type, getter);
+                    option = new ConfigurerOption(t, type, getter);
                     answer.add(option);
                 } else {
                     boolean replace = false;
@@ -325,7 +325,7 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo
                     }
                     if (replace) {
                         answer.removeIf(o -> o.getName().equals(t));
-                        option = new Option(t, type, getter);
+                        option = new ConfigurerOption(t, type, getter);
                         answer.add(option);
                     }
                 }
@@ -341,7 +341,8 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo
                         }
                         desc = desc.replace('$', '.');
                         desc = desc.trim();
-                        if (!desc.isEmpty()) {
+                        // skip if the type is generic or a wildcard
+                        if (!desc.isEmpty() && desc.indexOf('?') == -1 && !desc.contains(" extends ")) {
                             option.setNestedType(desc);
                         }
                     }
@@ -365,7 +366,7 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo
         return true;
     }
 
-    private void generateConfigurer(String fqn, String targetFqn, List<Option> options, File outputDir) throws IOException {
+    private void generateConfigurer(String fqn, String targetFqn, List<ConfigurerOption> options, File outputDir) throws IOException {
         int pos = targetFqn.lastIndexOf('.');
         String pn = targetFqn.substring(0, pos);
         String cn = targetFqn.substring(pos + 1) + "Configurer";
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
index f22f94e..e49f0d6 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
@@ -136,8 +136,8 @@ public final class PropertyConfigurerGenerator {
             }
             w.write("    }\n");
 
-            // nested type was stored in deprecation note as we use BaseOptionModel to hold the option data
-            boolean hasNestedTypes = options.stream().map(BaseOptionModel::getDeprecationNote).anyMatch(s -> s != null && !s.trim().isEmpty());
+            // nested type was stored in extra as we use BaseOptionModel to hold the option data
+            boolean hasNestedTypes = options.stream().map(BaseOptionModel::getExtra).anyMatch(s -> s != null && !s.trim().isEmpty());
             if (hasNestedTypes) {
                 w.write("\n");
                 w.write("    @Override\n");
@@ -145,7 +145,7 @@ public final class PropertyConfigurerGenerator {
                 if (!options.isEmpty()) {
                     w.write("        switch (ignoreCase ? name.toLowerCase() : name) {\n");
                     for (BaseOptionModel option : options) {
-                        String nestedType = option.getDeprecationNote();
+                        String nestedType = option.getExtra();
                         if (nestedType != null && !nestedType.isEmpty()) {
                             nestedType = nestedType.replace('$', '.');
                             if (!option.getName().toLowerCase().equals(option.getName())) {