Фильтры Grails 1.3.3 - исключение NullPointerException или ClassCastException - PullRequest
1 голос
/ 30 июля 2010

Сегодня я обновил наше приложение grails с 1.0.3 до 1.3.3, и, конечно, все стало странно себя вести.

Проблема, о которой я сейчас спрашиваю, заключается в следующем: файл 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>

1 Ответ

0 голосов
/ 03 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...