Перед обновлением до Spring 3 в моем файле applicationContext.xml было следующее:
<bean class="com.northgateis.pole.ws.PolePayloadValidatingInterceptor">
<property name="validateRequest" value="${validateRequest}" />
<property name="validateResponse" value="${validateResponse}" />
</bean>
где ${validateRequest) и ${validateRequest) относятся к свойствам, которые могут быть определены или не определены в моем файле свойств.
В Spring 2, если эти свойства не присутствовали в файле свойств, установщики для компонента не вызывались, и поэтому использовались значения по умолчанию, жестко запрограммированные в PolePayloadValidatingInterceptor.
После обновления до Spring 3 поведение изменилось: если свойства отсутствуют в файле свойств, я получаю следующее исключение:
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'annotationMapping' defined in class path resource [com/northgateis/pole/ws/applicationContext-ws.xml]: Could not resolve placeholder 'validateRequest'
at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:272)
at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:75)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:640)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:615)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:405)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:272)
Я пробовал баловаться с Spring EL, но, похоже, следующее не работает:
<bean class="com.northgateis.pole.ws.PolePayloadValidatingInterceptor">
<property name="validateRequest" value="${validateRequest?:true}" />
<property name="validateResponse" value="${validateResponse?:false}" />
</bean>
Значение после оператора Элвиса используется всегда, даже если свойства определены в файле свойств. Интересно, что синтаксис принят.
Какие-либо предложения?