J'exécute actuellement des webapps sur Jboss AS 4/5 et je teste la migration vers jboss7. Lorsque j'essaie de déployer une application Web basée sur un maillot sur JBoss AS 7 (profil complet avec fichier de configuration à prévisualisation autonome), j'obtiens:
org.jboss.as.server.deployment.DeploymentUnitProcessingException: Only one JAX-RS Application Class allowed.
J'ai fait un peu de recherche dessus et j'ai découvert que RestEasy est l'implémentation JAX-RS par défaut intégrée dans Application Server. Des messages comme http://community.jboss.org/message/579996 et https://issues.jboss.org/browse/JBAS-88 ) mentionnent que le RestEasy déployeur prend le relais.
Dans AS 6, il semble plus facile de retirer le déployeur alors que je n'ai vu aucune solution pour AS 7.
il a déjà été mentionné dans cet article: https://community.jboss.org/message/744530#7445 , vous pouvez simplement demander au module resteasy de ne pas rechercher d'autres implémentations JAX RS dans votre webapp ; ajoutez simplement ceci à votre 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>
a bien fonctionné pour moi
Outre la suppression de l'intégralité du sous-système jaxrs dans standalone.xml
comme mentionné dans les autres articles à l'exclusion des modules RESTEasy dans jboss-deployment-structure.xml
peut également fonctionner.
<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>
Consultez également
Je pense que la bonne approche consiste à utiliser le déploiement d'applications JAX-RS indépendant du serveur d'applications. Pas besoin de jouer avec n'importe quelle configuration JBoss. Tout ce dont vous avez besoin est, étendez javax.ws.rs.core.Application dans votre application Web JAX-RS. Vous pouvez trouver un exemple ici . Ensuite, vous devez mettre cela dans votre 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>
Le mécanisme d'analyse des packages ne fonctionne pas correctement sur JBoss 7.x. J'ai testé cette approche avec succès dans JBoss 7.0.2.Final et JBoss 7.1.1.Final.
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclude-subsystems>
<subsystem name="jaxrs" />
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
Fera l'affaire, fonctionne très bien avec 7.3AS.ctomc vient de manquer une petite barre oblique à la fin pour terminer la section. :-)
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.
J'ai réussi à exécuter Jersey WS sur mon JBOSS AS7.
Ce que je fais pour JBOSS est simplement de supprimer tout ce qui concerne jax-rs dans standalone.xml
Mon exemple de code de maillot provient de: http://www.ibm.com/developerworks/web/library/wa-aj-Tomcat/
La seule chose que je fais pour le maillot est de supprimer l'init-param du web.xml et de copier le lib du jersey vers 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>-->
Option Ahother:
Modifiez web.xml, ajoutez un init-param com.Sun.jersey.config.property.packages configuré au package de votre ressource, comme:
<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
Voici ce qui a fonctionné pour moi pour JBoss 7.1.1 et Jersey 1.17.1. Pas besoin de modifier standalone.xml
ou domain.xml
. Outre le filtrage de restEasy dans web.xml, demandez à Jersey d'utiliser Jackson. Vous pouvez lire sur cette configuration ici .
Pour gagner du temps dans les suppositions de configuration, je poste web.xml
et pom.xml
du projet de test.
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>
Vous pouvez dépasser cela dans la configuration autonome en modifiant configuration/standalone.xml et en supprimant les références à jaxrs dans la section extensions et profils. Remarque, même si j'ai commenté ces parties dans mon standalone.xml, JBoss supprimera automatiquement ces références au prochain démarrage ...
Vous devez exclure le sous-système jaxrs d'être activé pour votre déploiement, ajoutez-le dans 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>
ou vous pouvez accéder à standalone.xml et y supprimer le sous-système. Pour ce faire, vous devez supprimer
<subsystem xmlns="urn:jboss:domain:jaxrs:1.0">
...
...
<subsystem>
une partie de la configuration, une partie d'extension sur le dessus peut rester sans dommage dans les deux cas. ou vous pouvez vous connecter au serveur avec CLI et exécuter
/subsystem=webservices:remove()
Juste une note, fonctionnalité exclure-sous-systèmes et structure de déploiement: 1.2 a été ajouté en 7.1.2 et en tant que tel ne fonctionnera pas sur 7.1.1.
Pouvons-nous mettre à jour l'approche "indépendante du serveur" pour inclure JBoss 7.1.1 et Servlet 3.0?
<context-param>
n'est pas valide dans une version web-xml 3.0.