Использование JasperReports с относительным путем

У меня есть веб-приложение, и клиент запросил несколько отчетов. Подход заключался в использовании iReport и отображении отчета на экране.

Я уже просил что-то вроде этого . Но сегодня я обнаружил, что пути к файлам отчетов (jrxml) абсолютны. Поэтому мне нужно изменить программу, чтобы она принимала относительные пути. Я пытался это сделать, но кажется, что ни jrxml, ни скомпилированные (.jasper) файлы не принимают относительные пути ни для компиляции, ни для заполнения отчета.

Вот что я так далеко зашел:

//path is generated as request.getContextPath() + "/jrxmlFiles/"
public void generateReport(HttpServletResponse res, ConexionAdmin con, String path) throws Exception{ 

    ServletOutputStream out = null;
    ByteArrayOutputStream bos    = new ByteArrayOutputStream();

    JasperDesign jasperDesign = JRXmlLoader.load(path);
    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

  byte[] bytes = JasperRunManager.runReportToPdf(jasperReport, pars, con.initConexion());
        res.setContentType("application/pdf");
  res.setContentLength(bytes.length);
  out = res.getOutputStream();
  out.write(bytes, 0, bytes.length);

  res.setHeader("Cache-Control", "cache");
  res.setHeader("Content-Disposition", "attachment; filename=report.pdf"); 
  res.setHeader("Pragma", "cache");
  res.setContentLength(bos.size());

  out.write(bos.toByteArray());
  out.flush();
  bos.close();
  out.close(); 
  res.flushBuffer();
}

Кажется, это работает с абсолютными путями, но меня бросает:

Exception Message
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException

при изменении на относительный путь. Я искал в сети безуспешно, как переодеться.

У меня есть javaDoc для jasper API, но я бы предпочел не читать его, если могу.

12
задан Community 23 May 2017 в 10:31
поделиться