2013-04-25 64 views
2

我想在jasper服務器(5.0.0)中使用xml數據源。 Xml文件是在應用程序運行時「即時」創建的,因此不同的報告將具有不同的xml數據源。我知道jasper服務器沒有定義XML數據源,但我發現創建沒有數據源的報告,然後傳遞參數XML_FILE - java.io.File將完成這項工作。我能夠做到這一點的Java Servlet:如何在jasper服務器上使用xml數據源

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); 

但遺憾的是沒能做到這一點碧玉服務器上。我正在使用rest服務來運行報告,所以我只能使用String參數。我試着寫一個字符串參數與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); 

    } ... 

一個scriptlet但是這給了我一個空的報告。 預先感謝您。

回答

3

如果您使用的是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 

爲了有一個默認的「網.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數據源允許哪些參數的信息,您還可以查看官方的documentation

相關問題