我有以下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组件
答案 0 :(得分:0)
看起来WebResourceFactory没有积极开发,它的源代码对我来说很难理解。
因此我们创建了代理休息接口的另一种实现。
随意尝试https://github.com/adaptris/jaxrs-client-proxy实施。它目前正在开发中,所以肯定会有一些错误。