在以下调用期间引发异常
Response response = client().target(rpTarget())
.path(clusterPath())
.queryParam("api-version", csmv2ApiVersion())
.request(MediaType.APPLICATION_JSON)
.get();
异常的完整堆栈是
java.lang.NoSuchMethodError: javax.ws.rs.core.MultivaluedMap.addAll(Ljava/lang/Object;[Ljava/lang/Object;)V
at org.glassfish.jersey.client.ClientRequest.accept(ClientRequest.java:335)
at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:221)
at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:59)
...
我使用“mvn package”构建我的应用程序 jar,构建输出如下
[INFO] Including javax.ws.rs:javax.ws.rs-api:jar:2.0.1 in the shaded jar.
[INFO] Including org.glassfish.jersey.core:jersey-common:jar:2.19 in the shaded jar.
我似乎使用的是最新版本的javax.ws.rs-api.jar
似乎包含 MultivaluedMap.addAll
的定义方法,但我仍然不断收到此异常。
你能告诉我我缺少什么吗?
最佳答案
看起来您在编译时和运行时可能有不同版本的 MultivaluedMap。因此,当使用 Maven 时,您可以针对特定版本的库进行编译,不会出现错误,但根据编译方式,您实际上可能在运行时使用不同的版本(例如,内置于服务器中的版本),而该版本没有此方法,导致异常。检查您的服务器使用的版本,看看该版本与您在 pom.xml 中指定的版本之间是否存在差异。还要检查该依赖项的范围属性,我认为默认是“compile”,它实际上会将库编译到您的 jar 文件中,“provided”不会编译库并期望通过其他方式提供它。
这里需要注意的重要一点是,编译时使用的库版本不一定与运行时使用的版本相同。如果您可以确保服务器上的版本是您想要的版本,而不是拥有两个不同的版本,那么事情会变得更容易。
参见第 2.3 节 here ,它包含有关 glassfish 所需的 javax.ws.rs maven 依赖项的一些信息。
关于java - 在 javax.ws.rs.core.MultivaluedMap.addAll 处获取 java.lang.NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34351347/