java - Jasper 报告 - 如何更改 xpath 执行器工厂

标签 java xpath report

我正在检查以下问题JasperReports fillReport too slow and resource consuming我尝试应用经过验证的答案,但没有注意到我的报告生成有任何变化。

基本上我想做的是更改 JasperFillManager 的 xpath 执行器工厂以使用 Jaxen 而不是 Xalan,但我似乎不知道应该在代码中放置以下行

    DefaultJasperReportsContext context = DefaultJasperReportsContext.getInstance();
    JRPropertiesUtil.getInstance(context).setProperty("net.sf.jasperreports.xpath.executer.factory",
                                                      "net.sf.jasperreports.engine.util.xml.JaxenXPathExecuterFactory");

我的代码块如下所示

private JasperPrint getJasperPrintInstance(JasperReport report) throws JRException, NamingException, SQLException {
    JasperPrint jasperPrint = null;
    DefaultJasperReportsContext context = DefaultJasperReportsContext.getInstance();
    JRPropertiesUtil.getInstance(context).setProperty("net.sf.jasperreports.xpath.executer.factory",
                                                      "net.sf.jasperreports.engine.util.xml.JaxenXPathExecuterFactory");
    if (dataSource == null) {
        jasperPrint = JasperFillManager.fillReport(report, this.reportParams, connection);
    } else {
        jasperPrint =
            JasperFillManager.fillReport(report, this.reportParams,
                                         new JRBeanCollectionDataSource(getDataSource()));
    }

    return jasperPrint;
}

即使我将“net.sf.jasperreports.engine.util.xml.JaxenXPathExecuterFactory”更改为其他任何内容,也不会发生任何变化。

你能告诉我我可能做错了什么吗?

最佳答案

发生这种情况是因为您没有使用新创建的上下文。您需要用它创建一个 JasperFillManager 实例:

JasperFillManager jasperFillManager = JasperFillManager.getInstance(context);

并将其与其实例方法一起使用,而不是像这样的类方法:

jasperPrint = jasperFillManager.fill(report, this.reportParams, 连接);

关于java - Jasper 报告 - 如何更改 xpath 执行器工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40971035/

相关文章:

Java .startsWith 优化

javascript - 从 React Native(android) 中的 .jar 文件访问方法

sql - 每周平均报告 : Redshift

java - List<List<String>> 和 List<Object> 不一样吗

sql-server - 如何从 SQL Server 获取 ROOT 节点名称

xml - 在 SQL Server 中解析 XML 的问题

python - 在 xpath 中使用 contains(text(), ) 时如何获取 sibling

java - 仅报告 mapReduce 作业的映射器中的 k 个最低值

c - 性能报告显示 "__libm_pow_l9"

java - 你怎么能用显示毫秒的计时器制作秒表?