我正在使用WebSphere应用程序服务器。在某一点上,我收到的错误是:
com.savvion.sbm.dms.svo.Document incompatible with com.savvion.sbm.dms.svo.Document.
我在网上搜索过,发现错误原因是java中不同类加载器的类加载。
如何使用不同的类加载器阻止类加载。或替代解决方案。
答案 0 :(得分:0)
您有问题的代码可能看起来像这样:
Document d = (Document)object;
其中“object”是在(custom?)类加载器上加载的Document类的实例,而 this 类中引用的Document类(即在“d”的声明中,和在转换中)加载在线程的上下文类加载器上。
因此,正如您所提到的,VM将这些视为两个不同的类,即使字节码完全相同:
如果两个类由相同的类加载器(第2.17.2节)加载并且它们具有相同的完全限定名(第2.7.5节),则它们是相同的类(因此是相同类型)。
http://docs.oracle.com/javase/specs/jvms/se6/html/Concepts.doc.html#20389
您的问题的解决方案取决于您的特定应用程序的构建和部署方式,而且可能并不简单。第一步是查看两个类的加载位置。通过在Java命令行参数中添加“-verbose:class”生成的输出应该显示类所在的JAR文件。