JavaRESTfullWebService:Jersey 2.3.1库的JAX-RS实现

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

我正试图在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中,我放置了以下依赖项:


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.xml来完全禁用jax rs 1.1 API的加载 jboss-eap-6.1/modules/system/layers/base/javax/ws/rs/api/main/module.xml如下:

<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的方法

资料来源:


希望这将帮助某人:)

这是一个泽西版本冲突问题。我也有同样的问题。以下是解决问题的方法:

  • 查看您的包依赖项“mvn依赖项:树”

  • 如果存在依赖于旧Jersey版本的库依赖项,则可以在pom.xml中该库的依赖项标记中添加排除部分

  • 使用mvn dependency:tree(感谢上面的建议),我能够确定罪魁祸首(在我的例子中)是:javax.ws.rs:JSR311API:1.1
    删除此依赖项解决了我的问题。

    您好,感谢您的关注,我尝试按照您的建议添加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