2016-07-19 9 views
0

私のアプリケーションを起動すると、なぜspringが私にこのエラーを与えているのか分かりません。私は、パッケージ内のJavaクラスを定義し、Beanインジェクションを介してxmlファイルで呼び出す。org.springframework.beans.TypeMismatchException:値 'java.lang.String'を 'java.lang.Class'に変換できませんでした。

これはこれは私が自分のアプリケーションを起動しようとすると、私が午前エラーの完全なスタックトレースである豆注入

<bean id="sessionFactory" 
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="annotatedClasses"> 
      <list> 
       <value type="java.lang.Class">main.com.mpakhomov.chat.domain.User</value> 
       <value type="java.lang.Class">main.com.mpakhomov.chat.domain.ChatMessage</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
       <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
       <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
       <prop key="hibernate.connection.pool_size">${hibernate.connection.pool_size}</prop> 
      </props> 
     </property> 
    </bean> 

です。

Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Class'; nested exception is java.lang.IllegalArgumentException: Cannot find class [main.com.mpakhomov.chat.domain.User] 
    at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:74) 
    at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:39) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:187) 

クラスがパッケージで定義されていると仮定すると、私は自分のアプリケーションを起動したとき、何が間違っている可能性がしてください?

答えて

0

私はあなたがエンティティのパッケージを宣言するとき、あなたは間違っていることを推測する:

あなたのパッケージがcom.mpakhomovある場合*、あなたは

<list> 
    <value type="java.lang.Class">com.mpakhomov.chat.domain.User</value> 
    <value type="java.lang.Class">com.mpakhomov.chat.domain.ChatMessage</value> 
</list> 
0

<list> 
    <value type="java.lang.Class">main.com.mpakhomov.chat.domain.User</value> 
    <value type="java.lang.Class">main.com.mpakhomov.chat.domain.ChatMessage</value> 
</list> 

を交換する必要があります。

私はvalueタグにtype属性を指定する必要はないと思います。私の推測では、値タグはタイプStringを予期しており、java.lang.classに変換しようとしており、IllegalArgumentExceptionが発生していると考えられます。引数型はここで間違っています。次の行にエラーが表示されます。

Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Class'; nested exception is java.lang.IllegalArgumentException 

<list> 
    <value>main.com.mpakhomov.chat.domain.User</value> 
    <value>main.com.mpakhomov.chat.domain.ChatMessage</value> 
</list> 

はまた春のドキュメントhereに見て、次のようにtype属性を削除してください。 valueタグで型属性を渡していません。以下は、ドキュメントで使用した例です。

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="annotatedClasses"> 
    <list> 
     <value>test.package.Foo</value> 
     <value>test.package.Bar</value> 
    </list> 
    </property> 
</bean> 
関連する問題