2010-07-30 2 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) 

При первом взгляде я предполагаю, что никто не устанавливает атрибут запроса org.codehaus.groovy.grails.WEB_REQUEST, который ожидает UrlMappingsFilter. (вызывающий NPE)

И весенний сервлет (как-то не отображается, после того, как фильтр пружины отображается) добавляет «неправильный» (согласно граалам) 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

Я избавилась от ClassCastException, добавив отображение org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter в /*. Не уверен, должен ли отображаться этот фильтр там, и где сказано, что он shoudl.

Смежные вопросы