saxon-xpath-9.1.0.8.jar! /META-INF/services/javax.xml.xpath.XPathFactory: 2: недопустимый синтаксис файла конфигурации - PullRequest
1 голос
/ 10 июня 2019

При обновлении Java 7 до Java 8 в моем веб-приложении у меня возникла проблема с Saxon:

javax.xml.xpath.XPathFactoryConfigurationException: java.util.ServiceConfigurationError: javax.xml.xpath.XPathFactory: jar: file: / C: /Users/abc/.m2/repository /net/sf/saxon/saxon-xpath/9.1.0.8/saxon-xpath-9.1.0.8.jar!/META-INF/services/javax.xml.xpath.XPathFactory: 2: Недопустимый синтаксис файла конфигурации в java.util.ServiceLoader.fail (ServiceLoader.java:239) в java.util.ServiceLoader.fail (ServiceLoader.java:245) в java.util.ServiceLoader.parseLine (ServiceLoader.java:265) на java.util.ServiceLoader.parse (ServiceLoader.java:307) на java.util.ServiceLoader.access $ 200 (ServiceLoader.java:185) на java.util.ServiceLoader $ Lazy.hasNextService (ServiceLoader.java:357) по адресу java.util.ServiceLoader $ LazyIterator.hasNext (ServiceLoader.java:393) по адресу java.util.ServiceLoader $ 1.hasNext (ServiceLoader.java:474) по адресу javax.xathFF 2xpx..run (XPathFactoryFinder.java:345) на Javax.xml.xpath.XPathFactoryFinder $ 2.run (XPathFactoryFinder.java:341) в java.security.AccessController.doPrivileged (собственный метод) в javax.xml.xpath.XPathFactoryFinder.findServiceProvider (XPathFavid_x34.xF)..xpath.XPathFactoryFinder._newFactory (XPathFactoryFinder.java:212) в javax.xml.xpath.XPathFactoryFinder.newFactory (XPathFactoryFinder.java:137) в javax.xml.xpath.XPathFactory.jpg (100) (XP)

Я обновил saxon до Saxon HE, но он не работает:

Q {java: org.apache.commons.lang3.StringUtils} isBlank ().Рефлексивные вызовы методов Java недоступны в Saxon-HE

по адресу net.sf.saxon.style.StylesheetModule.loadStylesheet (StylesheetModule.java:261) по адресу net.sf.saxon.style.Compilation.compileSingletonPackage (Compilation.java:107) в net.sf.saxon.s9api.XsltCompiler.compile (XsltCompiler.java:785) в net.sf.saxon.jaxp.SaxonTransformerFactory.newTemplates (SaxonTransformerFactory.java:143 * 101

1012)

Переход на лицензированный Saxon PE или другой не подлежит обсуждению: /

Я не уверен, почему, но приложение использует XpathFactory так:

XPath xpath = XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON).newXPath();

Я не знаюпочему была выбрана эта объектная модель, а не, например, OBJECT_MODEL_DOM4J

Мне интересно, если:

1) Существует несколько бесплатных для коммерческого использования саксонских, которые будут работать в Java8?Мне не обязательно быть самым новым, мы используем 9.1.0.8 или 9.1.0.6J.

2) Что это за NamespaceConstant.OBJECT_MODEL_SAXON, можно ли уйти изSaxon и перейдите к OBJECT_MODEL_DOM4J и используйте взамен dom4j или, может быть, есть другой способ реализовать что-то подобное с помощью бесплатной библиотеки?

XPath xpath = XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON).newXPath();
                xpath.setNamespaceContext(new NamespaceContextMap("a12i", "http://my-application/a12"));
                return xpath.compile(MY_XPATH_QUERY);

1 Ответ

1 голос
/ 10 июня 2019

Вы можете найти информацию об этой проблеме здесь

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

и вразличные темы, на которые ссылаются оттуда.Суть в том, что в более ранних выпусках Saxon использовался формат файла служб (поддерживающий механизм поиска XPathFactory JAXP), который работал в Java 5 и не работал в последующих выпусках Java (Saxon случайно зависел от ошибки в Java, котораявпоследствии был исправлен).

Как вы указали, переход от Saxon-B (9.1) к Saxon-HE может быть проблематичным, поскольку некоторые функции, в частности рефлексивные функции расширения, не были перенесены.Однако есть альтернативные способы достижения того же эффекта в более поздних выпусках без проблем безопасности, связанных с рефлексивными функциями расширения.

Если вы хотите придерживаться Saxon-B (9.1), вы, вероятно, можете заставить его работать надболее новые выпуски Java путем изменения вызова XPathFactory.newInstance () для непосредственного создания экземпляра Saxon XPathFactory.Выбор модели объекта не имеет отношения к проблеме.

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