类Castexception:com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

我对jboss的一个问题感到震惊。 当我尝试将.war部署到服务器时,我收到以下错误,

java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.SAXParserF actoryImpl 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文件?

更新

我这样做了 ,现在我有一个新的错误,

 java.lang.NoClassDefFoundError: Could not initialize class com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl 

这是我删除的一个jar子里的一个类,里面包含SaxParserFactory 🙁

您似乎删除了错误的JAR。 当SAXParserFactoryImpl的实例(它是SAXParserFactory的子类型)被强制转换为SAXParserFactory时,会报告原始的ClassCastException。

exception更可能是由于SAXParserFactory有两个实例,而不是在JVM中加载了两个SAXParserFactoryImpl实例。 在转换时,返回由不同类加载器加载的SAXParserFactory导致exception。 因此,修复是在类路径中标识具有冲突版本的SAXParserFactory的JAR。 如果Commons Digester正在寻找特定的实现,那么删除解析器实现本身可能并不明智。

我猜…你正在使用JBoss 5.1。 如果是这样,那么它是xml解析器和类加载问题。 您必须定义jboss-classloading.xml

见http://www.coderanch.com/t/523519/JBoss/Cast和http://www.mastertheboss.com/jboss-application-ser…oss-5-classloading-issues.html