JDK 1.6 и Xerces? - PullRequest
       17

JDK 1.6 и Xerces?

10 голосов
/ 17 октября 2011

В моем текущем проекте мы нацелены на среду выполнения JDK 1.6. Для старых версий файлы JAR Xerces связаны в приложении.

Это больше не нужно, верно? В JDK (на некоторое время) есть библиотеки синтаксического анализа XML, включенные в JDK?

Ответы [ 4 ]

21 голосов
/ 17 октября 2011

Эти службы XML подключаются к среде приложения с использованием так называемого механизма «поставщика услуг».

Он работает следующим образом:

  1. Он пытается найти системное свойство, которое точно указывает назаводской класс, который следует использовать.Например, -Djavax.xml.parsers.SAXParserFactory=<some class>.
  2. Если системное свойство не найдено, FactoryFinder ищет свойство в файле специальных свойств.Например, ${java.home}/lib/jaxp.properties.
  3. Если свойство файла не найдено, FactoryFinder ищет описание сервиса в пути к классу META-INF/services/<some service>, например, META-INF/services/javax.xml.parsers.SAXParserFactory.Это файл, который должен содержать имя класса фабрики, например, org.apache.xerces.jaxp.SAXParserFactoryImpl.
  4. Если в пути к классу таких файлов нет, java использует реализацию фабрики по умолчанию.

Так что если вынет системного свойства, указывающего на очевидный фабричный класс, java спокойно выберет подходящую реализацию.

14 голосов
/ 17 октября 2011

Объединение синтаксического анализатора XML не требовалось с 1.4, когда в JRE был добавлен JAXP . Вы должны использовать JAXP, а не напрямую вызывать Xerces. Внутри JRE в любом случае связывает и использует Xerces (с префиксом com.sun).

11 голосов
/ 17 октября 2011

Парсер в JDK был форком Xerces, но он очень глючный.Я бы порекомендовал производственным приложениям всегда использовать версию анализатора Apache.Ошибки редки, но они непредсказуемы, и они влияют не только на угловые случаи, которые не видны в реальной жизни;Я видел много случаев, когда довольно скучные XML-документы анализируются, и поврежденные данные передаются в приложение для значений атрибутов.Sun / Oracle не проявили интереса к решению проблемы.Используйте Apache Xerces каждый раз.

ОБНОВЛЕНИЕ (2018)

Проблемы с версией Jerk Xerces, по-моему, решены в Java 8, насколько я вижу, поэтому этот советустарел.

1 голос
/ 12 июня 2014

Механизм одобрения утвержденных стандартов работает просто отлично.Djava.endorsed.dirs = path_to_folder_conisting_new_library_jars решит проблему с JDK 1.6.

Я проверил вышеуказанное решение в контексте Thymleaf.В некоторых случаях, если вы переходите в режим LEGACYHTML5 и используете анализатор NekoHtml для автозамены незакрытых тегов html, Neko зависит от jar-файлов Xerces.Установка пути к классам не решает проблему.

Спасибо, sn-ushakov.

...