Java JBoss EAP 6.3/Castor 1.0-MappingException:找不到类
将以前的WebSphere Java EE应用程序移动到JBoss EAP 6.3时,调用Castor 1.0的org.exolab.Castor.xml.Marshaller对象的marshall(Object)方法时引发运行时异常: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。)
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
我希望弗雷德·隆尼的小费能帮助别人。我花了一段时间在网上找到问题和解决方案