使用 WebLogic 解析 XML 时出现 ClassCastException
Posted
技术标签:
【中文标题】使用 WebLogic 解析 XML 时出现 ClassCastException【英文标题】:ClassCastException while parsing XML with WebLogic 【发布时间】:2011-06-22 23:48:23 【问题描述】:我收到以下错误消息:
java.lang.ClassCastException:weblogic.xml.jaxp.RegistryDocumentBuilderFactory 无法转换为 javax.xml.parsers.DocumentBuilderFactory
我已经浏览了一些论坛来研究这个问题。他们说要删除 xml-apis.jar
或者 JAR 文件有冲突。但即使我执行了所有建议的步骤,我也会遇到同样的错误。
【问题讨论】:
查看此线程中的 sotretus 答案。如果您使用的是 Maven2,它可能适用于您。 forum.springsource.org/archive/index.php/t-22597.html 你确认WEB-INF/lib中没有jar了吗? 我把所有的 jars 都放到了 WEB-INF/lib 文件夹中。但是得到这个错误... [处理 java maven 中的 xerces hell][1] [1]: ***.com/questions/11677572/… 【参考方案1】:就我而言,我设法通过删除 xml-apis 库并升级 XML 处理库来解决这个问题:
从
org.apache.xmlbeans/xmlbeans/2.4.0
进入
org.apache.xmlbeans/xmlbeans/2.6.0
仅供参考,我使用的是 Weblogic 10.3.6.0。
【讨论】:
【参考方案2】:将 xml-beans-1.xb2 删除到 lib 目录。修改了 POM,使其不包含具有以下内容的 jar 文件:
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.0.b2</version>
<scope>provided</scope>
</dependency>
【讨论】:
【参考方案3】:此问题的原因是您在库中有多个具有相同类名的 jar。 转到 WEB-INF/lib 并删除 xml-apis-1.0.b2.jar 和 stax-api-1.0.1.jar 或从 pom.xml 本身中删除它们,你会很高兴的。
【讨论】:
【参考方案4】:我们也有这样的麻烦。错误的原因是在 gwt 库中。 Receipe:从发行版中排除所有 gwt 客户端库。
【讨论】:
【参考方案5】:我想稍微补充一下这个问题的先前答案,以防其他人处于与我相同的情况。由于我使用 CXF 2.2.3,我在 WebLogic 9.2 服务器上遇到了同样的问题。除了删除前面提到的 xml-apis.jar 之外,我还必须删除一个 xmlParserAPIs 库。 由于我使用的是 Maven2,因此只需添加另一个包含即可。
<!-- CXF -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle</artifactId>
<version>$dependency.version.cxf</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>xml-apis</artifactId>
<groupId>xml-apis</groupId>
</exclusion>
<exclusion>
<artifactId>xercesImpl</artifactId>
<groupId>xerces</groupId>
</exclusion>
<exclusion>
<artifactId>xmlbeans</artifactId>
<groupId>org.apache.xmlbeans</groupId>
</exclusion>
<exclusion>
<artifactId>xmlParserAPIs</artifactId>
<groupId>xerces</groupId>
</exclusion>
</exclusions>
</dependency>
希望这对某人有所帮助!
【讨论】:
谢谢。虽然我的设置只需要排除 xml-apis。 就我而言,我不得不使用这个完全排除包,谢谢!【参考方案6】:总是xml-apis.jar
。从你的类路径中删除它们(例如,从你的 webapp 的 WEB-INF/lib 中删除它们)。
【讨论】:
【参考方案7】:我认为巴南是对的。论坛http://forum.springsource.org/showthread.php?t=22597 描述了类似问题的解决方案。
当类路径中有同一个类的多个版本而这些版本由不同的类加载器加载时,通常会发生此类问题。 DocumentBuilderFactory 的一个版本由系统类加载器加载,另一个由企业应用程序的类加载器加载。当您调用 XML 解析器时,将使用该类的父版本。当您投射您的私人版本时,将被使用。这些版本不兼容会导致 ClassCastException。
【讨论】:
以上是关于使用 WebLogic 解析 XML 时出现 ClassCastException的主要内容,如果未能解决你的问题,请参考以下文章
在 Android Studio 中使用 AsyncTask 解析在线 XML 文件时出现 NetworkOnMainThreadException