java.lang.NoSuchMethodError:javax.ws.rs.core.MultivaluedMap.addAll(Ljava/lang/Object;[Ljava/lang/Object;)V

java.lang.NoSuchMethodError:javax.ws.rs.core.MultivaluedMap.addAll(Ljava/lang/Object;[Ljava/lang/Object;)V,java,web-services,rest,jar,Java,Web Services,Rest,Jar,在我的项目中,我使用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-

在我的项目中,我使用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
是JavaEEAPI的一部分(更具体地说是JAX-RSAPI的一部分)

请注意它如何声明该类自1.0版起就可用,这意味着它自JAX-RS 1.0版起就存在

另一方面,方法
addAll
声明了它

这意味着您的开发是针对API的2.0版本进行的,但您部署在使用实施1.0的服务器上。可能的原因是:

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

检查本地和服务器上使用的应用程序服务器(GlassFish、Websphere、JBoss…),在任一环境中使用的版本以及它们绑定的JAX-RS API(和实现),以及绑定到部署归档文件(可能是EAR文件)中的内容。

因为您在评论中说

但更好的策略是只使用应用程序服务器提供的依赖项,因为它已经存在,并更改代码以适应该版本的库

您只需要使用一个由两个接口定义(j2ee6和j2ee7)组成的方法

根据官方的doorcale文件 和 让方法add(K键,V值)在接口定义中。因此,您应该使用metodadd来添加每个条目,而不是addAll


希望这有帮助

应用程序服务器在本地和服务器之间有什么区别吗?您的应用程序可能嵌入了一个JAX-RS依赖项,而您的服务器也有这个依赖项,但版本不同。然后,当服务器启动时,它倾向于使用自己的依赖项而不是应用程序提供的依赖项。只有jdk版本没有其他区别只有嫁妆@Roberto@LucianovanderVeekens,是否有任何方法可以告诉服务器使用jar而不是它自己的依赖项。@Madhesh是的,但配置当然取决于服务器。但更好的策略是只使用应用程序服务器提供的依赖项,因为它已经存在,并更改代码以适应该版本库的sion。如果您确定将在支持API的应用程序服务器上部署,并且不会出现版本冲突,则使用较新版本的API没有问题。如果使用Maven且未设置正确的范围(
提供的
),则很容易发生此问题对于服务器已经提供的依赖项。我同意,但您还需要小心使用application classloader,因为它不必首先设置在父级上,并且,根据AS,您可能会遇到一些与已认可库兼容的问题。