2011-12-20 186 views
7

我已經創建了未來的web.xml非常簡單的REST的應用程序:java.lang.IllegalArgumentException異常:過濾器映射必須指定一個<url-pattern>或<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> 

我使用的servlet 3.0規範和Tomcat 7.0.23。不幸的是,失敗的所有時間:

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) 

我無法想象這裏的問題是...我不在我的代碼使用過濾器,如何解決呢?

回答

12

這與RESTEasy issue 577有關。要解決此問題,您需要將metadata-complete="true"添加到您的/WEB-INF/web.xml<web-app>根聲明中。

<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> 

這樣Tomcat將假定/WEB-INF/web.xml是完整的,將不掃描用於附加元數據信息的JAR在web.xml片段,在的RESTEasy的情況下顯然包含不正確/不完全聲明濾波器。

+0

它有幫助,謝謝! – 2011-12-20 21:13:41

+0

不客氣。 – BalusC 2011-12-20 21:14:43

+1

+1好的工作,偵探。 – 2011-12-20 21:26:54

0

當然,添加'metadata-complete =「true」'會阻止任何其他jar貢獻給web.xml,包括RichFaces和Seam。最好從部署中排除違規的JAR文件。就我而言,那是冒犯了async-http-servlet-3.0-2.3.3.Final.jar。

相關問題