Улучшения функциональности javax.xml.parsers

Изменения в относящихся к синтаксическому анализу интерфейсах, которые прямо определяются в JAXP 1.3, не являются слишком значительными. Возможно, самым полезным в общем случае является включение метода reset(), который добавлен как в DocumentBuilder, так и в SAXParser, и который дает возможность возвратить эти объекты в их первоначальное состояние. Поскольку механизм JAXP factory для объектов синтаксического анализатора очень требователен к ресурсам, приложения часто реализуют пул объектов SAXParsers и DocumentBuilders, который делает доступными эти объекты при возникновении задачи синтаксического анализа и не удаляет их после ее завершения. Способность сбросить эти объекты в известное состояние позволяет таким пулам не отслеживать использование объектов нуждающимся в них кодом, и не требует от кода, использующего несколько синтаксических анализаторов, никаких знаний о предыдущем использовании анализатора, к которому был получен доступ. Это должно сделать применение таких пулов значительно более эффективным и простым в реализации. Пример реализации пула синтаксического анализатора вы можете найти в статье «Улучшение производительности ваших XML-приложений, часть 2».

Вы можете подсоединяться к синтаксическим анализаторам со схемами (см. обсуждение пакета javax.xml.validation ниже) при помощи метода setSchema(), добавленного к SAXParserFactory и DocumentBuilderFactory. Это дает возможность проектировать оптимизированные под конкретную схему анализаторы (javax.xml.validation.Schemas), что, в свою очередь, значительно увеличивает производительность по сравнению со стандартными объектами анализаторов, не имеющих встроенных знаний о грамматике, согласно которой они могли бы быть использованы для проверки корректности документов. Приложения также могут настроить свои конструкторы синтаксических анализаторов для производства анализаторов, умеющих работать с XInclude при помощи методов get/setXIncludeAware. И анализаторы и конструкторы могут получить запрос о том, поддерживают ли они XInclude, при помощи метода isXIncludeAware(). Связанная с ними в данный момент времени (если есть) Schema может быть получена при помощи метода getSchema().

Добавить комментарий