Ошибка Xerces: org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl - PullRequest
25 голосов
/ 19 января 2011

Я занимаюсь разработкой веб-приложения с использованием JSF 2.0, NetBeans 6.9.1, GlassFish Server 3.1, mojarra 2.0.3 и JasperReports 3.7.6.В мою библиотеку проектов входит файл jar "xerces-2.8.0.jar".Этот файл был импортирован как часть библиотеки Jar-файлов JasperReports.Всякий раз, когда я пытаюсь развернуть, запустить или отладить свой проект через NetBeans, я получаю эту ошибку:

java.lang.Exception: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! DTD factory class org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl does not extend from DTDDVFactory.

После любого изменения в моем проекте моя сборка заканчивается неудачей, и я получаю вышеуказанную ошибку, когда пытаюсьразвернуть, запустить или отладить его.Я должен перезагрузить сервер и запустить / отладить во второй раз.Я искал в Интернете и не могу найти решение этой проблемы.Я посмотрел на рассматриваемый файл jar, и DTDDVFactoryImpl действительно расширяется от DTDDVFactory - я не знаю, почему я получаю эту ошибку.Хотя я могу в конечном итоге запустить свой проект, было бы намного приятнее, если бы я не получал эту ошибку.

Может кто-нибудь сказать, пожалуйста, как я могу это исправить?Нужно ли удалять этот файл из библиотеки моего проекта?Нужно ли обновлять этот файл более новой версией / более старой версией?

Ответы [ 2 ]

22 голосов
/ 22 июля 2011

Если вы предоставляете свой собственный xerces.jar, вы должны делать это с помощью механизма одобренного переопределения стандартов (java -Djava.endorsed.dirs=/path/to/xerces.jar), вам не разрешено просто добавлять его в путь к классам (и рано или поздно возникнут проблемы, если ты сделаешь). Позвольте мне объяснить.

JAXP - это Java API для обработки XML . Создание объектов JAXP (таких как синтаксические анализаторы, трансфомеры XSLT, документы DOM) выполняется с помощью шаблона factory / factory-method , поэтому вы можете подключить новую реализацию JAXP (она должна быть новее, чем та, которая представлена ​​в ваш JRE). Xerces предоставляет (часть) реализацию JAXP и содержит одобренные стандарты ( одобренный стандарт - это API-интерфейс Java, определенный посредством процесса стандартов, отличного от процесса сообщества Java, см. Механизм одобрения утвержденных стандартов ). Если вы не используете ESOM, вы столкнетесь с любыми неприятностями.

0 голосов
/ 19 февраля 2014

Я получил эту ошибку при использовании Selenium с Glassfish. Я справился с этим, скопировав банки XML (xerces-*, xalan-*, xml-apis*, serialize*) со selenium/libs/ до $AS_HOME/lib/endorsed (для Glassfish 2) или $AS_HOME/glassfish/lib/endorsed для Glassfish 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...