0

我有以下 javax rs 注释接口:

@Path("/")
public interface MyRestEndpoint {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("myapp/resources/resourceId/{resourceId}/memberId/{memberId}")
    MyResource findMyResource(@PathParam("resourceId") int resourceId,
                                                  @PathParam("memberId") long memberId);

我通过这样创建的球衣代理客户端调用它:

MyRestEndpoint myRestEndpointForTests = WebResourceFactory.newResource(MyRestEndpoint.class, lobbyClient().target(myHost));

...
myRestEndpointForTests.findMyResource(resourceId, memberId);

但是当我这样做时,我得到以下异常:

java.lang.IllegalStateException: Unresolved variables; only 0 value(s) given for 2 unique variable(s)
        at org.glassfish.jersey.client.JerseyWebTarget.getUri(JerseyWebTarget.java:134)
        at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:214)
        at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:59)
        at org.glassfish.jersey.client.proxy.WebResourceFactory.invoke(WebResourceFactory.java:312)
        at com.sun.proxy.$Proxy89.findCurrentTableOfPlayer(Unknown Source)

通过 Jersey 代码库进行了一些调试后,似乎 WebResourceFactory 正在尝试通过循环 MyRestEndpoint 类上的注释来创建 WebTarget。它拾取两个注释和两个提供的值,但似乎覆盖了任何先前解析的路径参数,因为它在它们上循环(所以它的左边只有 memberId 路径参数被解析)。谁能解释为什么?这是错误还是预期行为?如何支持多个路径参数?

我知道这是特定于通过注释配置多个路径参数的。因为我在带注释的接口中有其他方法,它们只有一个路径参数,并且在以相同方式调用时可以正常工作。

我正在使用 Jersey v2.16 组件和 Javax rs v2.0.1 组件

4

1 回答 1

0

看起来 WebResourceFactory 没有积极开发,它的源代码对我来说也很难理解。

所以我们创建了另一个代理休息接口的实现。

随意尝试https://github.com/adaptris/jaxrs-client-proxy实现。它目前正在开发中,所以肯定有一些错误。

于 2016-03-24T10:27:10.310 回答