Подтвердить что ты не робот

Ошибка Xerces: org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl

Я разрабатываю веб-приложение с использованием 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 - я не знаю, почему я получаю эту ошибку. Хотя я могу в конечном итоге запустить свой проект, было бы намного лучше, если бы я не получал эту ошибку.

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

4b9b3361

Ответ 1

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

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

Ответ 2

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