ClassCastException: org.apache.xerces.parsers.XIncludeAwareParserConfiguration нельзя преобразовать в org.apache.xerces.xni.parser.XMLParserConfiguration

Я разрабатываю приложение GWT в Eclipse и использую 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)

Исследование этой проблемы предполагает, что ошибка может возникать, когда в пути к классам существуют несовместимые версии банок xerces.

gwt-dev-2.6.1.jar содержит пакеты xerces, и я подозреваю, что эта последняя версия gwt-dev содержит несовместимую версию. Однако текущая версия jdom2.0.5 выпущена с версией Xerces 2.11, которая, по-видимому, является последней, выпущенной Apache. Помещение этих банок в мой путь к классам, похоже, не решает проблемы; Раньше я мог полагаться на версии в gwt-dev.

Я довольно в своем уме об этом и значительно вне моей зоны комфорта.


person ejoftheweb    schedule 17.07.2014    source источник
comment
Попробуйте удалить GWT из своего проекта, а затем добавить его обратно. Кроме того, убедитесь, что в папке WEB-INF/lib нет дубликатов банок (старых и новых).   -  person Andrei Volgin    schedule 17.07.2014


Ответы (7)


У меня было такое же исключение, когда я обновил свой проект с GWT 2.7 до GWT 2.8. Я понятия не имею, почему у меня не было этой проблемы с GWT 2.7 (возможно, на это могло повлиять другое положение в файле .classpath проекта Eclipse).

Причиной этого исключения было то, что раньше с таким кодом, как:

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

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

использовались реализации из пакета JDK com.sun.org.apache.xerces.internal.jaxp, но после обновления до GWT2.8 мое приложение выбрало xerces из gwt-dev.jar. Я нашел исправление для этого в соответствии с 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
person Svarozic    schedule 09.01.2017
comment
Спасибо, была точно такая же проблема, и предложенное вами исправление сработало нормально. - person Massi; 08.06.2018
comment
Куда именно вы добавляете эти строки в Eclipse, чтобы он начинался с этого свойства? Я попытался добавить их в свою конфигурацию запуска GWT Dev Mode Arguments, но они не распознали строки. - person user1207381; 08.07.2020

В моем случае я решил эту проблему, добавив в объекты начальной загрузки (вкладка Classpath в конфигурации запуска) две записи /xml-apis/xml-apis/1.4.01/xml-apis-1.4.01.jar и /xerces/xercesImpl/2.11. .0/xercesImpl-2.11.0.jar из моего локального репозитория maven

person foal    schedule 07.09.2014

Это немного поздно, но после прочтения ответов я нашел один способ обойти эту проблему. Вместо того, чтобы создавать свою фабрику документов с помощью обычного DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();, вы можете использовать параметры в newInstance для конкретного выбора. Таким образом, вам не нужно добавлять параметры JVM, такие как ответ Сварога выше, и вам не нужно добавлять или удалять библиотеки. Мое решение заключается в следующем:

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"));
person JRSofty    schedule 20.06.2017

Порядок банок в пути к классам имеет значение. Вы пытались добавить jar Xerces 2.11 в начало пути к классам, чтобы он загружался первым?

person David Levesque    schedule 17.07.2014

Не спорьте с Maven: если вещи не используются вместе, они должны быть в отдельных модулях maven. В вашем случае JDom (вероятно) используется на стороне сервера, которому не нужен gwt-dev. Таким образом, решение состоит в том, чтобы разделить ваш проект на несколько модулей Maven: один для клиентской стороны, который зависит от GWT, и один для серверной стороны, которая не зависит (или, возможно, на gwt-servlet, если вы используете GWT-RPC, или на requestfactory-server, если вы используете RequestFactory).

Тем не менее, даже с одним проектом, если у вас есть gwt-dev в пути к классам во время выполнения, значит, у вас что-то не так в вашем POM.

…если только вы не читаете XML-файлы во время сборки?

person Thomas Broyer    schedule 18.07.2014

В моем случае это было решено путем удаления каталога xerces в моем локальном кеше sbt (локальный репозиторий maven, если вы используете maven) и перестроения проекта.

person Zoltán    schedule 27.11.2015

Реализация WebLogic 12c JAXB по умолчанию вызывает проблему, и вам необходимо переопределить jaxb при запуске сервера weblogic. Добавьте указанный ниже путь к классам в файл startWebLogic.cmd перед эхом CLASSPATH=%CLASSPATH%

УСТАНОВИТЕ ПУТЬ К КЛАССУ = C:\Oracle\Middleware\Oracle_Home\wlserver\modules\databinding.override.jar;%CLASSPATH%

Добавлены два JARS для поддержки weblogic 12c.

  1. jaxb-core.jar
  2. jaxb-импл.jar
person navin shah    schedule 20.11.2018