2011-12-20 12 views
7

ho creato molto semplice applicazione REST con successivo web.xml:java.lang.IllegalArgumentException: mappatura filtro deve specificare un <url-pattern> o un <nome-servlet>

<context-param> 
    <param-name>resteasy.scan</param-name> 
<param-value>true</param-value> 
</context-param> 

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

<servlet> 
    <servlet-name>Resteasy</servlet-name> 
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Resteasy</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

sto usando servlet 3.0 specifica e Tomcat 7.0.23. Purtroppo non riesce tutti i tempi:

Caused by: java.lang.IllegalArgumentException: Filter mapping must specify either a <url-pattern> or a <servlet-name> 
    at org.apache.catalina.core.StandardContext.validateFilterMap(StandardContext.java:2995) 
    at org.apache.catalina.core.StandardContext.addFilterMap(StandardContext.java:2954) 

Non immagino dove problema è ... Non faccio uso di filtri nel mio codice, come posso risolvere il problema?

risposta

12

Questo è relativo a RESTEasy issue 577. Per risolvere questo problema, è necessario aggiungere metadata-complete="true" alla dichiarazione radice <web-app> del proprio /WEB-INF/web.xml.

<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0" metadata-complete="true"> 

    <!-- Config here. --> 

</web-app> 

In questo modo Tomcat si assume che il /WEB-INF/web.xml è completo e non esegue la scansione vasi per le informazioni metadati aggiuntivi in ​​web.xml frammenti che, in caso di RESTEasy apparentemente contengono in modo non corretto/filtri incompleto dichiarati.

+0

aiuta, grazie! –

+0

Prego. – BalusC

+1

+1 Bel lavoro, detective. –

0

Naturalmente, l'aggiunta di "metadata-complete =" true "" impedirà a qualsiasi altro jar di contribuire a web.xml, inclusi RichFaces e Seam. È preferibile escludere il file JAR incriminato dalla distribuzione. Nel mio caso, è stato async-http-servlet-3.0-2.3.3.Final.jar ad offendere.