3

我们在项目中使用 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 处理器?如果不是那么如何改变它?

4

1 回答 1

1

Jasper 是非常可配置的。我相信您可以简单地编写自己的 XPathExecutionFactory 并使用适当的环境变量将其插入 Jasper。如果我需要 saxon 来做其他事情,我个人只会并行部署 xalan 和 saxon。

于 2012-12-21T07:07:40.233 回答