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

No XPathFactory implementation found, xpath factory instance creation issue in ubuntu server. how to resolve the issue?

我正在尝试创建一个 xpath 工厂的新实例,它 运行 在我的本地机器上完全没有任何问题,但在我的 ubuntu server(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 转换。

我做错了什么?任何帮助将不胜感激。提前致谢。

首先,如果您因为性能下降而无法升级到新的 Saxon 版本,那么为了整个用户社区的利益,我强烈建议您与我们合作以实现这一目标已识别并修复问题,而不是坚持使用具有已知错误的旧版本。

我怀疑您已经正确识别了问题。它有着悠久而曲折的历史。 IIRC(这可能是一种简化):JDK 5 要求服务文件的格式不同于记录的格式,而撒克逊人使用了有效的格式。 JDK 6 接受了 "wrong" 格式以及正确的格式。 JDK7只接受了正确的格式。因此,较旧版本的 Saxon 无法与较新的 JDK 版本一起使用 - 至少就此界面而言。

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