有人成功地在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,它是一个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) 参考这里的讨论,我修改了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 方面有什么好的经验吗?任何帮助都将不胜感激。