[英]java.lang.ClassCastException: org.apache.xerces.jaxp.SAXParserFactoryImpl incompatible with javax.xml.parsers.SAXParserFactory
[英]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.