泽西岛2.1+;JBoss 7.1 NoSuchMethodError:getProperties

泽西岛2.1+;JBoss 7.1 NoSuchMethodError:getProperties,jboss,jersey,jax-rs,jboss7.x,jersey-2.0,Jboss,Jersey,Jax Rs,Jboss7.x,Jersey 2.0,我试图在JBoss7.1AS上运行Jersey 2.1REST服务。我在部署期间收到NoSuchMethodError:javax.ws.rs.core.Application.getProperties错误: ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/RESTService]] (MSC service thread 1-9) StandardWrapper.Throwable: jav

我试图在JBoss7.1AS上运行Jersey 2.1REST服务。我在部署期间收到NoSuchMethodError:javax.ws.rs.core.Application.getProperties错误:

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:]
ERROR[org.apache.catalina.core.ContainerBase.[jboss.web].[default host]./RESTService]](MSC服务线程1-9)StandardWrapper.Throwable:java.lang.NoSuchMethodError:javax.ws.rs.core.Application.getProperties()Ljava/util/Map;
位于org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:271)[jersey-server-2.1.jar:]
在org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:283)[jersey-container-servlet-core-2.1.jar:]
在pom.xml中,我有:

<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>

org.glassfish.jersey.containers
jersey容器servlet
2.1
org.glassfish.jersey.core
泽西岛客户
2.1
在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>

再服务
org.glassfish.jersey.servlet.ServletContainer
javax.ws.rs.Application
com.gatekeeper.restservice.RESTApplication
com.sun.jersey.api.json.POJOMappingFeature
真的
1.
之前我试过Jersey 1.17.1,它成功了(在JBoss中禁用resteasy扫描和jaxrs扩展/子系统之后)。到目前为止,我已经找到了一篇类似的文章(但使用Tomcat),其中的结论是在运行时绑定了错误的javax.ws.rs.core.Application,而且绑定的类是“旧”(JAX-rs 1.1)版本

如何解决这个问题有什么帮助吗?我是.net的家伙,我对java一无所知:) 谢谢
Bartek

简言之,泽西岛实施的1.17和2.2之间发生了重大的结构变化。您需要:

1)从“org.glassfish.jersey.server.ResourceConfig”扩展应用程序类

2)在应用程序类构造函数中添加packages行,如下所示:

    public class MyApplication extends ResourceConfig {
        public MyApplication() {
            packages("com.mysite.MyApplication");
        }
    }
    <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>
3)在web.xml中,您需要更新许多位置。见下文:

    public class MyApplication extends ResourceConfig {
        public MyApplication() {
            packages("com.mysite.MyApplication");
        }
    }
    <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>
球衣休息服务 org.glassfish.jersey.servlet.ServletContainer javax.ws.rs.Application com.mysite.MyApplication
4)部署并享受乐趣。

此外,似乎不赞成在java源代码中使用通配符

不是这个)

但是这个)


一个改进,IMHO。

我知道这个线程不是很新鲜,但是,我昨天才遇到这个问题,似乎没有任何效果

我的场景非常类似:Jersey 2.23.1 REST应用程序(JAX-RS 2.x)已经在tomcat上运行,需要在JBoss 7.1.1(内置JAX-RS 1.1)上运行

  • 关闭web.xml中的Restease包扫描:

    <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>
          <servlet-name>WebNize REST Service</servlet-name>
          <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
          <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>br.com.webnize.rest.service</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet-mapping>
          <servlet-name>WebNize REST Service</servlet-name>
          <url-pattern>/rest/*</url-pattern>
        </servlet-mapping>