2010-07-30 41 views
1

今天我將我們的grails應用程序從1.0.3升級到1.3.3,當然,事情開始表現怪異。Grails 1.3.3過濾器 - 無論是NullPointerException還是ClassCastException

目前,我正在問的問題是:在web.xml中含有:

<filter> 
    <filter-name>sitemesh</filter-name> 
    <filter-class>org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter</filter-class> 
</filter> 

<filter> 
    <filter-name>charEncodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    <init-param> 
     <param-name>targetBeanName</param-name> 
     <param-value>characterEncodingFilter</param-value> 
    </init-param> 
    <init-param> 
     <param-name>targetFilterLifecycle</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    </filter> 


<filter-mapping> 
    <filter-name>charEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<filter-mapping> 
    <filter-name>sitemesh</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

這似乎是工作(至少某些頁面加載),但在日誌中有:

Caused by: java.lang.ClassCastException: org.springframework.web.context.request.ServletRequestAttributes cannot be cast to org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest 
    at org.codehaus.groovy.grails.web.pages.GroovyPagesServlet.createResponseWriter(GroovyPagesServlet.java:211) 
    at org.codehaus.groovy.grails.web.pages.GroovyPagesServlet.renderPageWithEngine(GroovyPagesServlet.java:137) 
    at org.codehaus.groovy.grails.web.pages.GroovyPagesServlet.doService(GroovyPagesServlet.java:122) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 

如果我擺脫彈簧過濾器的,我得到一個NullPointerException

java.lang.NullPointerException 
    at org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterInternal(UrlMappingsFilter.java:136) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.obtainContent(GrailsPageFilter.java:245) 
    at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.doFilter(GrailsPageFilter.java:134) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 

第一次看,我猜想沒有人設置UrlMappingsFilter預期的org.codehaus.groovy.grails.WEB_REQUEST請求屬性。 (導致NPE)

而彈簧servlet(以某種方式出現未被映射,彈簧過濾器映射後)添加了「錯誤」(根據grails)ServletRequestAttributes

對上述映射進行重新排序使得它如此,因爲如果春天映射不存在 - 即NPE被拋出。

所以問題是 - 如何繼續。我想我在web.xml中缺少一些重要的映射?

(我有需要的)

<servlet> 
    <servlet-name>grails</servlet-name> 
    <servlet-class>org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<!-- The Groovy Server Pages servlet --> 
    <servlet> 
    <servlet-name>gsp</servlet-name> 
    <servlet-class>org.codehaus.groovy.grails.web.pages.GroovyPagesServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>gsp</servlet-name> 
    <url-pattern>*.gsp</url-pattern> 
</servlet-mapping> 

回答

0

我被添加映射org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter/*擺脫ClassCastException的。不知道是否應該在那裏映射這個過濾器,但是它說它應該在哪裏。

相關問題