ClassCastException: org.apache.xerces.parsers.XIncludeAwareParserConfiguration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration
Asked Answered
T

7

18

I am developing a GWT application in Eclipse and use jdom2 to read some custom xml property files.

Following a recent update my application now fails with the above error when trying to read the xml file. The relevant stack trace is:

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)

Researching this problem suggests that the error can arise when incompatible versions of the xerces jars exist on the classpath.

gwt-dev-2.6.1.jar contains the xerces packages and my hunch is that this latest version of gwt-dev has bundled a version that is incompatible. However jdom2.0.5, the current release, is released with the 2.11 version of Xerces which seems to be the latest released by Apache. Putting these jars on my classpath doesn't seem to resolve matters; I have previously been able to rely on the versions in gwt-dev.

I am rather at my wits' end about this and considerably out of my comfort zone.

Tamper answered 17/7, 2014 at 13:45 Comment(1)
Try to remove GWT from your project, and then add it back. Also, make sure you don't have duplicate jars (old and new) in your WEB-INF/lib folder.Decentralization
J
14

I had a same exception when I upgraded my project from GWT 2.7 to GWT 2.8. I have no idea why I had not this problem with GWT 2.7 (maybe different position of in .classpath file of Eclipse project could affect it).

The reason for that exception was that before with such code like:

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

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();

the implementations from JDK package com.sun.org.apache.xerces.internal.jaxp was used, but after upgrade to GWT2.8 my app chose the xerces from gwt-dev.jar. I found the fix for that according to Javadoc and link here to used system properties

-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
-Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
Judi answered 9/1, 2017 at 10:12 Comment(2)
Thanks, had the exact same problem, and the fix you proposed worked fine.Kobold
Where exactly do you add these lines in Eclipse so that it starts with this property? I tried adding them to my run configuration, GWT Dev Mode Arguments, but they didn't recognize the lines.Mall
N
3

In my case I resolved this issue by adding to bootstrap entities (Classpath tab in run configuration) two entries /xml-apis/xml-apis/1.4.01/xml-apis-1.4.01.jar and /xerces/xercesImpl/2.11.0/xercesImpl-2.11.0.jar from my local maven repository

Numeral answered 7/9, 2014 at 9:54 Comment(0)
D
2

This is a bit late, but after reading through the answers I did find one way to work around this problem. Instead of building your document factory with the normal DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); you could use the parameters in newInstance to specifically choose. This way you don't have to add JVM parameters like Svarog's answer above, and you don't have to add or remove libraries. My solution is as follows:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance("com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl", this.getClass().getClassLoader());
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new FileInputStream("path/to/file.xml"));
Dort answered 20/6, 2017 at 9:18 Comment(0)
D
0

The order of the jars on the classpath matters. Did you try adding the Xerces 2.11 jar at the beginning of the classpath so it gets loaded first?

Daisie answered 17/7, 2014 at 14:33 Comment(0)
T
0

Don't fight with Maven: if things aren't used together, they should go in separate maven modules. In your case, JDom is (probably) used on the server-side, which doesn't need gwt-dev. So the solution is to split your project into several Maven modules: one for the client-side that depends on GWT, and one for the server-side that doesn't (or possibly on gwt-servlet if you use GWT-RPC, or on requestfactory-server if you use RequestFactory).

That said, even with a single project, if you do have gwt-dev in your classpath at runtime, then you got something wrong in your POM.

…unless you're reading your XML files at build-time?

Tanika answered 18/7, 2014 at 8:52 Comment(0)
E
0

In my case this was resolved by deleting the xerces directory in my local sbt cache (local maven repository if you use maven), and rebuilding the project.

Entero answered 27/11, 2015 at 14:16 Comment(0)
A
0

The default JAXB implementation of WebLogic 12c causing the problem and you need to override the jaxb at the weblogic server startup. Add the below classpath to startWebLogic.cmd before echo CLASSPATH=%CLASSPATH%

SET CLASSPATH=C:\Oracle\Middleware\Oracle_Home\wlserver\modules\databinding.override.jar;%CLASSPATH%

Tow JARS are added to support weblogic 12c.

  1. jaxb-core.jar
  2. jaxb-impl.jar
Abbotsun answered 20/11, 2018 at 7:24 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.