Spring 3 en MyBatis 3.0.4/3.0.6: MalformedParameterizedTypeException

Ik probeer Spring 3.0.5.RELEASE samen met MyBatis te gebruiken in een Maven-omgeving. Ik heb de afhankelijkheid van mybatis-spring toegevoegd. Dit bleek niet te werken vanwege een MalformedParameterizedTypeException (een gedetailleerde stacktrace is hieronder opgenomen).

stacktrace:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:679)
Caused by: java.lang.reflect.MalformedParameterizedTypeException
    at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:60)
    at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.(ParameterizedTypeImpl.java:53)
    at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:95)
    at sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:104)
    at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:140)
    at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
    at sun.reflect.generics.visitor.Reifier.visitArrayTypeSignature(Reifier.java:159)
    at sun.reflect.generics.tree.ArrayTypeSignature.accept(ArrayTypeSignature.java:42)
    at sun.reflect.generics.repository.ConstructorRepository.getParameterTypes(ConstructorRepository.java:94)
    at java.lang.reflect.Method.getGenericParameterTypes(Method.java:300)
    at java.beans.FeatureDescriptor.getParameterTypes(FeatureDescriptor.java:385)
    at java.beans.MethodDescriptor.setMethod(MethodDescriptor.java:116)
    at java.beans.MethodDescriptor.(MethodDescriptor.java:74)
    at java.beans.MethodDescriptor.(MethodDescriptor.java:58)
    at java.beans.Introspector.getTargetMethodInfo(Introspector.java:1196)
    at java.beans.Introspector.getBeanInfo(Introspector.java:423)
    at java.beans.Introspector.getBeanInfo(Introspector.java:189)
    at org.springframework.beans.CachedIntrospectionResults.(CachedIntrospectionResults.java:224)
    at org.springframework.beans.CachedIntrospectionResults.forClass(CachedIntrospectionResults.java:149)
    at org.springframework.beans.BeanWrapperImpl.getCachedIntrospectionResults(BeanWrapperImpl.java:305)
    at org.springframework.beans.BeanWrapperImpl.getPropertyDescriptorInternal(BeanWrapperImpl.java:335)
    at org.springframework.beans.BeanWrapperImpl.isWritableProperty(BeanWrapperImpl.java:407)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1327)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
    ... 19 more
3
IMO dit moet worden geherformuleerd als een vraag die je beantwoordt en accepteert.
toegevoegd de auteur Dave Newton, de bron
Klinkt logisch. Bedankt.
toegevoegd de auteur Martin Becker, de bron

1 antwoord

Er zijn nogal wat berichten met betrekking tot deze iusse, maar de meeste van hen verwijzen naar het probleem als zijnde veroorzaakt door het hebben van een Spring 2-afhankelijkheid ergens in het klassenpad dat niet het geval voor mij was:

De eerste link noemt een onverenigbaarheid met Spring 2 omdat de BeanFactory in Lente 3 is geparametreerd, maar niet in Lente 2. Welnu, het echte probleem was dat ik een afzonderlijke MyBatis-versie had ( 3.0.4 ) in mijn afhankelijkheden. Ik heb versie 3.0.4 gewijzigd in versie 3.0.6 en alles werkte prima. Meestal, als iemand ergens in het project geen aparte MyBatis-afhankelijkheid heeft (of ouderprojecten!), Wordt het mybatis-springartefact van Maven geleverd met MyBatis 3.0.6 .

Kanttekening: Ik had nog een aantal problemen met het Maven-afhankelijkheidsbeheersysteem dat ik gebruikte omdat de gewijzigde afhankelijkheid van pom.xml niet doorwerkt naar de projecten op het hoogste niveau. Het is duidelijk dat na het uitvoeren van een mvn schone installatie -Dmaven.text.skip = ware afhankelijkheden zijn doorgegeven aan de projecten op het hoogste niveau en dat alles werkte.

2
toegevoegd
Had hetzelfde probleem: opgelost door eerst afzonderlijke mybatis-afhankelijkheid te verwijderen en vervolgens een aantal 2.X-lenteafhankelijkheden te verwijderen.
toegevoegd de auteur sibidiba, de bron