Skip to content

Commit 330049e

Browse files
authored
Merge pull request quarkusio#47909 from geoand/quarkusio#47821
Make bean param work properly with subresource in REST Client
2 parents 360d5c8 + 410520b commit 330049e

File tree

2 files changed

+77
-1
lines changed
  • extensions/resteasy-reactive/rest-client/deployment/src/test/java/io/quarkus/rest/client/reactive/subresource
  • independent-projects/resteasy-reactive/client/processor/src/main/java/org/jboss/resteasy/reactive/client/processor/scanning

2 files changed

+77
-1
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package io.quarkus.rest.client.reactive.subresource;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.net.URI;
6+
7+
import jakarta.ws.rs.BeanParam;
8+
import jakarta.ws.rs.GET;
9+
import jakarta.ws.rs.Path;
10+
import jakarta.ws.rs.QueryParam;
11+
12+
import org.jboss.resteasy.reactive.RestQuery;
13+
import org.junit.jupiter.api.Test;
14+
import org.junit.jupiter.api.extension.RegisterExtension;
15+
16+
import io.quarkus.rest.client.reactive.QuarkusRestClientBuilder;
17+
import io.quarkus.test.QuarkusUnitTest;
18+
import io.quarkus.test.common.http.TestHTTPResource;
19+
20+
public class SubResourceAndBeanParamTest {
21+
22+
@RegisterExtension
23+
static final QuarkusUnitTest TEST = new QuarkusUnitTest()
24+
.withApplicationRoot((jar) -> jar
25+
.addClasses(TestClient.class, SubClient.class, TestBean.class, Exception.class, Resource.class));
26+
27+
@TestHTTPResource
28+
URI baseUri;
29+
30+
@Test
31+
public void test() {
32+
TestClient testClient = QuarkusRestClientBuilder.newBuilder().baseUri(baseUri).build(TestClient.class);
33+
assertThat(testClient.subResource(new TestBean("io.quarkus:quarkus-rest")).getExtensionById()).isEqualTo("foo");
34+
}
35+
36+
@Path("/api/extensions")
37+
public static class Resource {
38+
39+
@GET
40+
public String getExtensions(@RestQuery String id) {
41+
return "foo";
42+
}
43+
}
44+
45+
public interface TestClient {
46+
47+
@Path("/api/extensions")
48+
SubClient subResource(@BeanParam TestBean bean);
49+
}
50+
51+
public interface SubClient {
52+
53+
@GET
54+
String getExtensionById();
55+
}
56+
57+
public static class TestBean {
58+
59+
@QueryParam("id")
60+
public final String extensionName;
61+
62+
public TestBean(String extensionName) {
63+
this.extensionName = extensionName;
64+
}
65+
}
66+
67+
}

independent-projects/resteasy-reactive/client/processor/src/main/java/org/jboss/resteasy/reactive/client/processor/scanning/ClientEndpointIndexer.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,16 @@ protected ResourceMethod createResourceMethod(MethodInfo info, ClassInfo actualE
128128
protected boolean handleBeanParam(ClassInfo actualEndpointInfo, Type paramType, MethodParameter[] methodParameters, int i,
129129
Set<String> fileFormNames) {
130130
ClassInfo beanParamClassInfo = index.getClassByName(paramType.name());
131-
methodParameters[i] = parseClientBeanParam(beanParamClassInfo, index);
131+
if (methodParameters[i] != null) {
132+
// TODO: we might want to make this smarter
133+
List<Item> items = BeanParamParser.parse(beanParamClassInfo, index);
134+
ClientBeanParamInfo clientBeanParamInfo = new ClientBeanParamInfo(items, beanParamClassInfo.name().toString());
135+
clientBeanParamInfo.setDeclaredType(methodParameters[i].getDeclaredType());
136+
methodParameters[i] = clientBeanParamInfo;
137+
138+
} else {
139+
methodParameters[i] = parseClientBeanParam(beanParamClassInfo, index);
140+
}
132141

133142
return false;
134143
}

0 commit comments

Comments
 (0)