我正在尝试创建一个新的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转换。
我在做什么错?任何帮助将不胜感激。预先感谢。
答案 0 :(得分:0)
首先,如果由于性能下降而在升级到新的Saxon版本时遇到问题,那么出于整个用户社区的利益,我强烈建议您与我们合作以找出问题所在并且已修复,而不是坚持使用具有已知错误的旧版本。
我怀疑您已正确识别问题。它具有悠久而复杂的历史。 IIRC(这可能是一种简化):JDK 5要求服务文件的格式与记录的格式不同,而Saxon使用有效的格式。 JDK 6接受“错误”格式以及正确格式。 JDK 7仅接受正确的格式。结果,较旧版本的Saxon不能与较新的JDK版本一起使用-至少就此接口而言。
一种解决方法是直接实例化Saxon的XPathFactory(使用new net.sf.saxon.xpath.XPathFactoryImpl()
)而不是使用JAXP搜索机制。在任何情况下,这都更加有效。