Skip to content

Commit 6af3280

Browse files
committed
Filter for client imports on class level only when discovering Endpoints quarkusio#50755
1 parent 5de5ea1 commit 6af3280

File tree

4 files changed

+190
-2
lines changed

4 files changed

+190
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package io.quarkus.reseasy.reactive;
2+
3+
import static io.restassured.RestAssured.given;
4+
5+
import jakarta.enterprise.context.Dependent;
6+
import jakarta.inject.Inject;
7+
import jakarta.ws.rs.GET;
8+
import jakarta.ws.rs.Path;
9+
import jakarta.ws.rs.Produces;
10+
import jakarta.ws.rs.core.MediaType;
11+
12+
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
13+
import org.junit.jupiter.api.Test;
14+
import org.junit.jupiter.api.extension.RegisterExtension;
15+
16+
import io.quarkus.test.QuarkusUnitTest;
17+
18+
public class ResteasyReactiveProcessorFilterClientsTest {
19+
20+
@RegisterExtension
21+
static final QuarkusUnitTest config = new QuarkusUnitTest()
22+
.withApplicationRoot(jar -> jar.addClasses(ResteasyReactiveProcessorFilterClientsTest.TestResource.class,
23+
ResteasyReactiveProcessorFilterClientsTest.TestSubResource.class));
24+
25+
@Path("test")
26+
public static class TestResource {
27+
28+
@Inject
29+
TestSubResource subResource;
30+
31+
@GET
32+
@Produces(MediaType.TEXT_PLAIN)
33+
public String test() {
34+
return "test";
35+
}
36+
37+
@Path("subresource")
38+
public TestSubResource subResource() {
39+
return subResource;
40+
}
41+
}
42+
43+
// should not happen that a subresource is also a rest client
44+
@Dependent
45+
@RegisterRestClient
46+
public static class TestSubResource {
47+
@GET
48+
public String hello() {
49+
return "test/subresource";
50+
}
51+
}
52+
53+
@Test
54+
public void testSimpleSubresource() {
55+
given().when().get("/test/subresource")
56+
.then()
57+
.statusCode(405);
58+
}
59+
60+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package io.quarkus.reseasy.reactive;
2+
3+
import static io.restassured.RestAssured.given;
4+
5+
import jakarta.enterprise.context.Dependent;
6+
import jakarta.inject.Inject;
7+
import jakarta.ws.rs.GET;
8+
import jakarta.ws.rs.Path;
9+
import jakarta.ws.rs.Produces;
10+
import jakarta.ws.rs.core.MediaType;
11+
12+
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
13+
import org.eclipse.microprofile.rest.client.inject.RestClient;
14+
import org.junit.jupiter.api.Test;
15+
import org.junit.jupiter.api.extension.RegisterExtension;
16+
17+
import io.quarkus.test.QuarkusUnitTest;
18+
19+
public class ResteasyReactiveProcessorNoClientFilterTest {
20+
21+
@RegisterExtension
22+
static final QuarkusUnitTest config = new QuarkusUnitTest()
23+
.withApplicationRoot(jar -> jar.addClasses(ResteasyReactiveProcessorNoClientFilterTest.TestResource.class,
24+
ResteasyReactiveProcessorNoClientFilterTest.TestSubResource.class));
25+
26+
@Path("test")
27+
public static class TestResource {
28+
29+
@Inject
30+
TestSubResource subResource;
31+
32+
@GET
33+
@Produces(MediaType.TEXT_PLAIN)
34+
public String test() {
35+
return "test";
36+
}
37+
38+
@Path("subresource")
39+
public TestSubResource subResource() {
40+
return subResource;
41+
}
42+
}
43+
44+
@Dependent
45+
public static class TestSubResource {
46+
47+
@RestClient
48+
TestClient client;
49+
50+
@GET
51+
public String hello() {
52+
return "test/subresource";
53+
}
54+
}
55+
56+
@RegisterRestClient(baseUri = "test")
57+
public interface TestClient {
58+
@GET
59+
String hello();
60+
}
61+
62+
@Test
63+
public void testSimpleSubresourceWithNoClientImportsOnClassLevel() {
64+
given().when().get("/test/subresource")
65+
.then()
66+
.statusCode(200);
67+
}
68+
69+
}

extensions/resteasy-reactive/rest/deployment/src/main/java/io/quarkus/resteasy/reactive/server/deployment/ResteasyReactiveProcessor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,7 @@ public boolean test(AnnotationInstance ann) {
767767
ClassInfo classInfo = method.declaringClass();
768768

769769
// Reject known client interfaces (See predicate above)
770-
if (classInfo.annotations().stream().anyMatch(knownClientAnnotation)
770+
if (classInfo.asClass().declaredAnnotations().stream().anyMatch(knownClientAnnotation)
771771
|| method.annotations().stream().anyMatch(knownClientAnnotation)
772772
|| method.parameters().stream().flatMap(p -> p.annotations().stream())
773773
.anyMatch(knownClientAnnotation)) {
@@ -786,7 +786,7 @@ public boolean test(AnnotationInstance ann) {
786786
ClassInfo classInfo = method.declaringClass();
787787

788788
// Reject known client interfaces (See predicate above)
789-
if (classInfo.annotations().stream().anyMatch(knownClientAnnotation)
789+
if (classInfo.asClass().declaredAnnotations().stream().anyMatch(knownClientAnnotation)
790790
|| method.annotations().stream().anyMatch(knownClientAnnotation)
791791
|| method.parameters().stream().flatMap(p -> p.annotations().stream())
792792
.anyMatch(knownClientAnnotation)) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package io.quarkus.resteasy.reactive.server.test;
2+
3+
import static io.restassured.RestAssured.given;
4+
5+
import jakarta.enterprise.context.Dependent;
6+
import jakarta.inject.Inject;
7+
import jakarta.ws.rs.GET;
8+
import jakarta.ws.rs.Path;
9+
import jakarta.ws.rs.Produces;
10+
import jakarta.ws.rs.core.MediaType;
11+
12+
import org.hamcrest.Matchers;
13+
import org.junit.jupiter.api.Test;
14+
import org.junit.jupiter.api.extension.RegisterExtension;
15+
16+
import io.quarkus.test.QuarkusUnitTest;
17+
18+
public class ResteasyReactiveProcessorTest {
19+
20+
@RegisterExtension
21+
static final QuarkusUnitTest config = new QuarkusUnitTest()
22+
.withApplicationRoot(jar -> jar.addClasses(ResteasyReactiveProcessorTest.TestResource.class,
23+
ResteasyReactiveProcessorTest.TestSubResource.class));
24+
25+
@Path("test")
26+
public static class TestResource {
27+
28+
@Inject
29+
TestSubResource subResource;
30+
31+
@GET
32+
@Produces(MediaType.TEXT_PLAIN)
33+
public String test() {
34+
return "test";
35+
}
36+
37+
@Path("subresource")
38+
public TestSubResource subResource() {
39+
return subResource;
40+
}
41+
}
42+
43+
@Dependent
44+
public static class TestSubResource {
45+
@GET
46+
public String hello() {
47+
return "test/subresource";
48+
}
49+
}
50+
51+
@Test
52+
public void testSimpleSubresource() {
53+
given().when().get("/test/subresource")
54+
.then()
55+
.statusCode(200)
56+
.body(Matchers.equalTo("test/subresource"));
57+
}
58+
59+
}

0 commit comments

Comments
 (0)