2011-08-05 177 views
33

目前在Jboss AS 4/5上运行一些webapps,并且正在测试迁移到jboss7。当我尝试部署AS 7在JBoss球衣基于Web应用程序(使用独立的预览配置文件完整的个人资料),我得到:在Jboss AS 7上部署Jersey 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,它似乎更容易去除的部署,而我还没有通过修改配置/ standalone.xml和删除引用看到了AS 7

回答

68

它已经在这篇文章中提到:https://community.jboss.org/message/744530#744530,你可以问RestEasy的模块不扫描其他JAX RS实现在您的web应用程序中;只需添加到您的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> 

+0

工作!非常简单和很好的答案! –

+0

也为我工作!网络有点伤心。xml现在包含一些特定的JBoss配置。我更喜欢通过修改jboss-deployment-structure.xml来实现它,但那并不成功。 – Esk

+0

它听起来像一个jboss的bug ..我也不想修改我的web.xml,但似乎没有其他选择 – thiagoh

0

你可以过去,这在独立配置中的任何解决方案jaxrs在扩展和配置文件部分。请注意,尽管我在standalone.xml中注释了这些部分,但JBoss将在下次启动时自动删除这些引用...

+0

如果您的意思是您的编辑没有保留,您需要在编辑XML之前关闭服务器。重新启动时会覆盖对运行时所做的任何更改。脱机或通过管理控制台或CLI进行的更改将保持不变。这样,您可以根据需要创建和加载自定义服务器配置文件。 – ddri

1

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

我对JBOSS做的是只是删除到JAX-RS在standalone.xml

我的球衣示例代码得到了相关的一切: http://www.ibm.com/developerworks/web/library/wa-aj-tomcat/

我的球衣做的唯一的事情就是去掉来自web.xml的init-param并将jersey lib复制到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>--> 
6

除了如在排除jboss-deployment-structure.xml所述的RESTEasy模块也可以工作其他职位提到去除standalone.xml整个JAXRS子系统。

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

还检查了

5

工作得很好,我相信正确的做法是使用的应用程序服务器是无关的JAX-RS应用程序部署。无需混淆任何JBoss配置。您所需要的只是在您的JAX-RS Web应用程序中扩展javax.ws.rs.core.Application。你可以找到一个例子here。然后,你需要把它放在你的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上无法正常工作。我已经在JBoss 7.0.2.Final和JBoss 7.1.1.Final中成功地测试了这种方法。

+0

我面临着相同的异常,但我的库在EAR/lib中。如何关闭EAR/lib的resteasy扫描器? – Sriram

0

我们是否可以更新“服务器不可知”方法以包含JBoss 7.1.1和Servlet 3.0?

<context-param>在3.0版web-xml中无效。

0

下面是我为JBoss 7.1.1和Jersey 1.17.1所做的工作。无需修改standalone.xmldomain.xml。除了在web.xml中过滤restEasy指示Jersey使用Jackson。你可以阅读关于这个配置here

为了节省配置猜测的时间,我从测试项目发布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> 

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

刚一说明,排除的子系统的功能和部署,strucure:1.2在7.1.2和添加这样将不会出现在7.1.1工作。

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只是错过了一个微小的斜线到底终止部分:-)

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

Ahother选项:

  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