[英]How to use xml data source on jasper server
我想在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);
但不幸的是,无法在jasper服务器上执行此操作。 我正在使用rest服务运行报表,因此只能使用String参数。 我试图编写一个脚本,将带有xml url的String参数转换为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);
} ...
但这给了我一个空的报告。 先感谢您。
如果您使用的是Jasperreports Server 5.5,则还可以通过简单地将“ net.sf.jasperreports.xml.source”参数传递给报表来传递任何XML资源(静态XML甚至是REST服务)。单元名为“报告”,并且您的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的“ parameters”部分中添加以下内容
<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数据源允许使用哪些参数的更多信息,您还可以查看官方文档
JasperSoft Community Wiki有两篇文章,将有助于解释其中的一些细节。
您可能需要试验XML_URL参数才能将XML放入报告中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.