2010-10-19 39 views
7

BẤT K advice lời khuyên nào sẽ được đánh giá cao. Tôi bối rối ...Lỗi khi tạo bean có tên 'sessionFactory': MalformedParameterizedTypeException

Vấn đề

Mở máy tính xách tay của tôi, bất cứ lúc nào ứng dụng của chúng tôi cố gắng để tải ứng dụng config.xml, tôi nhận được một java.lang.reflect.MalformedParameterizedTypeException.

Mã giống nhau CHÍNH XÁC hoạt động trên máy tính để bàn và máy tính để bàn/máy tính xách tay của đồng nghiệp của tôi. Nhưng trên máy tính xách tay của tôi nó ném lỗi này. Vì máy tính xách tay và máy tính để bàn của tôi là môi trường phát triển chính xác giống nhau (dự án Java 1.6 Maven trong Eclipse trên Mac OS X Leopard), tôi đã thu hẹp nguyên nhân bằng cách làm như sau:

  • Đã kiểm tra một dự án mới từ Subversion (vì vậy có sự khác biệt code)
  • sao chép qua và thay thế toàn bộ thư mục Eclipse của tôi (vì vậy không Eclipse khác biệt phiên bản/plugin)
  • sao chép qua và thay thế toàn bộ thư mục .m2 của tôi (vì vậy có sự khác biệt phụ thuộc maven/dự án)

Điều gì có thể gây ra lỗi này ở một nơi nhưng không phải là lỗi khác? Dưới đây là một đoạn của đậu và lỗi liên quan ...


Snippet: ứng dụng 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 Lỗi 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:

Cập nhật - Tôi vừa tìm thấy một đầu mối khác, không có kiểm tra JUnit liên quan đến cơ sở dữ liệu nào hoạt động. Trên máy tính để bàn của tôi, tất cả đều vượt qua. Trên máy tính xách tay của tôi, tất cả họ đều thất bại với các ngoại lệ sau đây:

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

Bất kỳ và tất cả các lời đề nghị chào đón! Cảm ơn!

+0

Tôi nghĩ là @Bozho và những người khác. Tôi biết không phải là có thể xảy ra, nhưng bạn có chắc chắn cả hai biến môi trường CLASSPATH là như nhau? – sinuhepop

Trả lời

16

Tôi cho rằng bạn có lọ mùa xuân sai - có lẽ một cho mùa xuân 2.5 và một cho 3.0. Trình nạp lớp tải, ví dụ, Spring-Core cho phiên bản 3.0, và phần còn lại cho 2.5. Điều này sẽ dẫn đến các lỗi như vậy.

Tôi khuyên bạn nên xem biểu đồ phụ thuộc maven của mình và xóa tất cả các biểu đồ thừa. Nếu cần, hãy sử dụng <exclusions> trong pom của bạn.

Trước khi làm sạch dự án của bạn trên tất cả các máy.

+0

Tôi cũng nghĩ về điều đó. Nhưng tại sao hành vi không phù hợp với các máy khác? –

+0

@Pascal - có thể là bản dựng chưa được dọn dẹp ở đó gần đây. Hoặc (đó là một dự đoán hoang dã) trình nạp lớp của Mac JVM đang tải các lọ theo thứ tự khác nhau. – Bozho

+0

có khả năng đi đúng hướng; phương thức mà nó phàn nàn về - hàm tạo InjectionMetadata (Lớp, Bộ sưu tập) - chỉ tồn tại trong 3.0. – Ladlestein

0

Tôi đã gặp lỗi tương tự khi cố chạy dịch vụ Mule trên Mule ESB được nhúng trong Tomcat.Giải pháp là thay đổi JDK từ mặc định:

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) 

để tốt cũ 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) 

tất nhiên, nó có thể đã được phát hành bản/bản vá. Nếu tôi chỉ có thời gian để điều tra ...

1

Tôi đã gặp vấn đề tương tự và một biện pháp khác đã giúp: xóa toàn bộ thư mục .metadata. Sau đó nhập dự án từ vị trí của họ hoặc kiểm tra chúng từ svn (nếu bạn sử dụng một số). Vấn đề là chúng ta không thực sự biết, siêu dữ liệu nào bị hỏng, vì vậy bước tiếp theo tự nhiên là xóa tất cả chúng. Tôi nghĩ, đó là việc dọn dẹp sâu nhất có thể ngoài việc cài đặt lại các plugin Eclipse +.

Các vấn đề liên quan