泽西2在Jboss 7上

Min*_*yen 10 java jboss jersey jboss7.x jersey-2.0

有没有人成功使用JBoss 7.x部署Jersey 2.x?我尝试使用JBoss 7.1.1部署Jersey 2.5,但遇到了如下错误:

"java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;"
Run Code Online (Sandbox Code Playgroud)

我相信这个问题是因为JBoss捆绑了RestEasy,这是一个JAX-RS 1.0实现,而Jersey是一个JAX-RS 2.0实现.所以我采取了以下步骤来禁用RestEasy:

1)在我的web.xml中添加了以下内容:

<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>
Run Code Online (Sandbox Code Playgroud)

2)在这里讨论之后,我修改了JBoss的standalone.xml,module.xml和domain.xml以删除对JAXRS1.1/RestEasy的所有引用.

3)这导致了另一个错误:"java.lang.NoClassDefFoundError:org/objectweb/asm/ClassVisitor",我通过将以下内容添加到我的pom.xml来解决:

<dependency>
    <groupId>asm</groupId>
    <artifactId>asm</artifactId>
    <version>3.3.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

所以最后我的应用程序部署没有错误,但现在我似乎无法访问我的任何泽西资源.但Jetty 8工作正常.我也能够运行Jersey 1.x,而不必采取步骤#2和#3,但如果可能的话,我更愿意使用Jersey 2.x.

另外我还尝试创建一个jboss-deployment-structure.xml文件,但后来我仍然遇到之前的错误,如"java.lang.NoSuchMethodError:javax.ws.rs.core.Application.getProperties()Ljava/util /地图;"

<?xml version="1.0" encoding="UTF-8"?>  
<jboss-deployment-structure>
  <deployment>
    <exclusions>
            <module name="org.jboss.resteasy.resteasy-atom-provider"/>  
            <module name="org.jboss.resteasy.resteasy-cdi"/>  
            <module name="org.jboss.resteasy.resteasy-jackson-provider"/>  
            <module name="org.jboss.resteasy.resteasy-jaxb-provider"/>  
            <module name="org.jboss.resteasy.resteasy-jaxrs"/>  
            <module name="org.jboss.resteasy.resteasy-jettison-provider"/>  
            <module name="org.jboss.resteasy.resteasy-jsapi"/>  
            <module name="org.jboss.resteasy.resteasy-multipart-provider"/>  
            <module name="org.jboss.resteasy.resteasy-yaml-provider"/>  
            <module name="org.apache.log4j"/>  
            <module name="org.apache.commons.pool"/>  
            <module name="javax.ws.rs.api"/>
    </exclusions>
  </deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)

Jboss和Jersey 2.x有没有运气好吗?任何帮助,将不胜感激.

小智 14

如果配置与此类似的jboss-deployment-structure.xml,则可以在JBoss 7上使用Jersey 2 :

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>

<exclude-subsystems>
  <subsystem name="resteasy" />
</exclude-subsystems>

<exclusions>
  <module name="javaee.api" />
  <module name="javax.ws.rs.api"/>
  <module name="org.jboss.resteasy.resteasy-jaxrs" />
</exclusions>

<local-last value="true" />

</deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)

因为JBoss 7包含模块的依赖项,所以仅排除resteasy模块本身是不够的,但是您需要排除整个javaee.api模块.另外,请确保不要排除太多模块.这也可能会破坏您的应用程序 - 上面的示例足以禁用resteasy.

如您所知,您仍需要在web.xml中包含以下行

  <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>
Run Code Online (Sandbox Code Playgroud)