在我的项目中,我使用jersy client调用rest服务。它的工作文件在本地,但不在服务器中工作。

在本地,我正在使用jdk1.7.0_10
在服务器中,我正在使用jdk1.7.0_80

本地运行时:Tomcat
服务器运行时:JBOSS

Libraries:
jersey-bean-validation-2.22.jar
jersey-client-2.22.jar
jersey-common-2.22.jar
jersey-entity-filtering-2.22.jar
jersey-guava-2.7.jar
jersey-media-moxy-2.22.jar
javax.annotation-api-1.2.jar
javax.inject-1.jar
javax.ws.rs-api-2.0.1.jar
jaxrpc.jar


为什么它不能在服务器上工作?

任何帮助将不胜感激!!!!

最佳答案

调用不存在的方法时,抛出java.lang.NoSuchMethodError。当使用某个版本的接口开发应用程序代码,而将其部署在具有较旧版本的接口的环境中却没有较新版本的某些方法时,通常会发生这种情况。

MultivaluedMap是Java EE API的一部分(更具体地说,它是JAX-RS API的一部分)。在此处检查文档:https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/MultivaluedMap.html

请注意,它声明该类自1.0版以来一直可用,这意味着自JAX-RS 1.0版以来该类已经存在。

另一方面,方法addAll将其声明为has only been available since version 2.0

这意味着您已经针对API 2.0版完成了开发,但是您正在将其部署在使用实现1.0的服务器上。可能的原因是:


您的本地环境比服务器环境具有更高版本的应用程序服务器(也许是GlassFish?)。
本地环境已将不在服务器环境中的库添加到应用程序服务器。
两种环境的有效类路径还有其他不同的方式,例如在本地测试时部署的某些依赖项,而不是在最终版本中部署的依赖项,环境变量的差异等。


检查在本地和服务器上使用了哪个应用程序服务器(GlassFish,Websphere,JBoss ...),在任何环境中使用了哪些版本,捆绑了哪些JAX-RS API(和实现),以及捆绑了哪些内容到您的部署档案中(可能是EAR文件)。

关于java - java.lang.NoSuchMethodError:javax.ws.rs.core.MultivaluedMap.addAll(Ljava/lang/Object; [Ljava/lang/Object;)V,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44069519/

10-15 11:16