mvc: ресурсы приводят к ClassCastException - PullRequest
0 голосов
/ 11 января 2012

У меня есть веб-приложение Spring MVC, которое должно обслуживать статические ресурсы. Поэтому у меня есть следующая конфигурация пружины:

<mvc:resources location="/resources/" mapping="/resources/**"/>

Но каждый запрос к ресурсу приводит к одному и тому же безобразному ClassCastException:

java.lang.ClassCastException: java.lang.String cannot be cast to org.springframework.core.io.Resource
at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.getResource(ResourceHttpRequestHandler.java:158)
at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:109)
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.myproject.filter.SetP3PHeaderFilter.doFilter(SetP3PHeaderFilter.java:48)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.myproject.filter.SessionIdUrlFilter.disableDefaultURLEncoding(SessionIdUrlFilter.java:83)
at com.myproject.filter.SessionIdUrlFilter.avoidSessionFixation(SessionIdUrlFilter.java:53)
at com.myproject.filter.SessionIdUrlFilter.doFilter(SessionIdUrlFilter.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)

Я пробовал это с версией 3.1.0.RELEASE и 3.0.4.RELEASE платформы весны и наблюдал точно такое же поведение.

Ответы [ 2 ]

1 голос
/ 11 января 2012

Это действительно странно, но, похоже, проблема в том, что я определил службу конвертации так:

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
        <list>
           <bean    class="com.example.CustomConverter" />
        </list>
    </property>
</bean>

Который был упомянут здесь:

<mvc:annotation-driven conversion-service="conversionService" />

Оказывается, если я изменю идентификатор бина на что-то другое, например, f. е. cs работает нормально. Это действительно странно, поскольку один и тот же идентификатор используется в документации и витринах.

1 голос
/ 11 января 2012

В вашей конфигурации может отсутствовать mvc:annotation-driven, то есть тот, который регистрирует редактор свойств для преобразования из строки в ресурс, что, вероятно, вызывает это сообщение об ошибке.

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