Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jasper报告和庞大的XML作为数据源_Java_Jasper Reports - Fatal编程技术网

Java Jasper报告和庞大的XML作为数据源

Java Jasper报告和庞大的XML作为数据源,java,jasper-reports,Java,Jasper Reports,我有一个巨大的.xml作为数据源(大约100MB)。如何使用此xml高效地准备pdf,而无需java.lang.OutOfMemoryError:java堆空间 HashMap<String, Object> params = new HashMap<String,Object>(); // below i get: java.lang.OutOfMemoryError Document document = JRXmlUtils.parse(JRLoader.getLo

我有一个巨大的
.xml
作为数据源(大约100MB)。如何使用此xml高效地准备pdf,而无需
java.lang.OutOfMemoryError:java堆空间

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);
HashMap params=newhashmap();
//下面我得到:java.lang.OutOfMemoryError
documentdocument=JRXmlUtils.parse(JRLoader.getLocationInputStream(dataSource));
put(JRXPathQueryExecuterFactory.PARAMETER\u XML\u数据\u文档,文档);
jasperPrint=JasperFillManager.fillReport(jasperReport,参数);

如果可能,您可以增加堆。但是,为100MB xml文件创建DOM,再加上在同一JVM中创建pdf文档,确实需要大量内存。尝试使用基于事件的SAX解析器处理输入文件。这将大大减少内存占用

除了使用更好的XML解析器外,还要检查。

您知道如何连接XML数据源+SAX解析器+Jasper报表吗?实际上-不知道。但是您可以使用基于SAX解析器的预处理器将巨大的XML拆分为更小的、可解析的文档,只是为了创建报表。@maroosh如果您看()您可以设置一个系统属性来设置解析器。