ClassCastException:org.apache.xerces.parsers.XIncludeAwareParserConfiguration无法强制转换为org.apache.xerces.xni.parser.XMLParserConfiguration

ejo*_*web 8 java eclipse gwt xerces jdom

我正在Eclipse中开发一个GWT应用程序并使用jdom2来读取一些自定义的xml属性文件.

在最近的更新之后,我的应用程序现在在尝试读取xml文件时失败并出现上述错误.相关的堆栈跟踪是:

org.apache.xerces.parsers.XIncludeAwareParserConfiguration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration
org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.<init>(Unknown Source)
org.apache.xerces.jaxp.SAXParserImpl.<init>(Unknown Source)
org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(Unknown Source)
org.jdom2.input.sax.XMLReaders.createXMLReader(XMLReaders.java:165)
org.jdom2.input.SAXBuilder.createParser(SAXBuilder.java:871)
org.jdom2.input.SAXBuilder.buildEngine(SAXBuilder.java:854)
org.jdom2.input.SAXBuilder.getEngine(SAXBuilder.java:904)
org.jdom2.input.SAXBuilder.build(SAXBuilder.java:1116)
uk.co.platosys.db.jdbc.DatabaseProperties.loadProperties(DatabaseProperties.java:78)
Run Code Online (Sandbox Code Playgroud)

研究此问题表明,当类路径上存在不兼容的xerces jar版本时,可能会出现错误.

gwt-dev-2.6.1.jar包含xerces包,我的预感是这个最新版本的gwt-dev捆绑了一个不兼容的版本.然而,当前版本的jdom2.0.5与2.11版本的Xerces一起发布,这似乎是Apache最新发布的版本.将这些罐子放在我的类路径上似乎无法解决问题; 我以前能够依赖gwt-dev中的版本.

我宁愿在这方面做到这一点,而且远远超出了我的舒适区.

小智 8

当我将项目从GWT 2.7升级到GWT 2.8时,我遇到了一个例外。我不知道为什么GWT 2.7没有这个问题(也许Eclipse项目的.classpath文件中的不同位置可能会影响它)。

发生这种异常的原因是之前使用了类似以下代码:

DocumentBuilderFactory newInstance = DocumentBuilderFactory.newInstance();
DocumentBuilder newDocumentBuilder = newInstance.newDocumentBuilder();
baseLayoutXmlDocument = newDocumentBuilder.parse( baseLayoutSvgInputStream );

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
Run Code Online (Sandbox Code Playgroud)

使用了JDK包com.sun.org.apache.xerces.internal.jaxp中的实现,但是升级到GWT2.8后,我的应用程序从gwt-dev.jar中选择了xerces。我根据Javadoc找到了解决方法,并在此处链接 到使用的系统属性

-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
-Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
Run Code Online (Sandbox Code Playgroud)


Dav*_*que 0

类路径上 jar 的顺序很重要。您是否尝试在类路径的开头添加 Xerces 2.11 jar,以便首先加载它?