JavaRESTfullWebService:Jersey 2.3.1库的JAX-RS实现
我正试图在JBoss JBoss-eap-6.1 AS上运行一个简单的“Hallo World”应用程序Jersey 2.3.1 REST服务。在web.xml中,我禁用了restEasy库。在部署过程中,我收到错误信息: JBWEB000289:Servlet com.sun.jersey.samples.helloworld.resources.MyApplication抛出的负载() 异常:java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map 在POM中,我放置了以下依赖项:JavaRESTfullWebService:Jersey 2.3.1库的JAX-RS实现,java,jersey,jax-rs,jboss6.x,Java,Jersey,Jax Rs,Jboss6.x,我正试图在JBoss JBoss-eap-6.1 AS上运行一个简单的“Hallo World”应用程序Jersey 2.3.1 REST服务。在web.xml中,我禁用了restEasy库。在部署过程中,我收到错误信息: JBWEB000289:Servlet com.sun.jersey.samples.helloworld.resources.MyApplication抛出的负载() 异常:java.lang.NoSuchMethodError: javax.ws.rs.core.Appl
org.glassfish.jersey.core
泽西服务器
2.3.1
org.glassfish.jersey.containers
jersey容器servlet核心
2.3.1
javax.ws.rs
javax.ws.rs-api
2
这是禁用restEasy标记的my web.xml:
com.sun.jersey.samples.helloworld.resources.MyApplication
org.glassfish.jersey.servlet.ServletContainer
javax.ws.rs.Application
com.sun.jersey.samples.helloworld.resources.MyApplication
1.
轻松扫描
假的
resteasy.scan.providers
假的
resteasy.scan.resources
假的
com.sun.jersey.samples.helloworld.resources.MyApplication
/*
和我的资源配置java类:
package com.sun.jersey.samples.helloworld.resources;
import org.glassfish.jersey.server.ResourceConfig;
public class MyApplication extends ResourceConfig {
public MyApplication() {
packages("com.sun.jersey.samples.helloworld.resources");
//super(HelloWorldResource.class);
}
}
有人有办法解决吗?
提前感谢,,
Roberto
NoSuchMethodError
通常意味着类路径上有两个不同版本的类。由于javax.ws.rs.core.Application
类在其JAX-RS2版本中确实有getProperties()
方法,但在JAX-RS1.x中没有,我猜您可能是在某种程度上将旧的1.x Jersey(或旧的RESTAPI)与当前的(2.3.1)Jersey结合起来了
另外,您正在使用的软件包(com.sun.jersey
“旧”jersey软件包)有点指向这个方向(尽管仅仅将代码放入该软件包本身并不会导致上述问题),您显然是从jersey 1.x示例开始的(jersey 2中也有示例,请参阅jersey GitHub上的)
restEasy(也肯定包含javax.ws.rs.core.Application
类)是否可能没有完全关闭并且默认为JAX-RS1.x版本
我将首先检查您的pom文件,查看有效的pom(如果您的项目描述符有一些父级),并仔细检查类路径上的内容-我相信在某个地方有一个1.x版本的javax.ws.rsAPI
。还要尝试清理所有已编译的内容并从头开始重建
说到依赖项,如果您的列表是详尽的(关于Jersey),您很可能必须添加Jersey common
(2.3.1)依赖项,就像初始化期间一样,ResourceConfig.packages()
方法调用PackageScanner
构造函数,它包含对ReflectionHelper
的调用,并且不再是服务器jar的一部分
希望这有帮助。刚刚在JBoss EAP 6.1.1-Jersey 2.3.1上实现了这一点 通常的事情本身似乎不起作用/不够:
- 在standalone.xml/domain.xml中禁用jaxrs子系统
- 或者,不包括jboss-deployment-structure.xml中的jax rs模块
<module xmlns="urn:jboss:module:1.1" name="javax.ws.rs.api">
<resources>
<!-- Disable the next line -->
<!-- resource-root path="jboss-jaxrs-api_1.1_spec-1.0.1.Final-redhat-2.jar"/ -->
<!-- Insert resources here -->
</resources>
<dependencies>
<module name="org.jboss.resteasy.resteasy-jaxrs" services="export"/>
</dependencies>
</module>
请注意,这将为所有其他应用程序禁用JBoss(RestEasy)的jax rs实现(以及在standalone/domain.xml中禁用jaxrs子系统)。我最近也遇到了同样的问题。我想和你分享我的脚步。正如其他答案所述,问题主要是因为在类路径上有相同类的两个不同版本。因此,在pom中添加maven依赖项时要小心 这类问题通常称为Jar Hell。您可以使用API来调查类之间的重叠。以下是我遵循的简单步骤 将jhades依赖项添加到您的pom中。
<dependency>
<groupId>org.jhades</groupId>
<artifactId>jhades</artifactId>
<version>1.0.4</version>
</dependency>
删除pom中的一个重叠maven依赖项。
<dependency>
<groupId>org.jhades</groupId>
<artifactId>jhades</artifactId>
<version>1.0.4</version>
</dependency>
您还可以使用另一种方法,如maven的方法
资料来源:
希望这将帮助某人:)这是一个泽西版本冲突问题。我也有同样的问题。以下是解决问题的方法:
删除此依赖项解决了我的问题。您好,感谢您的关注,我尝试按照您的建议添加maven dependency jersey common(2.3.1),此外,我还尝试禁用RESTeasy删除了以下行:在任意一个配置文件:/standalone/configuration/standalone.xml和/domain/configuration/domain.xml中,但没有任何更改…可能正如您所建议的,jboss不会关闭RESTeasy…对于那些使用
com.sun.jersey
遇到问题的人,查看jersey 2.x软件包的org.glassfish.jersey
。如果使用gradle,您可以进入以下部分:configurations.all{resolutionStrategy.dependencySubstitution{//这解决了同一组实现(不同版本的)的类使用不同gradle软件包名称的问题JSR-311.用模块('javax.ws.rs:javax.ws.rs:javax.ws.rsapi:2.0.1')}替换模块('javax.ws.rs:jsr311api')}这解决了我的问题。在我的例子中,路径与module.xml几乎没有什么不同。它是w