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 パスパラメーターのみが解決されます)。誰でも理由を説明できますか?これはバグですか、それとも予想される動作ですか? 複数のパス パラメータをサポートするにはどうすればよいですか?

これは、注釈を介して構成された複数のパスパラメーターを持つことに固有のものであることを知っています。注釈付きインターフェイスには、パスパラメーターが 1 つしかなく、同じ方法で呼び出されたときに完全に機能する他のメソッドがあるためです。

Jersey v2.16 コンポーネントと Javax rs v2.0.1 コンポーネントを使用しています

4

1 に答える 1