我对 jboss 中的一个问题感到震惊。当我尝试将 .war 部署到服务器时,出现以下错误,
java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.SAXParserF
actoryImpl 无法转换为 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/