Реализация XPathFactory не найдена, проблема создания экземпляра фабрики xpath на сервере Ubuntu.как решить проблему? - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь создать новый экземпляр фабрики xpath, он работает без проблем на моем локальном компьютере, но на моем сервере Ubuntu (16.0) экземпляр Java 1.7 выдает следующую ошибку.

SEVERE: Caught exception : javax.xml.xpath.XPathFactoryConfigurationException: No XPathFactory implementation found for the object model: http://java.sun.com/jaxp/xpath/dom
at javax.xml.xpath.XPathFactory.newInstance(XPathFactory.java:268)

Я прочитал следующие статьи,

https://saxonica.plan.io/issues/1944

Синтаксическая ошибка в файле конфигурации провайдера jaxax.xml.xpath.XPathFactory Saxon-HE 9.3

И обновил мой код, как показано ниже,

 xPathfactory = XPathFactory.newInstance(
             XPathFactory.DEFAULT_OBJECT_MODEL_URI, "net.sf.saxon.xpath.XPathFactoryImpl",
              ClassLoader.getSystemClassLoader());

но все равно выдает следующую ошибку.

Я использую версию saxon 9.3.0.5 как на локальном, так и на серверном экземпляре.

Я использую эту версию, потому что она дает намного более быстрое преобразование xslt по сравнению с последней версией.

Что я делаю не так? Любая помощь будет принята с благодарностью. Заранее спасибо.

1 Ответ

0 голосов
/ 21 января 2019

Во-первых, если у вас возникла проблема с переходом на новую версию Saxon из-за снижения производительности, то в интересах сообщества пользователей в целом я настоятельно рекомендую вам поработать с нами, чтобы выявить эту проблему. и исправлено, вместо того, чтобы придерживаться старой версии с известными ошибками.

Я подозреваю, что вы правильно определили проблему. У него долгая и запутанная история. IIRC (и это, вероятно, упрощение): JDK 5 требовал, чтобы файл сервисов был в формате, который отличался от документированного формата, и Saxon использовал работающий формат. JDK 6 принял «неправильный» формат, а также правильный формат. JDK 7 только принял правильный формат. В результате более старые версии Saxon не работают с более новыми версиями JDK - по крайней мере, в отношении этого интерфейса.

Обходной путь - создать экземпляр Sathon XPathFactory напрямую (используя new net.sf.saxon.xpath.XPathFactoryImpl()), а не использовать механизм поиска JAXP. В любом случае это гораздо эффективнее.

...