我想在解决 JasperReports 错误时寻求一些帮助。已经在网上寻找解决方案,但似乎无法做到正确。
问题在于,每当我使用 JasperFillManager.fillReport(java.io.InputStream inputStream, java.util.Map<java.lang.String, java.lang.Object> params, JRDataSource dataSource)
填充报告时,它总会返回
java.lang.IllegalArgumentException: name.
我正在使用 iReport 4.6 ,Java 6。
我的代码:
try {
Collection clCol = dUtil.getInfo(DateQ1, sType);
String sRepNameJasper = dUtil.getReportFileName(sReportType, 0); // Get report filename from DB.
String sRepTypeJasper = pReader.getPropValue(pReader.GETREPORTMPLT) + sRepNameJasper; //Append report directory
InputStream reportStreamJasper = getServlet().getServletConfig().getServletContext().getResourceAsStream(sRepTypeJasper); //Get ResourceAsStream of report file
jasperPrint = JasperFillManager.fillReport(reportStreamJasper, params, new JRBeanCollectionDataSource(clCol)); //Populate report
// Create Excel File
File fl = new File(sRepTypeJasper.replaceAll(".jasper", ".xls"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = new FileOutputStream(fl);
JRXlsExporter exporterXLS = new JRXlsExporter();
exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, baos);
exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporterXLS.exportReport();
os.write(baos.toByteArray());
os.flush();
os.close();
baos.close();
} catch (JRException je) {
je.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
例外情况如下:
java.lang.IllegalArgumentException:name at sun.misc.URLClassPath $ Loader.findResource(URLClassPath.java:460) at sun.misc.URLClassPath.findResources(URLClassPath.java:146) 在java.net.URLCLassLoader $ 2.run(URLClassLoader.java:385) at java.security.AccessController.doPriviledged(Native Method) at java.net.URLClassLoader.findResource(URLClassLoader.java:382) at java.lang.ClassLoader.getResource(ClassLoader.java:1002) at java.lang.ClassLoader.getResource(ClassLoader.java:997) at com.sun.enterprise.v3.server.APIClassLoaderServiceImpl $ APIClassLoader.getResource(APIClassLoaderServiceImpl.java:205) at java.lang.ClassLoader.getResource(ClassLoader.java:997) at java.lang.ClassLoader.getResource(ClassLoader.java:997) 在org.glassfish.web.loader.WebappClassLoader.getResource(WebappClassLoader.java:1153) at net.sf.jasperreports.engine.util.JRResourcesUtil.findClassLoaderResource(JRResourcesUtil.java:565) 等....
我很感激能得到的所有帮助。