Repository: quarkusio/quarkus
Issue: Cannot serialise field parent on object ... as setter and getters were different types

## Env
Quarkus Version 1.13.2 on openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment 18.9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.11+9, mixed mode, sharing)


## Describe the bug

```
[ERROR] testKameletWithProperties  Time elapsed: 0.009 s  <<< ERROR!
java.lang.RuntimeException: 
java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkus.deployment.steps.MainClassBuildStep#build threw an exception: java.lang.RuntimeException: Failed to record call to method public io.quarkus.runtime.RuntimeValue org.apache.camel.quarkus.component.kamelet.KameletRecorder.createTemplateLoaderCustomizer(java.util.List)
        at io.quarkus.deployment.recording.BytecodeRecorderImpl.writeBytecode(BytecodeRecorderImpl.java:452)
        at io.quarkus.deployment.steps.MainClassBuildStep.writeRecordedBytecode(MainClassBuildStep.java:438)
        at io.quarkus.deployment.steps.MainClassBuildStep.build(MainClassBuildStep.java:170)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:920)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2415)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
        at java.base/java.lang.Thread.run(Thread.java:829)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: Cannot serialise field parent on object SetBody[exchangeProperty{CamelTimerCounter}] as setter and getters were different types
        at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadComplexObject(BytecodeRecorderImpl.java:1371)
        at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadObjectInstanceImpl(BytecodeRecorderImpl.java:956)
        at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadObjectInstance(BytecodeRecorderImpl.java:548)
        at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadComplexObject(BytecodeRecorderImpl.java:1114)
        at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadObjectInstanceImpl(BytecodeRecorderImpl.java:956)
        at io.quarkus.deployment.recording.BytecodeRecorderImpl.loadObjectInstance(BytecodeRecorderImpl.java:548)
        at io.quarkus.deployment.recording.BytecodeRecorderImpl.writeBytecode(BytecodeRecorderImpl.java:447)
        ... 12 more

````


## To Reproduce
1. clone https://github.com/lburgazzoli/apache-camel-quarkus/tree/kamelets
2. build the project `mvn install -Pquickly`
3. run the integrtion tests in `integration-tests/kamelet`





Changed files:
core/deployment/src/main/java/io/quarkus/deployment/recording/PropertyUtils.java

diff --git a/core/deployment/src/main/java/io/quarkus/deployment/recording/PropertyUtils.java b/core/deployment/src/main/java/io/quarkus/deployment/recording/PropertyUtils.java
index 0d23928a7f0..835c7aff70a 100644
--- a/core/deployment/src/main/java/io/quarkus/deployment/recording/PropertyUtils.java
+++ b/core/deployment/src/main/java/io/quarkus/deployment/recording/PropertyUtils.java
@@ -28,7 +28,12 @@ public Property[] apply(Class<?> type) {
                 if (i.getName().startsWith("get") && i.getName().length() > 3 && i.getParameterCount() == 0
                         && i.getReturnType() != void.class) {
                     String name = Character.toLowerCase(i.getName().charAt(3)) + i.getName().substring(4);
-                    getters.put(name, i);
+                    Method existingGetter = getters.get(name);
+                    // In some cases the overridden methods from supertypes can also appear in the array (for some reason).
+                    // We want the most specific methods.
+                    if (existingGetter == null || existingGetter.getReturnType().isAssignableFrom(i.getReturnType())) {
+                        getters.put(name, i);
+                    }
                 } else if (i.getName().startsWith("is") && i.getName().length() > 3 && i.getParameterCount() == 0
                         && i.getReturnType() == boolean.class) {
                     String name = Character.toLowerCase(i.getName().charAt(2)) + i.getName().substring(3);