找不到XPathFactory实现,ubuntu服务器中的xpath工厂实例创建问题。该如何解决呢?

时间:2019-01-21 05:28:14

标签: java ubuntu xpath saxon

我正在尝试创建一个新的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

Syntax error in javax.xml.xpath.XPathFactory provider-configuration file of 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 :(得分:0)

首先,如果由于性能下降而在升级到新的Saxon版本时遇到问题,那么出于整个用户社区的利益,我强烈建议您与我们合作以找出问题所在并且已修复,而不是坚持使用具有已知错误的旧版本。

我怀疑您已正确识别问题。它具有悠久而复杂的历史。 IIRC(这可能是一种简化):JDK 5要求服务文件的格式与记录的格式不同,而Saxon使用有效的格式。 JDK 6接受“错误”格式以及正确格式。 JDK 7仅接受正确的格式。结果,较旧版本的Saxon不能与较新的JDK版本一起使用-至少就此接口而言。

一种解决方法是直接实例化Saxon的XPathFactory(使用new net.sf.saxon.xpath.XPathFactoryImpl())而不是使用JAXP搜索机制。在任何情况下,这都更加有效。