Repository: quarkusio/quarkus
Issue: BeanParam extending another class fails in RESTClient

### Describe the bug

When a @BeanParam is used in a RESTClient and it extends another class it fails with the path param property not found.

```
Bad Request - Path parameter not provided client
```

If the class doe not extend another class or the properties are replicated in the extended class it will work fine.

[beanparam.zip](https://github.com/quarkusio/quarkus/files/7613800/beanparam.zip)

### Expected behavior

Classes can extend other classes and be used as @BeanParams.

### Actual behavior

When the class extends another class it fails on the parents "properties" with "property not provided"

Non REST clients work find using the BeanParam if it extends another class.

Tried:
- Public fields
- Getters/Setters
- Different Lombok annotations

The only thing that worked was to "replicate" the properties in each of the classes.


### How to Reproduce?

Reproducer attached - running the tests demonstrate the issue.

There are two classes (`BaseParam` and `MethodParams`).  You will get the below exception:

```
java.lang.IllegalArgumentException: Path parameter not provided base
```

Prior to modifying the old reproducer (for RESTClient does not support BeanParams), and without extending another class, the test passed.

### Output of `java -version`

JDK 17

### Quarkus version or git rev

2.5.0.Final

### Build tool (ie. output of `mvnw --version` or `gradlew --version`)

Maven 3.8.4 (with Lombok)

### Additional information

I am still investigating this as well.  Something is odd that I cannot pinpoint yet.  I have other classes, used as @BeanParam that extend other classes, and they _work as expected_.

Changed files:
extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/beanparam/BeanPathParamTest.java
independent-projects/resteasy-reactive/client/processor/src/main/java/org/jboss/resteasy/reactive/client/processor/beanparam/BeanParamParser.java

diff --git a/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/beanparam/BeanPathParamTest.java b/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/beanparam/BeanPathParamTest.java
index 1c05c09c7ac..54503b61b19 100644
--- a/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/beanparam/BeanPathParamTest.java
+++ b/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/beanparam/BeanPathParamTest.java
@@ -35,6 +35,13 @@ void shouldPassPathParamFromBeanParamAndMethod() {
         assertThat(client.getWithBeanParam("foo", new MyBeanParam("123"))).isEqualTo("it works with method too!");
     }
 
+    @Test
+    void shouldResolvePathParamsWhenBeanParamClassExtendsAnother() {
+        Client client = RestClientBuilder.newBuilder().baseUri(baseUri).build(Client.class);
+        assertThat(client.getWithBeanParamInheritance(new MyChildBeanParam("child", "123"))).isEqualTo(
+                "it works with inheritance too!");
+    }
+
     @Path("/my/{id}/resource")
     public interface Client {
         @GET
@@ -43,6 +50,10 @@ public interface Client {
         @GET
         @Path("/{name}")
         String getWithBeanParam(@PathParam("name") String name, @BeanParam MyBeanParam beanParam);
+
+        @GET
+        @Path("/item/{base}")
+        String getWithBeanParamInheritance(@BeanParam MyChildBeanParam beanParam);
     }
 
     public static class MyBeanParam {
@@ -58,6 +69,40 @@ public String getId() {
         }
     }
 
+    public static class MyChildBeanParam extends MyBeanParam {
+        private final String base;
+
+        public MyChildBeanParam(String base, String id) {
+            super(id);
+            this.base = base;
+        }
+
+        @PathParam("base")
+        public String getBase() {
+            return base;
+        }
+    }
+
+    public static class TestMyChildBeanParam {
+        private final String id;
+        private final String base;
+
+        public TestMyChildBeanParam(String base, String id) {
+            this.id = id;
+            this.base = base;
+        }
+
+        @PathParam("id")
+        public String getId() {
+            return id;
+        }
+
+        @PathParam("base")
+        public String getBase() {
+            return base;
+        }
+    }
+
     @Path("/my/123/resource")
     public static class Resource {
         @GET
@@ -70,5 +115,11 @@ public String get() {
         public String getWithLongerPath() {
             return "it works with method too!";
         }
+
+        @Path("/item/child")
+        @GET
+        public String getWithInheritance() {
+            return "it works with inheritance too!";
+        }
     }
 }
diff --git a/independent-projects/resteasy-reactive/client/processor/src/main/java/org/jboss/resteasy/reactive/client/processor/beanparam/BeanParamParser.java b/independent-projects/resteasy-reactive/client/processor/src/main/java/org/jboss/resteasy/reactive/client/processor/beanparam/BeanParamParser.java
index a6e66a234eb..a09a7d7e12a 100644
--- a/independent-projects/resteasy-reactive/client/processor/src/main/java/org/jboss/resteasy/reactive/client/processor/beanparam/BeanParamParser.java
+++ b/independent-projects/resteasy-reactive/client/processor/src/main/java/org/jboss/resteasy/reactive/client/processor/beanparam/BeanParamParser.java
@@ -17,10 +17,18 @@
 import org.jboss.jandex.IndexView;
 import org.jboss.jandex.MethodInfo;
 import org.jboss.jandex.Type;
+import org.jboss.resteasy.reactive.common.processor.JandexUtil;
 
 public class BeanParamParser {
+
     public static List<Item> parse(ClassInfo beanParamClass, IndexView index) {
         List<Item> resultList = new ArrayList<>();
+
+        // Parse class tree recursively
+        if (!JandexUtil.DOTNAME_OBJECT.equals(beanParamClass.superName())) {
+            resultList.addAll(parse(index.getClassByName(beanParamClass.superName()), index));
+        }
+
         Map<DotName, List<AnnotationInstance>> annotations = beanParamClass.annotations();
         List<AnnotationInstance> queryParams = annotations.get(QUERY_PARAM);
         if (queryParams != null) {