-
Bug
-
Resolution: Not a Bug
-
Major
-
None
-
3.12.1.Final, 4.6.0.Final
-
None
-
Undefined
Situation
For the whole example refer to Main.java.
I am trying to create a client for the following interface.
@Path("/hello/{name}") public interface MyInterface { @Path("/") @GET String hello(@PathParam("name") String name); void foobar(); }
Note that the seconcond method does not have any JAX-RS annotations present.
First attempt: Using RestEasy client directly
The following statement does not throw any exception.
((ResteasyWebTarget) ClientBuilder.newBuilder().build() .target("https://example.com")) .proxy(MyInterface.class);
It results in a correct proxy client which can be used to access the annotated method (#hello).
Second attempt: Using Microprofile RestClientBuilder
The following code fails due to an error while verify the interface.
RestClientBuilder.newBuilder() .baseUrl(new URL("https://example.com")) .build(MyInterface.class);
Stacktrace:
Exception in thread "main" org.eclipse.microprofile.rest.client.RestClientDefinitionException: Parameters and variables don't match on interface Main$MyInterface::foobar at org.jboss.resteasy.microprofile.client.RestClientBuilderImpl.verifyInterface(RestClientBuilderImpl.java:551) at org.jboss.resteasy.microprofile.client.RestClientBuilderImpl.build(RestClientBuilderImpl.java:218) at Main.main(Main.java:22)
I would expect that the second code also might generate a usable proxy.
Cause
The org.jboss.resteasy.microprofile.client.RestClientBuilderImpl#verifyInterface method does not distinguish between interface methods annotated with JAX-RS annotations and plain method declarations.