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

时间:2017-05-19 11:57:22

标签: java web-services rest jar

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

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

Local RunTime: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

为什么它不能在服务器上运行?

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

2 个答案:

答案 0 :(得分:0)

调用不存在的方法时抛出

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文件)。

答案 1 :(得分:0)

因为你在评论中说了

  

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

您只需使用由两个接口定义提供的方法。 (j2ee6和j2ee7)

根据官方门户文件 j2ee6j2ee7 在接口定义中添加方法add(K key,V value)。因此,您应该使用metod Add来添加每个单独的条目

,而不是addAll

希望这个帮助