saxon-xpath-9.1.0.8.jar!/META-INF/services/javax.xml.xpath.XPathFactory:2:非法的配置文件语法

时间:2019-06-10 13:54:37

标签: java xml xpath

在我的Web应用程序中将Java 7升级到Java 8时,Saxon遇到了这个问题:

  

javax.xml.xpath.XPathFactoryConfigurationException:   java.util.ServiceConfigurationError:javax.xml.xpath.XPathFactory:   jar:文件:/ C:/Users/abc/.m2/存储库   /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 $ LazyIterator.hasNextService(ServiceLoader.java:357)           在java.util.ServiceLoader $ LazyIterator.hasNext(ServiceLoader.java:393)           在java.util.ServiceLoader $ 1.hasNext(ServiceLoader.java:474)           在javax.xml.xpath.XPathFactoryFinder $ 2.run(XPathFactoryFinder.java:345)           在javax.xml.xpath.XPathFactoryFinder $ 2.run(XPathFactoryFinder.java:341)           在java.security.AccessController.doPrivileged(本机方法)           在javax.xml.xpath.XPathFactoryFinder.findServiceProvider(XPathFactoryFinder.java:341)           在javax.xml.xpath.XPathFactoryFinder._newFactory(XPathFactoryFinder.java:212)           在javax.xml.xpath.XPathFactoryFinder.newFactory(XPathFactoryFinder.java:137)           在javax.xml.xpath.XPathFactory.newInstance(XPathFactory.java:190)

我将撒克逊人升级为撒克逊人HE,但是它不起作用:

  

Q {java:org.apache.commons.lang3.StringUtils} isBlank()。反身   在Saxon-HE下无法调用Java方法

     在

  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:149)

移动到许可的Saxon PE或其他设备是不可能的:/

我不确定为什么,但是应用程序使用XpathFactory这样:

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

我不知道为什么选择了这个对象模型,例如OBJECT_MODEL_DOM4J

我想知道是否:

1)是否有一些可以在Java 8中运行的免费商业用saxon?我不必是最新的,我们使用的是9.1.0.8或9.1.0.6J。

2)这是什么NamespaceConstant.OBJECT_MODEL_SAXON,是否可以从Saxon辞职并转到OBJECT_MODEL_DOM4J并使用dom4j替代,或者还有其他方法可以使用免费库来实现类似的功能? / p>

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 个答案:

答案 0 :(得分:1)

您可以在此处找到有关此问题的信息

Syntax error in javax.xml.xpath.XPathFactory provider-configuration file of Saxon-HE 9.3

以及从那里引用的各种线程中。其实质是Saxon的早期版本使用了服务文件的格式(支持XPathFactory JAXP搜索机制),该格式在Java 5中有效,而在后续的Java版本中则无效(Saxon疏忽地依赖于Java中的错误随后被修复)。

正如您所指出的,从Saxon-B(9.1)迁移到Saxon-HE可能会出现问题,因为某些功能(尤其是自反扩展功能)并未得到继承。但是,还有其他方法可以在以后的发行版中获得相同的效果,而不会出现与自反扩展功能相关的安全问题。

如果您想使用Saxon-B(9.1),则可以通过更改XPathFactory.newInstance()的调用直接实例化Saxon XPathFactory,使其在较新的Java版本上运行。对象模型的选择与问题无关。