2017-09-18 5 views
0

J'ai une application qui est déployée sur Jboss eap 6.4. Dans le fichier web.xml j'avais javax.ws.rs.core.Application défini comme servlet et enregistré pour toutes les URL commençant par 'api' (/api/*).Jboss: RestEasy + répartiteur de ressort servlet = aucune classe de servlet n'a été spécifiée pour le servlet javax.ws.rs.core.Application

<servlet> 
    <servlet-name>javax.ws.rs.core.Application</servlet-name> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>javax.ws.rs.core.Application</servlet-name> 
    <url-pattern>1</url-pattern> 
</servlet-mapping> 

Il y a quelque temps j'ai ajouté un DispatcherServlet de printemps en tant que deuxième servlet enregistré pour tous les urls commençant par 'admin' (/admin/*)

<servlet> 
     <servlet-name>admin dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param>...</init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>admin dispatcher</servlet-name> 
     <url-pattern>/admin/*</url-pattern> 
    </servlet-mapping> 

Devinez quoi? Quand j'ai commencé une application j'ai eu l'erreur dans le sujet.

aucune classe de servlet a été spécifié pour servlet javax.ws.rs.core.Application

Répondre

0

Par débogage sources RestEasy il est apparu que quelque part très profond dans l'intégration Jboss/RestEasy si RestEasy trouve « org .springframework.web.servlet.DispatcherServlet "(chaîne codée en dur) étant utilisé spmewhere dans web.xml, il arrête simplement l'autoconfiguration et échoue plus tard parce qu'il est mal configuré.

Il existe une solution de contournement difficile: il suffit d'étendre la servlet répartiteur du ressort MyDispatcherServlet extends DispatcherServlet et de l'utiliser dans le fichier web.xml au lieu d'un ressort. C'est pour tromper la chaîne codée en dur.

Voila - les distributrices RestEasy et Spring ont commencé à travailler ensemble.