34

目前在 Jboss AS 4/5 上运行一些 webapps,我正在测试迁移到 jboss7。当我尝试在 JBoss AS 7 上部署基于球衣的 webapp(带有独立预览配置文件的完整配置文件)时,我得到:

org.jboss.as.server.deployment.DeploymentUnitProcessingException: Only one JAX-RS Application Class allowed.

我对其进行了一些搜索,发现 RestEasy 是嵌入到 Application Server 中的默认 JAX-RS 实现。http://community.jboss.org/message/579996https://issues.jboss.org/browse/JBAS-8830等帖子提到 RestEasy 部署程序接管。

在 AS 6 中,删除部署程序似乎更容易,而我还没有看到任何针对 AS 7 的解决方案。

4

10 回答 10

70

在这篇文章中已经提到过:https : //community.jboss.org/message/744530#744530,你可以要求resteasy模块不要扫描你的webapp中的其他JAX RS实现;只需将其添加到您的 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>

对我来说很好

于 2012-08-29T20:20:15.513 回答
6

standalone.xml除了删除其他帖子中提到的整个 jaxrs 子系统之外,不包括 RESTEasy 模块jboss-deployment-structure.xml也可以工作。

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
  <deployment>
    <exclusions>
      <module name="org.jboss.resteasy.resteasy-atom-provider" />
      <module name="org.jboss.resteasy.resteasy-cdi" />
      <module name="org.jboss.resteasy.resteasy-jaxrs" />
      <module name="org.jboss.resteasy.resteasy-jaxb-provider" />
      <module name="org.jboss.resteasy.resteasy-jackson-provider" />
      <module name="org.jboss.resteasy.resteasy-jsapi" />
      <module name="org.jboss.resteasy.resteasy-multipart-provider" />
      <module name="org.jboss.resteasy.async-http-servlet-30" />
    </exclusions>
  </deployment>
</jboss-deployment-structure>

还检查

于 2012-05-19T18:50:32.133 回答
6

我相信正确的方法是使用与应用服务器无关的 JAX-RS 应用程序部署。无需弄乱任何 JBoss 配置。您只需要在您的 JAX-RS Web 应用程序中扩展javax.ws.rs.core.Application 即可。你可以在这里找到一个例子。然后,你需要把它放在你的 web.xml 中。

<servlet>
  <servlet-name>Jersey Web Application</servlet-name>
  <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
  <init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>jersey.MyApplication</param-value>
  </init-param>
  <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>

  <load-on-startup>1</load-on-startup>
</servlet>

包扫描机制在 JBoss 7.x 上不能正常工作。我已经在 J​​Boss 7.0.2.Final 和 JBoss 7.1.1.Final 中成功测试了这种方法。

于 2013-01-17T07:48:39.000 回答
3
 <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
  <deployment>
    <exclude-subsystems>
    <subsystem name="jaxrs" />
    </exclude-subsystems>
   </deployment>
 </jboss-deployment-structure>

会成功的,与 7.3AS.ctomc 配合得很好,最后错过了一个小斜线来终止该部分。:-)

于 2014-04-14T21:15:31.570 回答
1

我设法在我的 JBOSS AS7 上运行 Jersey WS。

我为 JBOSS 所做的只是删除 Standalone.xml 中与 jax-rs 相关的所有内容

我的球衣示例代码来自: http ://www.ibm.com/developerworks/web/library/wa-aj-tomcat/

我为球衣做的唯一一件事就是从 web.xml 中删除 init-param 并将球衣库复制到 WebContent/WEB-INF/lib。

  <!--<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>sample.hello.resources</param-value>
  </init-param>-->
于 2011-12-20T02:04:03.303 回答
1
In web.xml file add the files

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

 and comment out the init-param
        <!-- <init-param>
                  <param-name>com.sun.jersey.config.property.packages</param-name>
                  <param-value></param-value>
        </init-param> -->

This worked out for me in jboss-as-7.1.1.Final and i did not do any changes in standalone.xml.
于 2014-07-25T10:55:03.890 回答
1

另一个选项:

  1. 编辑standalone/configuration/standalone.xml 并注释掉所有的jaxrs 条目。这将配置 Jersey 而不是 RESTEasy。
  2. 从 WEB-INF/web.xml 中删除 jboss-web.xml。此文件不再适用于 JBoss 7
  3. 编辑 web.xml,添加配置到资源包的 init-param com.sun.jersey.config.property.packages,例如:

    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>org.foo</param-value>
    </init-param>
    

https://github.com/Atmosphere/atmosphere/wiki/Deploying-Atmosphere-Jersey-in-JBoss-7.1.x

于 2014-10-06T09:21:06.273 回答
0

您可以通过修改 configuration/standalone.xml 并删除扩展和配置文件部分中对 jaxrs 的引用,在独立配置中克服这一点。请注意,即使我在standalone.xml 中注释掉了这些部分,JBoss 也会在下次启动时自动删除这些引用...

于 2011-08-27T22:16:22.430 回答
0

这对我来说适用于 JBoss 7.1.1 和 Jersey 1.17.1。无需修改standalone.xmldomain.xml。除了过滤 web.xml 中的 restEasy 之外,还指示 Jersey 使用 Jackson。您可以在此处阅读有关此配置的信息。

为了节省配置猜测的时间,我正在发布web.xmlpom.xml来自测试项目。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>TestJerseyonJBoss</display-name>
  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.test.rest</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>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
   <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>
</web-app>

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>TestJerseyOnJBoss</groupId>
  <artifactId>TestJerseyOnJBoss</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-bundle</artifactId>
        <version>1.17.1</version>
    </dependency>

        <dependency>
           <groupId>com.sun.jersey</groupId>
           <artifactId>jersey-json</artifactId>
           <version>1.17.1</version>
        </dependency>
    <dependency>
               <groupId>asm</groupId>
               <artifactId>asm</artifactId>
               <version>3.3.1</version>
               <type>jar</type>
               <scope>compile</scope>
    </dependency>
  </dependencies>

于 2013-11-11T12:26:26.577 回答
0

您应该为您的部署排除 jaxrs 子系统,将其添加到 META-INF/jboss-deployment-structure.xml

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
  <deployment>
     <exclude-subsystems>
        <subsystem name="jaxrs" />
    </exclude-subsystems>
  <deployment>
 </jboss-deployment-structure>

或者您可以转到standalone.xml 并在那里删除子系统。为此,您需要删除

<subsystem xmlns="urn:jboss:domain:jaxrs:1.0">
...
...
<subsystem>

配置的一部分,顶部的扩展部分可以保持它不会受到任何伤害。或者您可以使用 CLI 连接到服务器并运行

/subsystem=webservices:remove()

请注意,排除子系统功能和部署结构:1.2 已在 7.1.2 中添加,因此不适用于 7.1.1。

于 2014-02-20T11:02:57.140 回答