Avant de passer à Spring 3 J'ai eu dans mon fichier applicationContext.xml:Puis-je utiliser un espace réservé de propriété avec Spring EL?
<bean class="com.northgateis.pole.ws.PolePayloadValidatingInterceptor">
<property name="validateRequest" value="${validateRequest}" />
<property name="validateResponse" value="${validateResponse}" />
</bean>
où $ {validateRequest) et $ {validateRequest) se réfèrent à des propriétés qui peuvent ou ne peuvent pas être définies dans le fichier mes propriétés. Au printemps 2, si ces proeprties n'étaient pas présentes dans le fichier de propriétés, les setters sur le bean n'étaient pas appelés et donc les valeurs par défaut codées en dur dans PolePayloadValidatingInterceptor étaient utilisées.
Après la mise à niveau du printemps 3, il semble que le comportement est différent: Si les propriétés ne sont pas présentes dans le fichier de propriétés que je reçois l'exception suivante:
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)
J'ai essayé barboter avec le printemps EL mais les éléments suivants doesn « t semblent fonctionner:
<bean class="com.northgateis.pole.ws.PolePayloadValidatingInterceptor">
<property name="validateRequest" value="${validateRequest?:true}" />
<property name="validateResponse" value="${validateResponse?:false}" />
</bean>
la valeur après que l'opérateur Elvis est toujours utilisé, même lorsque les propriétés sont définies dans le fichier proeprties. Intéressant que la syntaxe soit acceptée.
Des suggestions?
Regarde l'espoir. Cela fonctionne en effet lorsque la propriété est nulle (c'est-à-dire vide dans le fichier de propriétés) mais aboutit à la même chose "Impossible de résoudre l'espace réservé 'validateRequest'" BeanDefinitionStoreException si la propriété est absente du fichier de propriétés. J'essaierai de rouvrir le SPR-7209 et de voir si l'équipe de Spring acceptera que l'absence soit considérée comme équivalente au blanc. –