Jersey 2.1 + JBoss 7.1 NoSuchMethodError: getProperties [英] Jersey 2.1 + JBoss 7.1 NoSuchMethodError: getProperties
问题描述
我正在尝试在 JBoss 7.1 AS 上运行 Jersey 2.1 REST 服务.我在部署期间收到 NoSuchMethodError: javax.ws.rs.core.Application.getProperties 错误:
I am trying to run Jersey 2.1 REST service on JBoss 7.1 AS. I am getting the NoSuchMethodError: javax.ws.rs.core.Application.getProperties error during deployment:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/RESTService]] (MSC service thread 1-9) StandardWrapper.Throwable: java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:271) [jersey-server-2.1.jar:]
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:283) [jersey-container-servlet-core-2.1.jar:]
在 pom.xml 我有:
In pom.xml I have:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.1</version>
</dependency>
在 web.xml 中:
And in the web.xml:
<servlet>
<servlet-name>RESTService</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.gatekeeper.restservice.RESTApplication</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
以前我尝试过 Jersey 1.17.1 并且它有效(在 JBoss 中禁用 resteasy 扫描和 jaxrs 扩展/子系统之后).到目前为止,我发现了一个类似的帖子(但使用 Tomcat),其中的结论是错误的 javax.ws.rs.core.Application 在运行时被绑定,而且绑定的类是旧的"(JAX-RS 1.1) 版本.
Previously I tried with Jersey 1.17.1 and it worked (after disabling resteasy scan and jaxrs extension/subsystem in JBoss). So far I've found one similar post (but with Tomcat) where the conslusion was that the wrong javax.ws.rs.core.Application is being bound at runtime, and further that the bound class is an "old" (JAX-RS 1.1) version.
任何帮助如何解决这个问题?我是 .net 人,我在 Java 中完全失明:)谢谢巴特克
Any help how to resolve this? I'm .net guy and I'm totally blind in java :) Thanks Bartek
推荐答案
简而言之,在 Jersey 实现的 1.17 和 2.2 之间进行了重大的结构更改.您需要:
In short, significant structural changes have been made between 1.17 and 2.2 of the Jersey implementation. You need to:
1) 从org.glassfish.jersey.server.ResourceConfig"扩展您的应用程序类
2) 在应用程序类构造函数中添加包行,如下所示:
public class MyApplication extends ResourceConfig {
public MyApplication() {
packages("com.mysite.MyApplication");
}
}
3) 在 web.xml 中,您需要更新许多地方.见下文:
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.mysite.MyApplication</param-value>
</init-param>
4) 部署并玩得开心.
这篇关于Jersey 2.1 + JBoss 7.1 NoSuchMethodError: getProperties的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!