如何将jasper报告从xalan切换到saxon?

时间:2012-12-20 12:15:10

标签: java jasper-reports saxon xalan

我们在项目中使用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 和我没有找到任何与撒克逊有关的东西。 jasper只与xalan xslt处理器一起使用吗?如果没有那么如何改变呢?

1 个答案:

答案 0 :(得分:1)

Jasper非常易于配置。我相信您可以编写自己的XPathExecutionFactory并使用适当的环境变量将其插入Jasper。如果我需要saxon用于别的东西,我个人只会并行部署xalan和saxon。