Ошибка java.lang.ClassNotFoundException с использованием перечисления в качестве ключа в Map

<util:map id="myMap" key-type="com.myClass.Foo.******" value-type="com.myClass.Foo">
 <entry>
 <key>
 <value type="com.myClass.Foo.******">ONE</value>
 </key>
 <ref bean="myObj">
 </ref></entry>
</util:map>

Ява:

package com.myClass
public class Foo {
 public enum ****** {ONE, TWO;}
}

Я пытаюсь создать карту из Spring 2.5.

Map<******, foo=""> myMap;
</******,>

я осознаю

nested exception is java.lang.ClassNotFoundException:com.myClass.Foo.******

У меня определенно есть com.myClass.Foo.****** в com.myClass.Foo Я не знаю, почему я получаю java.lang.ClassNotFoundException.

1 ответ

Полное имя вашего класса перечисления

com.myClass.Foo$******

не

com.myClass.Foo.******

Переключите его, и он будет работать. Spring использует отражение, с Class.forName() чтобы получить объект Class для вашего класса и создать экземпляр объекта. forName() ожидает полное имя. Прочтите это, чтобы понять, почему ваше имя класса содержит $.

Обратите внимание, что в более новых версиях Spring, там catch блок, который ловит ClassNotFoundException и пытается forName снова после замены последнего . с $.

licensed under cc by-sa 3.0 with attribution.