У меня есть небольшое приложение Spring (3.1.0.RELEASE), которое работало просто отлично, пока я не решил, что мне нужен конвертер для преобразования содержимого из строк в другие типы.
Файл контекста моего приложения содержит другой файл mvc-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
<mvc:annotation-driven />
<mvc:view-controller path="/" view-name="index"/>
<mvc:resources mapping="/resources/**" location="/resources/"/>
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="defaultLocale" ref="finnishLocale"/>
</bean>
<bean id="finnishLocale" class="java.util.Locale">
<constructor-arg index="0" value="fi" />
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"
p:definitions="/WEB-INF/config/tiles-config.xml"/>
<bean id="tilesViewResolver" class="org.springframework.js.ajax.AjaxUrlBasedViewResolver">
<property name="viewClass" value="org.springframework.webflow.mvc.view.FlowAjaxTilesView"/>
</bean>
</beans>
Это отлично работает. Проблема возникает, когда я добавляю следующее определение компонента в указанный выше файл:
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="fi.mydomain.app.converter.StringToClassConverter"/>
</list>
</property>
</bean>
(Кстати, это точно такой же bean-компонент, который показан в документации Spring, за исключением класса конвертера). Я также изменил строку, управляемую аннотациями, так:
<mvc:annotation-driven conversion-service="conversionService"/>
(Проблема возникает, однако, просто путем добавления bean-компонента translationService).
(у меня также есть класс fi.mydomain.app.converter.StringToClassConverter).
Проблема в том, что теперь приложение больше не может быть развернуто. В файле журнала отображается сообщение об ошибке:
2012-01-16 17:55:30,427 [http-8080-7] ERROR ContextLoader.initWebApplicationContext() - Context initialization failed
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'tilesViewResolver' defined in ServletContext resource [/WEB-INF/config/mvc-config.xml]:
Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException;
nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException:
Property 'viewClass' threw exception; nested exception is java.lang.IllegalArgumentException:
Given view class [null] is not of type
[org.springframework.web.servlet.view.AbstractUrlBasedView]
И когда я удаляю bean-компонент translationService из xml, все снова работает, за исключением того, что я не могу использовать свои собственные конвертеры.
Я провел часы с этим безрезультатно. Любая помощь будет оценена. Спасибо.
-
Ханну