有没有人成功部署了Jersey 2.x与JBoss 7.x?我尝试使用JBoss 7.1.1部署Jersey 2.5,但遇到错误,如:
@H_404_2@"java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;"@H_301_3@
@H_502_25@解决方法
我相信这个问题是因为JBoss与Resteasy捆绑在一起,这是一个JAX-RS 1.0实现,而Jersey是一个JAX-RS 2.0实现.所以我采取了以下步骤来禁用RestEasy:
@H_404_2@<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>@H_301_3@2)按照here的讨论,我修改了JBoss的standalone.xml,module.xml和domain.xml,以删除对JAXRS1.1 / RestEasy的所有引用.
3)这导致另一个错误:“java.lang.NoClassDefFoundError:org / objectweb / asm / ClassVisitor”,我通过将以下内容添加到我的pom.xml中来解决:
@H_404_2@<dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> <version>3.3.1</version> </dependency>@H_301_3@所以终于我的应用程序部署没有错误,但现在我似乎无法访问我的泽西资源.然而,码头8工作正常.我也可以运行泽西1.x而不必采取步骤#2和#3,但如果可能,我更喜欢使用泽西2.x.
此外,我还尝试创建一个jboss-deployment-structure.xml文件,但是我仍然遇到以前的错误,如“java.lang.NoSuchMethodError:javax.ws.rs.core.Application.getProperties()Ljava / util /地图;”
@H_404_2@<?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>@H_301_3@有没有人有Jboss和泽西2.x的运气?任何帮助将不胜感激.
你可以使用Jersey 2在JBoss 7上配置你的jboss-deployment-structure.xml类似于:
@H_404_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>@H_301_3@
因为JBoss 7包含模块的依赖关系,所以排除resteasy模块本身还不足以排除整个javaee.api模块.还要确保不排除太多的模块.这也可能会破坏您的应用程序 – 上面的示例足以禁用resteasy.
您已经发现,您仍然需要在web.xml中包含以下行
@H_404_2@<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>@H_301_3@