2010-10-19 9 views
7

Jeder Rat würde geschätzt werden. Ich bin ratlos ...Fehler beim Erstellen von Bean mit dem Namen 'sessionFactory': MalformedParameterizedTypeException

Problem

Auf meinem Laptop, zu jeder Zeit unsere Anwendung versucht, die Anwendung-config.xml zu laden, erhalte ich eine java.lang.reflect.MalformedParameterizedTypeException.

Der GENAUE gleiche Code funktioniert auf meinem Desktop und dem Desktop/Laptop meines Kollegen. Aber auf meinem Laptop wirft es diesen Fehler auf. Da mein Laptop und Desktop genau die gleiche Entwicklungsumgebung (Java 1.6 Maven-Projekt in Eclipse auf Mac OS X Leopard) sind, habe ich die Ursachen eingrenzen, indem Sie folgendermaßen vorgehen:

  • für ein neues Projekt von Subversion ausgecheckt (also keine Code-Unterschiede)
  • kopiert und ersetzt mein gesamtes Eclipse-Verzeichnis (also keine Eclipse-Version/Plugin Unterschiede)
  • über kopiert und ersetzt mein ganzes .m2 Verzeichnis (also keine maven/Projektabhängigkeit Unterschiede)

Was könnte möglicherweise verursachen dieser Fehler an einem Ort, aber nicht der andere? Unten ist ein Ausschnitt aus den verwandten Bohnen und Fehler ...


Snippet: application-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:tx="http://www.springframework.org/schema/tx" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> 

... 
    <bean id="dataServiceRepository" class="com.saic.gnosis.dao.DataServiceDao"> 
    <constructor-arg ref="sessionFactory" /> 
    </bean> 
... 
    <bean id="implementationRepository" class="com.saic.gnosis.dao.ImplementationDao"> 
    <property name="dataServiceRepository" ref="dataServiceRepository" /> 
    <property name="implementationDetailRepository" ref="implementationDetailRepository" /> 
    <property name="implementationStrategyFactory" ref="implementationStrategyFactory" /> 
    </bean> 
... 
    <bean id="implementationStrategyFactory" class="com.saic.gnosis.plant.ImplementationStrategyPlant" /> 
... 
    <bean id="implementationDetailRepository" class="com.saic.gnosis.dao.ImplementationDetailDao"> 
    <constructor-arg ref="sessionFactory" /> 
    </bean> 
... 
    <bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="mysqlDataSource" /> 
    <property name="packagesToScan"> 
     <list> 
      <value>com.saic.gnosis.model</value> 
      <value>com.saic.gnosis.model.observable</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.show_sql">false</prop> 
      <prop key="hibernate.c3p0.min_size">2</prop> <!-- Minimum number of Connections a pool will maintain at any given time. --> 
      <prop key="hibernate.c3p0.max_size">9</prop> <!-- Maximum number of Connections a pool will maintain at any given time. --> 
      <prop key="hibernate.c3p0.timeout">10</prop> <!-- Seconds a Connection can remain pooled but unused before being discarded. 
       Zero means idle connections never expire. --> 
      <prop key="hibernate.c3p0.max_statements">0</prop> <!-- The size of c3p0's global PreparedStatement cache. If both maxStatements 
       and maxStatementsPerConnection are zero, statement caching will not be enabled. 
       If maxStatements is zero but maxStatementsPerConnection is a non-zero value, 
       statement caching will be enabled, but no global limit will be enforced, 
       only the per-connection maximum. maxStatements controls the total number 
       of Statements cached, for all Connections. If set, it should be a fairly 
       large number, as each pooled Connection requires its own, distinct flock 
       of cached statements. As a guide, consider how many distinct PreparedStatements 
       are used frequently in your application, and multiply that number by maxPoolSize 
       to arrive at an appropriate value. Though maxStatements is the JDBC standard 
       parameter for controlling statement caching, users may find c3p0's alternative 
       maxStatementsPerConnection more intuitive to use. --> 
     </props> 

     </property> 
    </bean> 

    <bean id="mysqlDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
    destroy-method="close"> 
      <property name="driverClass" value="com.mysql.jdbc.Driver" /> 
      <property name="jdbcUrl" value="jdbc:mysql://database.com/ourProject" /> 
      <property name="user" value="ourUser" /> 
      <property name="password" value="ourPass" /> 
      <property name="initialPoolSize" value="4" /> 
    </bean> 

    <bean id="transactionManager" 
    class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
      <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 


Snippet: JUnit Fehler Trace:

