Развертывание веб-приложения на Джерси в Jboss AS 7 - PullRequest
33 голосов
/ 05 августа 2011

В настоящее время работает несколько веб-приложений на Jboss AS 4/5, и я тестирую миграцию на jboss7. Когда я пытаюсь развернуть веб-приложение на основе джерси в JBoss AS 7 (полный профиль с файлом конфигурации автономного предварительного просмотра), я получаю:

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

Я немного поэкспериментировал и обнаружил, что RestEasy является реализацией JAX-RS по умолчанию, встроенной в Application Server. В таких сообщениях, как http://community.jboss.org/message/579996 и https://issues.jboss.org/browse/JBAS-8830), упоминается, что взломщик RestEasy вступает во владение.

В AS 6 кажется, что удалить средство развертывания проще, тогда как я не видел никаких решений для AS 7.

Ответы [ 11 ]

69 голосов
/ 30 августа 2012

это уже упоминалось в этом посте: https://community.jboss.org/message/744530#744530, вы можете просто попросить модуль resteasy не сканировать другие реализации 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>

отлично сработало для меня

6 голосов
/ 17 января 2013

Я считаю, что правильным подходом является использование независимого от сервера приложений развертывания приложений JAX-RS. Нет необходимости связываться с любой конфигурацией JBoss. Все, что вам нужно, это расширить javax.ws.rs.core.Application в вашем веб-приложении JAX-RS. Вы можете найти пример здесь . Затем вам нужно поместить это в ваш 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.

6 голосов
/ 19 мая 2012

Помимо удаления всей подсистемы jaxrs в standalone.xml, как упоминалось в других статьях, за исключением модулей 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>

Также проверьте

3 голосов
/ 15 апреля 2014
 <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 голос
/ 06 октября 2014

Другой вариант:

  1. Отредактируйте standalone / configuration / standalone.xml и закомментируйте все записи jaxrs. Это настроит Джерси вместо RESTEasy.
  2. Удалите jboss-web.xml из WEB-INF / 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

1 голос
/ 25 июля 2014
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 голос
/ 20 декабря 2011

Мне удалось запустить Jersey WS на моем JBOSS AS7.

Что я делаю для JBOSS, так это просто удаляю все, что связано с jax-rs в standalone.xml

Пример кода моего джерси получен из: http://www.ibm.com/developerworks/web/library/wa-aj-tomcat/

Единственное, чтосделать для джерси это удалить init-param из web.xml и скопировать джерси 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>-->
0 голосов
/ 20 февраля 2014

Вы должны исключить подсистему jaxrs из активации для своего развертывания, добавьте это в META-INF / jboss-deploy-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>

часть конфигурации, а дополнительная часть сверху может не повредить в любом случае.или вы можете подключиться к серверу с помощью интерфейса командной строки и запустить

/subsystem=webservices:remove()

Только примечание, функциональность exclude-subsystems и структура развертывания: 1.2 был добавлен в 7.1.2 и как таковой не будет работать на 7.1.1.

0 голосов
/ 11 ноября 2013

Вот что у меня сработало для JBoss 7.1.1 и Jersey 1.17.1.Нет необходимости изменять standalone.xml или domain.xml.Помимо фильтрации restEasy в web.xml проинструктируйте Джерси использовать Джексона.Вы можете прочитать об этой конфигурации здесь .

Чтобы сэкономить время в предположениях конфигурации, я публикую web.xml и pom.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 голосов
/ 14 февраля 2013

Можем ли мы обновить «независимый от сервера» подход, включив в него JBoss 7.1.1 и Servlet 3.0?

<context-param> недопустимо в версии 3.0 web-xml.

...