Как заставить использование конкретного парсера XML - PullRequest
4 голосов
/ 23 июля 2010

У меня есть парсер Xerces и Oracle XML, оба в пути к классам моего приложения (не спрашивайте почему).

Когда я создаю новый javax.xml.parsers.DocumentBuilderFactory, загрузчик классов автоматически выбирает парсер Oracle XML.Однако это не полная / правильная реализация, поэтому она вызывает у меня головную боль.

Есть ли способ заставить / сказать загрузчику классов использовать Xerces-анализ при создании фабрики построителя документов?

Ответы [ 3 ]

5 голосов
/ 06 декабря 2011

Для моего большого проекта ответ Скаффмана сработал бы БОЛЬШЕ времени, но не ВСЕ, потому что у нас есть несколько подпроектов, которые зависят от этих библиотек.Мы посмотрели на источник javax.xml.transform.TransformerFactory.newInstance () и обнаружили, что он использует javax.xml.transform.FactoryFinder.find ("javax.xml.transform.TransformerFactory", ...).Затем этот метод просматривает системный параметр, чтобы определить правильную реализацию.

В конечном итоге мы исправили его, добавив -D параметры в нашу среду выполнения, чтобы принудительно настроить правильные классы:

-Djavax.xml.transform.TransformerFactory = org.apache.xalan.processor.TransformerFactoryImpl -Djavax.xml.parsers.SAXParserFactory = org.apache.xers*

3 голосов
/ 23 июля 2010

DocumentBuilderFactory имеет метод newInstance(), в котором можно указать имя класса реализации, которую вы хотите использовать.

0 голосов
/ 22 августа 2018

У меня была похожая ситуация, но наш код использует org.xml.sax.helpers.XMLReaderFactory.createXMLReader() для создания сакс-парсера (который все еще глючит в 8u162).

Можно исправить это, используя системное свойство -Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser

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