我们在项目中使用 jasperreports 4.1.1,它工作正常,但最近我们决定切换到 xslt 2.0,我做的第一件事 - 我将 xalan(没有 xslt 2.0 实现)更改为 saxon。但是我运行的第一份报告给了我 NoClassDefFoundError:
java.lang.NoClassDefFoundError: org/apache/xpath/CachedXPathAPI
at net.sf.jasperreports.engine.util.xml.XalanXPathExecuter.<init>(XalanXPathExecuter.java:45)
at net.sf.jasperreports.engine.util.xml.XalanXPathExecuterFactory.getXPathExecuter(XalanXPathExecuterFactory.java:39)
at net.sf.jasperreports.engine.util.xml.JRXPathExecuterUtils.getXPathExecuter(JRXPathExecuterUtils.java:85)
at net.sf.jasperreports.engine.data.JRXmlDataSource.<init>(JRXmlDataSource.java:172)
at net.sf.jasperreports.engine.query.JRXPathQueryExecuter.createDatasource(JRXPathQueryExecuter.java:91)
我们没有对 xalan 的任何显式绑定,但 jaspereports 具有以下属性:
# Apache Xalan XPath executers are used by default
net.sf.jasperreports.xpath.executer.factory=net.sf.jasperreports.engine.util.xml.XalanXPathExecuterFactory
我想这个属性会导致 jasper 使用 xalan,但我不明白我可以改变它:我查看了包net.sf.jasperreports.engine.util.xml并且我没有找到任何与 saxon 相关的内容。jasper 是否仅适用于 xalan xslt 处理器?如果不是那么如何改变它?