有人成功地使用 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;"
我认为这个问题是因为 JBoss 与 RestEasy 捆绑在一起,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>
2) 关注讨论 here ,我修改了 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>
最后我的应用程序部署没有错误,但现在我似乎无法访问我的任何 Jersey 资源。然而,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/ map ;”
<?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>
有人对 Jboss 和 Jersey 2.x 有好感吗?任何帮助将不胜感激。
最佳答案
如果您像这样配置您的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>
因为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>
关于java - Jboss 7 上的 Jersey 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21173397/