Для проблемы DocumentBuilderFactoryImpl
, поскольку отсутствующий класс является частью пакета Xerces-for-Android, просто не найден автоматически, возможно, есть две возможные проблемы:
- Как предлагается здесь , можно попытаться восстановить флягу с обновленными настройками, позволяющими автоматически находить класс.
-
Поскольку
newInstance()
также предоставляет перегруженную версию, которая позволяет напрямую указать недостающий пакет, я нашел, что проще было просто ввести путь вручную:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance ("mf.org.apache.xerces.jaxp.DocumentBuilderFactoryImpl",null);
Ибо TransformerFactoryImpl
вещи кажутся более сложными. Значение по умолчанию указывает на собственный класс Java com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
, для которого я не смог найти эквивалент, включенный в Xerces-for-Android. Поэтому, если я не хочу пытаться извлечь и переупаковать Java- TransformerFactoryImpl
класс и все остальные родные классы, на что это опирается, я застрял здесь.
Итак, на данный момент я вижу следующие варианты решения:
- либо отказаться от всей проверки схемы и придерживаться реализации Android (для которой рабочая версия
TransformerFactoryImpl
существует, но которая имеет другие недостатки, например, нетDOMImplementationLS
для сериализации ), - или, если валидация важна, по-прежнему используйте реализацию Android практически для всех, просто используйте Xerces-for-Android для самостоятельного шага проверки,
- или использовать Xerces-for-Android практически для всех, кроме преобразования XSL. Для этого мне, кажется, нужно сначала вывести Xerces DOM в файлы stream / cache, а затем применить преобразование с помощью Android Transformer, а затем проанализировать поток результатов обратно в представление DOM Xerces.
Все они кажутся либо отсутствующими, либо неудобными обходными решениями, поэтому любые советы по полностью работающей библиотеке Xerces-for-Android или различным вариантам приветствуются.