2012-03-13 50 views
3

我有一個巨大的.xml作爲數據源(大約100 MB)。如何有效地使用此xml準備pdf,而不需要java.lang.OutOfMemoryError: Java heap spaceJasper Reports和巨大的XML作爲數據源

HashMap<String, Object> params = new HashMap<String,Object>(); 
// below i get: java.lang.OutOfMemoryError 
Document document = JRXmlUtils.parse(JRLoader.getLocationInputStream(dataSource)); 
params.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, document); 
jasperPrint = JasperFillManager.fillReport(jasperReport, params); 

回答

1

您可以增加堆 - 如果可能的話。但是爲100MB xml文件創建DOM並在同一個JVM中創建PDF文檔確實需要大量內存。嘗試使用基於事件的SAX解析器處理輸入文件。這應該會顯着減少內存佔用量!

+0

您知道嗎,如何連接XML數據源+ SAX解析器+ Jasper Reports? – marioosh 2012-03-13 07:53:03

+0

其實 - 沒有。但是也許您可以使用基於SAX解析器的預處理器將大型xml分割成更小的可解析文檔,僅用於報告創建。 – 2012-03-13 08:03:49

+0

@marioosh如果你看(http://fecplanner.com/jasperreports/docs/faq.html)有設置你可以設置一個系統屬性來設置解析器。 – 2012-03-13 18:14:39