繁体   English   中英

javax.xml.parsers.SAXParserFactory ClassCastException

[英]javax.xml.parsers.SAXParserFactory ClassCastException

当我通过maven运行测试时,我在本地机器上遇到以下异常(mvn test)。

ch.qos.logback.core.joran.event.SaxEventRecorder@195ed659 - Parser configuration error occured 
java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl cannot be cast to javax.xml.parsers.SAXParserFactory

在谷歌搜索后,我遇到了几个页面,描述了它背后的主要问题(在不同的类加载器中有几个SAXParserFactoryImpl)。

- > http://www.xinotes.org/notes/note/702/

我的问题是,如何确定哪个库也提供SAXParserFactoryImpl,以便我可以排除它。 我正在使用Maven,IntelliJ和JDK 1.6.0_23。 问题出现在命令行以及从IntelliJ运行测试时。

但奇怪的是,在构建服务器上,这个问题不会发生。

更新1

刚刚想到,当我在mvn clean之后第一次运行mvn测试时,错误没有出现。 但是一旦我再次运行mvn test(没有干净,就会发生异常)(当我从IntelliJ运行它时)。

当我在cmd行上运行它时,几个mvn测试调用确实有效。

我发现了这个问题。 它与试图加载SAXParserFactory的PowerMockito有关。 我之所以没有想到这一点是因为stacktrace只包含两次PowerMockito,而这只是在中间:-)

因此,如果您在IntelliJ中找出此问题并且确实使用了PowerMockito,请使用以下注释注释您的测试类:

@PowerMockIgnore(["javax.management.*", "javax.xml.parsers.*",
         "com.sun.org.apache.xerces.internal.jaxp.*", "ch.qos.logback.*", "org.slf4j.*"])

这解决了我的问题。

您的JDK可能有自己的SAXParserFactoryImpl。

检查像xercesImpl,xml / xml-api和sax这样的罐子。

可能会使用服务器中的一台服务器。

你可以使用jarfinder: http//www.jarfinder.com/index.php/java/search/~SAXParserFactoryImpl~

我今天遇到了同样的错误。 经过大量挖掘后,我发现这里的解决方案或其他地方的解决方案都没有用。

然而,在玩完之后,我找到了一个确定性的解决方案,不像所接受的答案不适用于所有情况。

答案是,查看堆栈跟踪以查找任何ClassCast异常,并将它们添加到\\ @PowerMockIgnore列表中。 不断重复,直到问题解决。 对我来说就像魔术一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM