当前位置: 首页 > 面试题库 >

Java RestFull Web服务:带有Jersey 2.3.1库的JAX-RS实现

韦德厚
2023-03-14
问题内容

我正在尝试在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抛出load()异常:java.lang.NoSuchMethodError:javax.ws.rs.core.Application.getProperties()Ljava
/ util / Map;

在POM中,我将这些依赖项放入:

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet-core</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0</version>
</dependency>

这是我的web.xml,其中的restEasy标签被禁用:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>com.sun.jersey.samples.helloworld.resources.MyApplication</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.sun.jersey.samples.helloworld.resources.MyApplication</param-value>
        </init-param>
           <load-on-startup>1</load-on-startup>
    </servlet>
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.providers</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.resources</param-name>
        <param-value>false</param-value>
    </context-param>
    <servlet-mapping>
        <servlet-name>com.sun.jersey.samples.helloworld.resources.MyApplication</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

而我的资源配置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该类确实getProperties()在其JAX-
RS 2版本中具有该方法,但在JAX-RS 1.x中没有,因此我想您会以某种方式将旧的1.x Jersey(或旧的REST
api)与当前版本(2.3)结合使用.1)一。

同样,您正在使用的程序包(com.sun.jersey-“旧”
Jersey程序包)也朝着这个方向发展(尽管仅将代码放入该程序包本身不会引起上述问题),显然,您从Jersey 1.x示例开始一个基础(在Jersey
2中也有示例,请参见Jersey GitHub上的helloworld-
webapp)。

是否有可能restEasy(也肯定包含javax.ws.rs.core.Application该类)没有完全关闭,并且以某种方式默认为JAX-RS
1.x版本?

我将从检查您的pom文件开始,查看有效的pom(如果您的项目描述符具有某些父项),然后仔细检查类路径上的内容-我相信javax.ws.rs- api某个地方有1.x版本。还尝试清除所有编译的内容并从头开始重建。

说到依赖性,如果您的列表是详尽无遗的(关于泽西岛),您很可能不得不添加jersey- common(2.3.1)依赖性,因为在初始化过程中,该ResourceConfig.packages()方法会调用PackageScanner构造函数,该构造函数包含对ReflectionHelper-的调用,而这不是服务器jar的一部分。

希望这可以帮助。



 类似资料:
  • 问题内容: 澄清: 这个问题是关于对基于JAX-WS的REST服务进行GZIP处理,但是我决定更改主题以使其更容易找到 我正在通过JAX-WS实现REST服务,并以标准方式发布它(原因是我想避免使用servlet容器或应用程序服务器)。 有办法让服务器gzip响应内容吗? 如何 实际提供的示例可以正常工作,它使您可以在没有servlet容器的嵌入式轻量级服务器上构建JAX-RS样式的服务器,但是需

  • 但是附件总是空的。有什么建议吗?提前谢了。

  • 你好,我曾与JAX-WS合作开发基于SOAP的网络服务。现在我想使用REST,因为正如我从这里学习的那样,REST比SOAP有优势。 但从不同的文章中,我知道我们也可以从JAX-WS创建RESTful Web服务。但是大多数人说我们应该使用JAX-RS而不是JAX-WS。 我的问题是JAX-WS RESTful webservice和JAX-RS(泽西)之间有什么区别。JAX-RS相对于JAX-W

  • 泽西-客户端 泽西-普通 jersey-container-servlet jersey-container-servlet-core 泽西-服务器 如果我这样做,我总是得到以下异常: 经过一些研究,我发现我应该添加jersey-servlet-1.12.jar,而不是从上面发布的下载源添加jar。所以我做了。我将其添加到web.xml中

  • 我需要在java上开发简单的web服务。我是java技术新手,根据几篇文章,我决定将JAX-RS(Jersey)与嵌入式http服务器(Grizzly2)结合使用,因为它看起来适合构建REST服务,部署似乎很简单。 在我的开发环境中,所有工作都很完美(使用IntllijIdea)。 但当我尝试在测试服务器上部署时,每个请求都返回“500内部错误”(偶数/application.wadl) 简单资源

  • 我使用Swagger生成了JAX-RS服务器代码,该代码使用以下命令运行: 现在,服务器的目的之一是在ElasticSearch中索引POST请求。但是,在pom中添加弹性搜索高级rest客户端会使服务器在启动时中断。请参阅底部的错误消息。 我还会在底部附上POM文件的内容。 底部附加的Maven依赖项树。 根据Joakim Erdfelt的建议,我尝试将javax-servlet更改为3.1版和