javax.xml.parsers.SAXParserFactory ClassCastException

2022-09-03 03:50:27

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

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清理后第一次运行mvn测试时,错误没有出现。但是一旦我再次运行mvn测试(没有干净,就会发生异常)(当我从IntelliJ运行它时)。

当我在cmd行上运行它时,几个mvn测试调用就可以工作了。


答案 1

我发现了问题。这与试图加载SAXParserFactory的PowerMockito有关。我没有弄清楚的原因是因为堆栈跟踪只包含两次PowerMockito,而这在中间:-)

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

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

这解决了我的情况。


答案 2

您的JDK可能有自己的SAXParserFactoryImpl。

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

您的服务器可能会使用来自服务器的服务器。

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


推荐