`
goodjin
  • 浏览: 32980 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用dom4j发现的一个问题

    博客分类:
  • java
阅读更多

在使用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 jar包 所有的包 xml解析 dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1 导入直接使用

    dom4j dom4j dom4j dom4j

    dom4j dom4j dom4j dom4j dom4j dom4j

    XSD使用dom4j校验XML

    XSD使用dom4j校验XML

    Dom4j_使用简介

    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解析XML

    dom4j API包含一个解析XML文档的工具。本文中将使用这个解析器创建一个示例XML文档,然后使用同一个解析器修改。与W3C DOM API相比,使用dom4j所包含的解析器的好处是dom4j拥有本地的XPath支持。DOM解析器不支持使用...

    DOM4J帮助文档及使用教程

    这个压缩包是一个关于DOM4J的压缩包,里面包含了DOM4J的帮助文档,DOM4J的使用教程,以及DOM4J这个JAVA包。保证这个压缩包是网上面最全的有关DOM4J的文档。

    资源jar包dom4j-1.6.1.rar

    dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以...

    使用dom4j创建一个xml文件刘宝宝版

    使用dom4j创建一个xml文件刘宝宝版:笔记以及项目

    dom4j-2.1.1-API文档-中英对照版.zip

    赠送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.1

    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源...

    dom4j-2.1.1-API文档-中文版.zip

    赠送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是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) 欢迎下载

    dom4j-1.6.1.jar,Dom4j是一个Java的XML API接口,是jdom的进化版,dom4j基本用来读写xml文件,是一个十分优秀的JavaXML API接口

    dom4j_dom4j1.6.1安装包_

    maven dom4j 1.6.1安装包

    使用dom4j 和本地dom 解析xml 文件

    使用dom4j 和本地dom 解析xml 文件

    DOM4J 的使用

    详细的描述了DOM4J中对象的使用,更通过大量的例子来让你理解和掌握。

    dom4j.rar=dom4j API+dom4j.jar

    dom4j.rar 包括dom4j API帮助文档和dom4j.jar包.dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点

    使用 dom4j 解析 XML

    使用 dom4j 解析 XML dom4j 解析 XML dom4j解析xml

    DOM4J的jar包和API

    Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。 使用Dom4j开发,需下载dom4j相应的jar文件。

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    dom4j-1.6.1.zip与 dom4j-2.0.0-ALPHA-2.jar

Global site tag (gtag.js) - Google Analytics