2011-08-05 278 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