Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用castor解组的NoClassDefFoundError_Java_Spring Batch_Unmarshalling_Castor - Fatal编程技术网

Java 使用castor解组的NoClassDefFoundError

Java 使用castor解组的NoClassDefFoundError,java,spring-batch,unmarshalling,castor,Java,Spring Batch,Unmarshalling,Castor,我在Spring批处理中使用Castor来解组XML时遇到了一个非常奇怪的NoClassDefFoundError。在我显示任何其他内容之前,这里是堆栈跟踪: java.lang.NoClassDefFoundError: com/example/test/STLTRANSACTIONINFO (wrong name: com/example/test/StlTransactionInfo) at java.lang.ClassLoader.defineClass1(Native Method)

我在Spring批处理中使用Castor来解组XML时遇到了一个非常奇怪的NoClassDefFoundError。在我显示任何其他内容之前,这里是堆栈跟踪:

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的整个映射定义进行注释,我也会得到相同的错误。

我只是简单地将java类重命名为全大写,这就成功了


这绝对是一个黑客解决方案,现在可以解决这个问题,但我想我会发布它,这样如果有人遇到同样的问题,需要尽快解决,他们可以应用快速修复。在接下来的几天里,我将尝试找出真正的根本原因,如果发现任何问题,我将更新答案。

我唯一一次看到来自NoClassDefFoundError的错误名称消息是源代码打包时,但编译的类不存在于镜像包声明的目录中。您应该检查jar文件的内部,或者com/example/test/存在并包含编译类的应用程序的构建路径。谢谢您的输入,但这里不是这样。刚刚验证了目录结构与包结构匹配。刚刚查看了您的编辑并仔细检查了maven生成的jar,并且该类位于正确位置。包含该类的jar文件是可执行jar吗?如果没有,请检查以确保可执行jar在其manifest.mf文件中有一个指向包含StlTransactionInfo类的jar的类路径条目。这可能是castor的错误吗?有没有什么变通方法可以尝试,比如在映射文件中使用不同的语法或其他什么?