我正在尝试在 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);
}
}
有人有什么想法可以解决吗?
提前致谢,
罗伯托
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 同样,参见helloworld-webapp在泽西岛 GitHub 上)。
有可能吗,restEasy(也肯定包含javax.ws.rs.core.Application
类)没有完全关闭并且以某种方式默认为 JAX-RS 1.x 版本?
我将从检查你的 pom 文件开始,查看有效的 pom (如果你的项目描述符有一些父级)并仔细检查你的类路径上有什么 - 我相信有一个 1.x 版本javax.ws.rs-api
某处。还要尝试清理所有已编译的内容并从头开始重建。
说到依赖项,如果您的列表很详尽(关于 Jersey),您很可能必须添加jersey-common
(2.3.1) 依赖关系,就像在初始化期间一样,ResourceConfig.packages()
方法调用PackageScanner
构造函数,其中包含对ReflectionHelper
- 这不再是服务器 jar 的一部分。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)