Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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 JBoss EAP 6.3/Castor 1.0-MappingException:找不到类_Java_Jboss Eap 6_Castor - Fatal编程技术网

Java JBoss EAP 6.3/Castor 1.0-MappingException:找不到类

Java JBoss EAP 6.3/Castor 1.0-MappingException:找不到类,java,jboss-eap-6,castor,Java,Jboss Eap 6,Castor,将以前的WebSphere Java EE应用程序移动到JBoss EAP 6.3时,调用Castor 1.0的org.exolab.Castor.xml.Marshaller对象的marshall(Object)方法时引发运行时异常: org.exolab.castor.mapping.MappingException:嵌套错误:org.exolab.castor.mapping.MappingException:找不到类 {完全限定Java类名} (封送拆收器正在尝试将对象序列化为XML。)

将以前的WebSphere Java EE应用程序移动到JBoss EAP 6.3时,调用Castor 1.0的org.exolab.Castor.xml.Marshaller对象的marshall(Object)方法时引发运行时异常:

org.exolab.castor.mapping.MappingException:嵌套错误:org.exolab.castor.mapping.MappingException:找不到类
{完全限定Java类名}

(封送拆收器正在尝试将对象序列化为XML。)

我没有看到明显的类路径问题。这个使用JBossDeveloperStudio编译良好的应用程序似乎没有理由在运行时失败

问题发生在mapping.xml文件中描述的第一个Java类上——而不是我试图序列化的类,除非碰巧它是mapping.xml文件中的第一个类


问题可能是什么?解决方案是什么?

在搜索了谷歌之后,我在2002年的这个讨论帖子中找到了解决方案:

根据Fred Loney在该讨论线程中的说法:

jboss lib castor.jar驻留在类加载器中,该类加载器是webapp类加载器的父类。Castor依赖于内省,并尝试使用其classloader上下文(而不是webapp或线程上下文)解析映射的类。因此,找不到映射的应用程序类。。。。Castor默认情况下应该使用当前线程上下文类加载器,但它不使用。这是其他依赖内省的开源中间件项目(如cactus)的常见故障

按照该线程中建议的建议,我将代码更改为,而不是使用默认构造函数org.exolab.castor.mapping.mapping,而是使用接受ClassLoader参数的构造函数,并使用我尝试序列化的对象类的ClassLoader

Object objectToSerialize = ...

// I previously used Mapping's default constructor
Mapping mapping = new Mapping(objectToSerialize.getClass().getClassLoader());
// Set other properties of mapping, such as entityResolver, mapping file, etc.

StringWriter stringWriter = new StringWriter();
Marshaller marshaller = new Marshaller(stringWriter);
marshaller.setMapping(mapping);
marshaller.marshal(objectToSerialize);

// stringWriter now contains the serialized data from objectToSerialize
我希望弗雷德·隆尼的小费能帮助别人。我花了一段时间在网上找到问题和解决方案