Как JAXP выбирает парсеры
Вам может быть интересно, какой парсер на самом деле использует эта программа. В конце концов, JAXP достаточно независим от парсера. Ответ зависит от того, какие парсеры установлены в вашем пути к классам и как установлены определенные системные свойства. По умолчанию используется класс, названный системным свойством javax.xml.parsers.DocumentBuilderFactory
. Например, если вы хотите убедиться, что Xerces используется для разбора документов, вы должны запустить JAXPChecker следующим образом:
D:\books\XMLJAVA>java -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl JAXPChecker file:///D:/books/xmljava/dom.xml
> file:///D:/books/xmljava/dom.xml is well-formed.
Если свойство javax.xml.parsers.DocumentBuilderFactory
не установлено, то JAXP ищет в файле свойств lib / jaxp.properties в каталоге JRE, чтобы определить значение по умолчанию для системного свойства javax.xml.parsers.DocumentBuilderFactory
. Если вы хотите последовательно использовать определенный анализатор DOM, например gnu.xml.dom.JAXPFactory
, поместите в этот файл следующую строку:
javax.xml.parsers.DocumentBuilderFactory=gnu.xml.dom.JAXPFactory
Если не удается найти анализатор, следующий JAXP ищет файл META-INF/services/javax.xml.parsers.DocumentBuilderFactory
во всех JAR-файлах, доступных для среды выполнения, чтобы найти имя конкретного подкласса DocumentBuilderFactory
.
Наконец, если это не удается, тогда DocumentBuilderFactory.newInstance()
возвращает класс по умолчанию, как правило, анализатор от поставщика, который также предоставил классы JAXP. Например, классы JDK JAXP по умолчанию выбирают org.apache.crimson.jaxp.DocumentBuilderFactoryImpl
, а классы flfred JAXP выбирают gnu.xml.dom.JAXPFactory
.