我在jboss中遇到了问题。当我尝试将.war部署到服务器中时,出现以下错误,
java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl cannot be cast to javax.xml.parsers.SAXParserFactory
由此很明显,库之间存在冲突。因此,我删除了包含xerces的jar文件,该文件由jaxp-ri-1.4.1.jar碰巧出现。现在,当我尝试重新部署时,出现了这个新错误,

java.lang.NullPointerException
    at org.apache.commons.digester.Digester.getXMLReader(Digester.java:944)
    at org.apache.commons.digester.Digester.parse(Digester.java:1765)
    at org.apache.struts.action.ActionServlet.initServlet(ActionServlet.java

在提示找不到XML解析器的地方。

所以,现在我的问题是,有人知道什么可以作为解决方案。任何不包含xerces软件包的jaxp jar文件?

更新

我按照建议的here进行操作,现在出现了一个新错误,
java.lang.NoClassDefFoundError: Could not initialize class com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl

这是我删除的其中一个包含SaxParserFactory的jar之一的类:(

最佳答案

看来您删除了错误的JAR。当将SAXParserFactoryImpl(它是SAXParserFactory的子类型)的实例强制转换为SAXParserFactory时,报告了最初的ClassCastException。

该异常更有可能是由于在JVM中加载了两个SAXParserFactory实例而不是两个SAXParserFactoryImpl实例。在进行转换时,返回了由其他类加载器加载的SAXParserFactory,从而导致异常。因此,解决方案是在您的类路径中标识具有SAXParserFactory版本冲突的JAR。如果Commons Digester正在寻找特定的实现,则删除解析器实现本身可能并不明智。

关于java - 类强制转换异常: com. sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4278213/

10-11 00:10