2

我想在 jasper 服务器(5.0.0)中使用 xml 数据源。XML 文件是在应用程序运行时“动态”创建的,因此不同的报告将具有不同的 xml 数据源。我知道 jasper 服务器没有定义 XML 数据源,但我发现创建没有数据源的报告然后传递参数 XML_FILE - java.io.File 就可以了。我设法在java servlet中做到了这一点:

  jasperReport = JasperCompileManager.compileReport("path to jrxml");       
  HashMap map  = new HashMap();
  map.put("XML_FILE", new File(xmlSourceFile));     
  jasperPrint = JasperFillManager.fillReport(jasperReport,map);         
 byte [] o = JasperExportManager.exportReportToPdf(jasperPrint);

但不幸的是未能在碧玉服务器上做到这一点。我正在使用休息服务来运行报告,所以我只能使用字符串参数。我试图编写一个脚本,将带有 xml url 的字符串参数转换为 java.io.File

public class XmlScriplet extends JRDefaultScriptlet{
 @Override
 public void beforeReportInit(){
  try {
       String param = (String)this.getParameterValue("fileName");
       HashMap map  = new HashMap();
       map.put("XML_FILE", new File(param));
       this.parametersMap.putAll(map);

  } ...

但这给了我一个空的报告。先感谢您。

4

2 回答 2

3

如果您使用 Jasperreports Server 5.5 并假设您的报告,您还可以通过简单地将“net.sf.jasperreports.xml.source”参数传递给您的报告来传递任何 XML 资源(是静态 XML 甚至是 REST 服务)单元名为“report”,并且您的 xml 数据资源位于http://(host):(port)/resource.xml路径中,您可能希望使用 Jasper 的 REST v2 API 调用报告,如下所示:

 http://(host):(port)/jasperserver/rest_v2/reports/path/to/your/report/unit/report.html?net.sf.jasperreports.xml.source=http://(host):(port)/resource.xml

为了在您的报告中有一个默认的“net.sf.jasperreports.xml.source”值,您还应该在报告源 jrxml 的“参数”部分中添加以下内容

<parameter name="net.sf.jasperreports.xml.source" class="java.lang.String"> 
    <defaultValueExpression><![CDATA["http://(host):(port)/resource.xml"]]>   </defaultValueExpression>
</parameter>

不要忘记通过附加以下内容将 xpath2 查询支持添加到 jasperreports 服务器:

# addition for xpath2 queries
net.sf.jasperreports.query.executer.factory.xpath2 = net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory

到 /WEB-INF/classes/jasperreports.properties 在应用服务器中部署的目录中

有关 xml 数据源允许哪些参数的更多信息,您还可以查看官方文档

于 2014-04-29T20:18:20.573 回答
1

JasperSoft 社区 wiki 有两篇文章可以帮助解释一些细节。

远程 XML 数据源

在 JasperReports 服务器中使用 XML 数据源

您可能需要试验 XML_URL 参数才能将您的 XML 放入报告中。

于 2013-07-10T18:25:40.767 回答