2014-01-20 3 views
3

Я получаю очень странный NoClassDefFoundError, используя Castor внутри Spring Batch, чтобы размонтировать XML. Вот трассировки стека, прежде чем я показываю что-нибудь еще:NoClassDefFoundError с использованием кастомизации unmarshalling

java.lang.NoClassDefFoundError: com/example/test/STLTRANSACTIONINFO (wrong name: com/example/test/StlTransactionInfo) 
at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.7.0_21] 
at java.lang.ClassLoader.defineClass(ClassLoader.java:791) ~[na:1.7.0_21] 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.7.0_21] 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) ~[na:1.7.0_21] 
at java.net.URLClassLoader.access$100(URLClassLoader.java:71) ~[na:1.7.0_21] 
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) ~[na:1.7.0_21] 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) ~[na:1.7.0_21] 
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0_21] 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) ~[na:1.7.0_21] 
at java.lang.ClassLoader.loadClass(ClassLoader.java:423) ~[na:1.7.0_21] 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ~[na:1.7.0_21] 
at java.lang.ClassLoader.loadClass(ClassLoader.java:356) ~[na:1.7.0_21] 

мне кажется, что исключение говорит, что по какой-то причине он ищет мое имя класса во всех прописных букв, а затем, когда он говорит, что «неправильное имя: «у него есть правильное имя класса.

Вот мое отображение файла:

<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN" "http://castor.org/mapping.dtd"> 
<mapping> 
    <class name="com.example.test.ExtResponseTransaction"> 
     <map-to xml="EXTRESPONSETRANSACTION" /> 
    </class> 
    <class name="com.example.test.StlTransactionInfo"> 
     <map-to xml="STLTRANSACTIONINFO" /> 
     <field name="keyTranID" type="string"> 
      <bind-xml name="KEYTRANID" node="element"/> 
     </field> 
    </class> 
    <class name="com.example.test.StlTransactionData"> 
     <map-to xml="STLTRANSACTIONDATA"/> 
     <field name="responseString" type="string"> 
      <bind-xml name="RESPONSE" node="element"/> 
     </field> 
    </class> 
    <class name="com.example.test.CSIDResponse"> 
     <map-to xml="RESPONSE"/> 
    </class> 
</mapping> 

Любые идеи? Даже если я комментирую все определение отображения для StlTransactionInfo, я получаю ту же ошибку.

+1

Единственный раз, когда я видел неправильное имя сообщения из NoClassDefFoundError, когда исходный код упакован, но скомпилированный класс не существует в каталоге, который отражает объявление пакета. Вы должны проверить, что внутри вашего файла jar или путь сборки для приложения com/example/test/exists, и у вас есть скомпилированный класс. –

+0

Спасибо за ввод, но не здесь. Просто убедитесь, что структура каталогов соответствует структуре пакета. – Dave4988

+0

Просто увидел, что вы редактировали и дважды проверяли созданный maven банку, и класс находится в нужном месте. – Dave4988

ответ

0

Я просто переименовал классы Java в заглавные буквы, и это сделало трюк.

Это определенно хакерское решение, которое делает трюк на данный момент, но я решил, что опубликую его, если кто-нибудь столкнется с той же проблемой и будет нуждаться в ней, работая как можно скорее, они могут применить быстрое исправление. В ближайшие дни я попытаюсь прикрыть реальную основную причину и обновить ответ, если найду что-нибудь.

Смежные вопросы