2016-11-17 1 views
1

J'ai une application de repos. Mon but est de supprimer IBM JAX-RS et d'utiliser l'implémentation RESTEasy JAX-RS. J'utilise WAS8 et je veux utiliser seulement cela. Pour désactiver IBM JAX-RS, j'ai supprimé les classes IBMRestServlet et IBMRestFilter et défini la propriété JVM com.ibm.websphere.jaxrs.server.DisableIBMJAXRSEngine sur tru dans la console d'administration.Impossible de tester RESTEasy JAX-RS implementaion pour API REST

Pour RESTEasy JAX-RS implementaion, Ajouté resteasy-jaxrs dépendance pom et servlet configuré dans web.xml

 <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jaxrs</artifactId> 
     <version>3.0.11.Final</version> 
      </dependency> 

Web.xml

<context-param> 
    <param-name>resteasy.servlet.mapping.prefix</param-name> 
     <param-value>/</param-value> 
    </context-param> 

    <listener> 
    <listener-class> 
    org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap 
    </listener-class> 
    </listener> 

<servlet> 
<servlet-name>resteasy-servlet</servlet-name> 
<servlet-class> 
    org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher 
</servlet-class> 
    <init-param> 
<param-name>javax.ws.rs.Application</param-name> 
<param-value>com.application.RestApplication</param-value> 
</init-param> 

    </servlet> 

    <servlet-mapping> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

A) Dans un premier temps je suis arrivé « java. lang.NoSuchMethodError: org/jboss/resteasy/specimpl/BuiltResponse.getHeaders() "exception. En regardant dans diverses réponses, ajouté sous la dépendance en tant que premier dans le pom.xml (bien que cela ne marche pas de sens pour moi)

 <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>jaxrs-api</artifactId> 
     <version>3.0.11.Final</version> 
     </dependency> 

B) Après cela, je reçois java.lang.NoSuchMethodError: javax/ws /rs/ClientErrorException.validate(Ljavax/ws/rs/core/Response;Ljavax/ws/rs/core/Response$Status$Family;Ljavax/ws/rs/core/Response)

Pouvez-vous m'aider à résoudre A et B exceptions. Je veux essayer ceci seulement dans WAS8.

Aussi, Comment puis-je être sûr que j'ai désactivé IBM JAX-RS complètement et serveur capte uniquement jaxrs facile REST.

Répondre

3

Avez-vous mis le chargeur de classe de votre module Web à utiliser « Parent dernier » mode de délégation? C'est une partie nécessaire de l'apport de votre propre fournisseur JAX-RS dans WebSphere. "Désactiver" le fournisseur intégré (via la propriété système que vous avez mentionnée) l'empêche de s'initialiser, mais ses classes sont toujours visibles via le chargeur de classe. Vous devez configurer le chargeur de classe de votre application Web pour vous assurer qu'elle charge les classes locales en premier. Notez que si vous êtes préoccupé par le paramètre "parent last" qui provoque d'autres problèmes dans votre application, vous pouvez simplement lancer votre API JAX-RS et son implémentation dans une bibliothèque partagée, définir la bibliothèque partagée pour utiliser un class loader, et associez cela à votre module Web. C'est un moyen un peu plus ciblé (et donc plus sûr) d'obtenir ce style de chargement de classe.

+0

Oui, je l'ai changé. Mes commandes Ordre du chargeur de classes sont des classes chargées en premier avec le chargeur de classe local (parent en dernier). – user3766874

+0

Double-vérifier que vous définissez que sur le module Web et non l'application - ils ont des chargeurs de classes distinctes, qui doivent avoir ce paramètre configuré séparément. Si cela ne résout pas, et vous êtes certain à la fois l'API et jarres mise en œuvre sont dans un chargeur avec ce paramètre, alors peut-être la trace de la pile aidera affinez - il est possible qu'il y ait un certain problème avec des choses se ramassé de étendues inattendues. – Jarid