java net.sf.jasperreports.engine.JRRuntimeException: java.io.IOException: система не может найти указанный путь - PullRequest
0 голосов
/ 07 июня 2018

Следующее исключение возникает, когда я пытаюсь создать большие файлы (Excel) размером более 7 МБ.Файлы ниже этого размера работают нормально.

Заметил, что это происходит, когда я пытаюсь обновить Tomcat до v8.5.28.Он отлично работает в tomcat 8.0.14.

ВОПРОС
Какие у меня могут быть причины для получения этой ошибки?

Ниже приведено описание стека

net.sf.jasperreports.engine.JRRuntimeException: java.io.IOException: The system cannot find the path specified
at net.sf.jasperreports.engine.export.ooxml.BaseHelper.write(BaseHelper.java:64)
at net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter$1.writeText(JRXlsxExporter.java:1560)
at net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter$1.handle(JRXlsxExporter.java:1553)
at net.sf.jasperreports.engine.export.data.StringTextValue.handle(StringTextValue.java:43)
at net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter.exportText(JRXlsxExporter.java:1572)
at net.sf.jasperreports.engine.export.JRXlsAbstractExporter.exportPage(JRXlsAbstractExporter.java:1344)
at net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter.exportPage(JRXlsxExporter.java:271)
at net.sf.jasperreports.engine.export.JRXlsAbstractExporter.exportReportToStream(JRXlsAbstractExporter.java:1116)
at net.sf.jasperreports.engine.export.JRXlsAbstractExporter.exportReport(JRXlsAbstractExporter.java:964)
at com.test.report.base.jasper.JasperReports.JasperReportXlsPreview(JasperReports.java:230)
at com.test.report.base.jasper.ReportGenerator.doReport(ReportGenerator.java:32)
at com.test.report.web.ui.bean.ReportControl.print(ReportControl.java:869)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

КОД
Создание файла Excel

    public String JasperReportXlsPreview(ExternalContext ext, HttpServletResponse response,
            Map<String, Object> mapParameter, JasperQueryResultDataSource queryResult, String reportLocation,
            String reportFilename) {
        String message = "";

        JasperReport jasperReport = null;
        JasperPrint jasperPrint = null;
        JRXlsxExporter exporter = null;
        OutputStream output = null;
        SimpleXlsxReportConfiguration configuration = null;

        reportFilename = reportFilename + ".xlsx";

        try {           
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-disposition", "attachment; filename=\"" + reportFilename + "\"");
            response.setContentLength(response.getBufferSize());
            jasperReport = JasperCompileManager.compileReport(reportLocation);
            jasperPrint = JasperFillManager.fillReport(jasperReport, mapParameter, queryResult);
            exporter = new JRXlsxExporter();
            exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
            exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(output));
            configuration = new SimpleXlsxReportConfiguration();
            configuration.setOnePagePerSheet(false);
            configuration.setWhitePageBackground(true);
            configuration.setDetectCellType(true);
            exporter.setConfiguration(configuration);
            exporter.exportReport();            
        } catch (Exception e) {
            e.printStackTrace();
            return "Error: " + e.getMessage();
        } finally {
            queryResult.destroy();
            jasperReport = null;
            jasperPrint = null;
            exporter = null;
            configuration = null;
            response = null;
            ext = null;
            reportFilename = null;
            queryResult = null;
            reportLocation = null;
            mapParameter = null;
        }

        System.gc();

        return message;
}

ЗАВИСИМОСТЬ
jasperreport: 6,5 Java: 8

1 Ответ

0 голосов
/ 08 июня 2018

Ошибка вызвана тем, что Tomcat использует несуществующий / недопустимый временный каталог.

Проверьте значение, которое сценарии Tomcat задают для java.io.tmpdir системного свойства Java.

...