在我的项目中,我使用 jersy 客户端调用 rest 服务。它的工作文件在本地。但不在服务器中工作。
在本地,我正在使用jdk1.7.0_10
在服务器中,我正在使用jdk1.7.0_80
本地运行时:雄猫 服务器运行时: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
为什么它在服务器中不起作用?
任何帮助将不胜感激!!!
因为你在评论中说
但是更好的策略是只使用应用程序服务器提供的依赖项,因为它已经存在并更改代码以适应该版本的库。
您只需要使用由两个接口定义所子装的方法。(J2EE6 和 J2EE7)
根据官方门卡文件 J2EE6 和 J2EE7 在接口定义中使用方法add(K键,V值)。因此,您应该使用 metod Add 来添加每个条目,而不是 addAll
希望这个帮助
当调用不存在的方法时会抛出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
指出它仅在2.0版本之后可用
这意味着您的开发已针对 API 版本 2.0 完成,但您部署的是使用实现 1.0 的服务器上。造成这种情况的可能原因是:
- 您的本地环境具有比服务器环境更新的应用程序服务器版本(可能是 GlassFish?)。
- 本地环境已将库添加到应用程序服务器,而这些库不在服务器环境中。
- 两种环境的有效类路径还有其他一些不同之处,例如在本地测试时部署但不在最终版本中部署的一些依赖项、环境变量的差异等。
检查哪个应用程序服务器在本地和服务器上使用(GlassFish,Websphere,JBoss...),在任一环境中使用哪些版本,它们捆绑了哪些JAX-RS API(和实现),以及哪些内容捆绑到您的部署归档中(可能是EAR文件)。