java.lang.ExceptionInInitializerError 
     at com.saic.gnosis.updater.task.ConnectionCommandFileWriterTask.<init>(ConnectionCommandFileWriterTask.java:16) 
     at com.saic.gnosis.updater.CiscoDeviceConfiguratorTest.initializeSpyObjects(CiscoDeviceConfiguratorTest.java:120) 
     at com.saic.gnosis.updater.CiscoDeviceConfiguratorTest.initializeTestObjects(CiscoDeviceConfiguratorTest.java:110) 
     at com.saic.gnosis.updater.CiscoDeviceConfiguratorTest.setUp(CiscoDeviceConfiguratorTest.java:105) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) 
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) 
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
     at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 
     at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) 
     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'implementationRepository' defined in class path resource [beans/application-config.xml]: Cannot resolve reference to bean 'dataServiceRepository' while setting bean property 'dataServiceRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataServiceRepository' defined in class path resource [beans/application-config.xml]: Cannot resolve reference to bean 'sessionFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [beans/application-config.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275) 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) 
     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) 
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
     at com.saic.gnosis.dao.BeanDao.<clinit>(BeanDao.java:35) 
     ... 28 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataServiceRepository' defined in class path resource [beans/application-config.xml]: Cannot resolve reference to bean 'sessionFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [beans/application-config.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275) 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104) 
     at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:495) 
     at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:162) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:925) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:835) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269) 
     ... 46 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [beans/application-config.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269) 
     ... 61 more 
Caused by: java.lang.reflect.MalformedParameterizedTypeException 
     at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:42) 
     at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:35) 
     at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:77) 
     at sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:86) 
     at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:122) 
     at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31) 
     at sun.reflect.generics.repository.ClassRepository.getSuperInterfaces(ClassRepository.java:82) 
     at java.lang.Class.getGenericInterfaces(Class.java:794) 
     at org.springframework.core.GenericTypeResolver.getTypeVariableMap(GenericTypeResolver.java:161) 
     at org.springframework.core.GenericTypeResolver.resolveReturnType(GenericTypeResolver.java:99) 
     at org.springframework.beans.GenericTypeAwarePropertyDescriptor.getPropertyType(GenericTypeAwarePropertyDescriptor.java:88) 
     at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:138) 
     at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:386) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1289) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1250) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) 
     ... 70 more 


EDIT:

Update - Ich habe gerade einen anderen Hinweis gefunden, keiner unserer Datenbank-bezogenen JUnit-Tests arbeiten. Auf meinem Desktop gehen alle durch. Auf meinem Laptop, sie alle scheitern mit folgender Ausnahme:

java.lang.NoSuchMethodError: org.springframework.beans.factory.annotation.InjectionMetadata.<init>(Ljava/lang/Class;Ljava/util/Collection;)V 

Irgendwelche und alle Vorschläge willkommen! Vielen Dank!

+0

Ich denke als @Bozho und andere. Ich weiß, ist nicht wahrscheinlich, aber sind Sie sicher, dass beide CLASSPATH-Umgebungsvariablen gleich sind? – sinuhepop

Antwort

16

Ich nehme an, Sie haben falsche Frühlingsgläser - vielleicht eine für Frühjahr 2.5 und eins für 3.0. Der Classloader lädt beispielsweise Spring-Core für Version 3.0 und der Rest für 2.5. Dies würde zu solchen Fehlern führen.

Ich würde vorschlagen, gehen Sie durch Ihre Maven Abhängigkeitsdiagramm und entfernen Sie alle überflüssigen. Verwenden Sie ggf. <exclusions> in Ihrem Pom.

Vorher reinigen Sie Ihr Projekt auf allen Maschinen.

+0

Ich dachte auch darüber nach. Aber warum ist das Verhalten nicht konsistent mit den anderen Maschinen? –

+0

@Pascal - es könnte sein, dass der Build in letzter Zeit nicht aufgeräumt wurde. Oder (das ist eine wilde Vermutung) der Klassenlader der Mac JVM lädt die Gläser in anderer Reihenfolge. – Bozho

+0

ist wahrscheinlich auf der richtigen Spur; Die Methode, über die sie sich beschweren - der Konstruktor InjectionMetadata (Class, Collection) - existiert nur in 3.0. – Ladlestein

0

Ich hatte ähnliche Fehler beim Versuch, Mule-Service auf Mule ESB in Tomcat eingebettet auszuführen.Die Lösung wurde auf JDK von Standard zu ändern:

java version "1.6.0_18" 
OpenJDK Runtime Environment (IcedTea6 1.8.1) (6b18-1.8.1-0ubuntu1) 
OpenJDK 64-Bit Server VM (build 16.0-b13, mixed mode) 

zu guten alten Sun JDK:

java version "1.6.0_20" 
Java(TM) SE Runtime Environment (build 1.6.0_20-b02) 
Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01, mixed mode) 

natürlich könnte es Version/Patch-Problem gewesen sein. Wenn ich nur die Zeit hätte zu untersuchen ...

1

Ich hatte die gleichen Probleme und eine andere Maßnahme geholfen: Löschen Sie den gesamten Ordner .metadata. Später importiere Projekte von ihrem Platz oder check sie von der Svn (wenn Sie einige verwenden). Das Problem ist, dass wir nicht wirklich wissen, welche Metadaten kaputt sind. Der nächste logische Schritt ist also, alle zu löschen. Ich denke, es ist die tiefste Reinigung abgesehen von der Neuinstallation von Eclipse + -Plugins.

Verwandte Themen