1
votes

I am in the middle of migrating my project from Spring 2.5.6 to Spring 4.0.6. Here is the xml definitions for the customer property editors we have.

<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
    <map>
    <entry key="org.joda.time.DateTime">
        <bean class="com.om.dh.util.joda.spring.DateTimeEditor">
            <constructor-arg index="0">
                <list>
                    <value>yyyyMMdd</value>
                    <value>yyyy-MM-dd</value>
                </list>
            </constructor-arg>
            <constructor-arg index="1" value="true"/>
        </bean>
    </entry>
    <entry key="org.joda.time.LocalDate">
        <bean class="com.om.dh.util.joda.spring.LocalDateEditor">
            <constructor-arg index="0">
                <list>
                    <value>yyyyMMdd</value>
                    <value>yyyy-MM-dd</value>
                </list>
            </constructor-arg>
            <constructor-arg index="1" value="true"/>
        </bean>
    </entry>
    </map>
 </property>
</bean>

However When I start my server, I am seeing the following exception in the log.

Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.util.LinkedHashMap' to required type 'java.util.Map' for property 'customEditors'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [com.om.dh.util.joda.spring.DateTimeEditor] to required type [java.lang.Class] for property 'customEditors[org.joda.time.DateTime]': PropertyEditor [org.springframework.beans.propertyeditors.ClassEditor] returned inappropriate value of type [com.om.dh.util.joda.spring.DateTimeEditor]
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:479)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:511)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:505)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1502)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1461)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    ... 146 more
Caused by: java.lang.IllegalArgumentException: Cannot convert value of type [com.om.dh.util.joda.spring.DateTimeEditor] to required type [java.lang.Class] for property 'customEditors[org.joda.time.DateTime]': PropertyEditor [org.springframework.beans.propertyeditors.ClassEditor] returned inappropriate value of type [com.om.dh.util.joda.spring.DateTimeEditor]
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:263)
    at org.springframework.beans.TypeConverterDelegate.convertToTypedMap(TypeConverterDelegate.java:623)
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:208)
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:459)
    ... 152 more

This is the list of spring jars I have in my classpath

ls lib/*spring*

lib/mina-integration-spring-1.1.7.jar              
lib/spring-context-4.0.6.RELEASE.jar           
lib/spring-integration-jms-4.0.3.RELEASE.jar  
lib/spring-retry-1.1.0.RELEASE.jar            
lib/spring-web-4.0.6.RELEASE.jar
lib/spring-aop-4.0.6.RELEASE.jar                   
lib/spring-context-support-4.0.6.RELEASE.jar   
lib/spring-jdbc-4.0.6.RELEASE.jar             
lib/spring-security-config-3.2.4.RELEASE.jar  
lib/spring-webmvc-4.0.6.RELEASE.jar
lib/spring-batch-core-3.0.1.RELEASE.jar            
lib/spring-core-4.0.6.RELEASE.jar              
lib/spring-jms-4.0.6.RELEASE.jar              
lib/spring-security-core-3.2.4.RELEASE.jar    
lib/spring-webmvc-struts-2.5.6.jar
lib/spring-batch-infrastructure-3.0.1.RELEASE.jar  
lib/spring-expression-4.0.6.RELEASE.jar        
lib/spring-messaging-4.0.6.RELEASE.jar        
lib/spring-security-web-3.2.4.RELEASE.jar     
lib/spring-xml-1.5.5.jar
lib/spring-batch-integration-3.0.1.RELEASE.jar     
lib/spring-flex-1.0.1.RELEASE.jar              
lib/spring-orm-4.0.6.RELEASE.jar              
lib/spring-test-4.0.6.RELEASE.jar             
lib/struts2-spring-plugin-2.3.15.1.jar
lib/spring-beans-4.0.6.RELEASE.jar                 
lib/spring-integration-core-4.0.3.RELEASE.jar  
lib/spring-oxm-1.5.5.jar                      
lib/spring-tx-4.0.6.RELEASE.jar
1
Can you post your classpath. I smell jar duplication heregerrytan
Edited the original post and listed all the spring jars I have it under WEB-INF/lib folder. I don't see any duplication thereramkris
I think the problem is not with spring jars, but joda jar. New version of spring might pull newer version of joda conflicting with yoursgerrytan
But I don't see any duplicate jars in the classpath. I see only joda-time 1.6.2 jar.ramkris

1 Answers

1
votes

in Spring 2.5.6 customEditors are Map, but in Spring 4.0.6 it is changed to Map, Class>. maybe this post can help you: http://codeomitted.com/custompropertyeditor/