在使用dom4j时碰到一个ClassCastException问题:org.dom4j.DocumentFactory不能转换为org.dom4j.DocumentFactory。
同一个类不能相互转换,一般是由于这是两个分别由不同类加载器加载的类的缘故。
检查发现,在一个webapp下和tomcat的shared目录下均存在dom4j的包,因此这两个类应该是分别从这两个包中加载的。
为什么会从两个地方的jar包分别加载同一个类呢?这有点奇怪,于是看了下dom4j的源码,发现问题在DocumentFactory的加载机制上。
DocumentFactory的实现类可以由用户自己指定,因此程序中选择通过ContextClassLoader进行加载,这是合理的,用户指定的类应该是可以通过当前线程的加载器加载。
问题出在:在share中的一人类使用到了dom4j,于是share加载了dom4j中的所有类。
而ContextClassLoader是webapp加载器,于是又从webapp中加载了一次DocumentFactory,并创建实现。
该实现再使用显示转换成share所加载的DocumentFactory类的实例,这样就发生异常了。
解决方法:
1.当然是只在一个地方放置dom4j的包。
2.这种情况不能完全避免,因此也可以在使用dom4j是显示地设置DocumentFactory实例,这样程序主不会再去加载该类了。
3.其实dom4j本身也可以改进一下,检查到用户指定的类以org.dom4j.开头则由当前加载器加载,其他的才通过ContextClassLoader进行加载。
扩展:
在程序中使用到ContextClassLoader加载类的地方也都最好进行检查,如果属于本jar包中的类则改用当前加载器加载。
分享到:
相关推荐
DOM4J jar包 所有的包 xml解析 dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1 导入直接使用
dom4j dom4j dom4j dom4j dom4j dom4j
XSD使用dom4j校验XML
Dom4j_使用简介DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义: Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java ...
dom4j API包含一个解析XML文档的工具。本文中将使用这个解析器创建一个示例XML文档,然后使用同一个解析器修改。与W3C DOM API相比,使用dom4j所包含的解析器的好处是dom4j拥有本地的XPath支持。DOM解析器不支持使用...
这个压缩包是一个关于DOM4J的压缩包,里面包含了DOM4J的帮助文档,DOM4J的使用教程,以及DOM4J这个JAVA包。保证这个压缩包是网上面最全的有关DOM4J的文档。
dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以...
使用dom4j创建一个xml文件刘宝宝版:笔记以及项目
赠送jar包:dom4j-2.1.1.jar; 赠送原API文档:dom4j-2.1.1-javadoc.jar; 赠送源代码:dom4j-2.1.1-sources.jar; 赠送Maven依赖信息文件:dom4j-2.1.1.pom; 包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-...
JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源...
赠送jar包:dom4j-2.1.1.jar; 赠送原API文档:dom4j-2.1.1-javadoc.jar; 赠送源代码:dom4j-2.1.1-sources.jar; 赠送Maven依赖信息文件:dom4j-2.1.1.pom; 包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-...
DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义: Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections ...
dom4j-1.6.1.jar,Dom4j是一个Java的XML API接口,是jdom的进化版,dom4j基本用来读写xml文件,是一个十分优秀的JavaXML API接口
maven dom4j 1.6.1安装包
使用dom4j 和本地dom 解析xml 文件
详细的描述了DOM4J中对象的使用,更通过大量的例子来让你理解和掌握。
dom4j.rar 包括dom4j API帮助文档和dom4j.jar包.dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点
使用 dom4j 解析 XML dom4j 解析 XML dom4j解析xml
Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。 使用Dom4j开发,需下载dom4j相应的jar文件。
dom4j-1.6.1.zip与 dom4j-2.0.0-ALPHA-2.jar