Jersey客户端代理不解析具有多个路径参数的URI的调用

时间:2015-04-07 16:59:48

标签: java proxy jersey jersey-client path-parameter

我有以下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组件

1 个答案:

答案 0 :(得分:0)

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

因此我们创建了代理休息接口的另一种实现。

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