JasperReports with JBoss seam
cleitonash Oct 13, 2009 4:32 PMHi.
I'm using jboss-4.2.3.GA and jboss-seam-2.2.0.GA, and to create my reports, i'm using jasperreports-3.6.0 and ireport-nb.3.6.0. I created a very simple report, wich don't have parameters, only one static field, then I created a desktop application to test, and it works. And then I created a xhtml file into the itext example of jboss seam, that calls an seam action to generate the report, below is my code.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:s="http://jboss.com/products/seam/taglib">
     
     <head>
          <title>Generate Report</title>
     </head>
     <body>
          <h1>Generate report</h1>
          <ul>
               <s:button id="report" value="Generate" action="#{reportAction.create}"/>
          </ul>
     </body>
</html>and below is my seam action
package org.jboss.seam.example.pdf;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.international.StatusMessages;
import org.jboss.seam.log.Log;
@Name("reportAction")
@Scope(ScopeType.SESSION)
public class ReportAction {
    @Logger private Log log;
    @In StatusMessages statusMessages;
    
    @DataModel
    private List<String> l;
    
    public void create() {
        try {
             ServletContext servletContext = (ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();
             System.out.println(servletContext.getRealPath("/WEB-INF/reports/ReportTest.jasper").replace("./", ""));
             
             HashMap parameters = new HashMap();
             
                JasperPrint jasperPrint = JasperFillManager.fillReport(servletContext.getRealPath("/WEB-INF/reports/ReportTest.jasper").replace("./", ""), parameters, new JREmptyDataSource());
            
             ByteArrayOutputStream output = new ByteArrayOutputStream();
                JasperExportManager.exportReportToPdfStream(jasperPrint, output);
               
          HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
                 response.setContentType("application/pdf");
          response.addHeader("Content-Disposition","attachment;filename=RankReport.pdf");
          response.setContentLength(output.size()/*bytes.length*/);
          ServletOutputStream servletOutputStream = response.getOutputStream();
          servletOutputStream.write(output.toByteArray(), 0, output.size()/*bytes, 0, bytes.length*/);
          servletOutputStream.flush();
          servletOutputStream.close();
          FacesContext.getCurrentInstance().responseComplete();
     } catch (Exception jre) {
          jre.printStackTrace();
     }
    }
}
but the fillReport command returns an exception
net.sf.jasperreports.engine.JRException: Error loading object from file : /home/cleitonash/java/jboss-4.2.3.GA/server/default/tmp/deploy/tmp1866210135615017893jboss-seam-itext.ear-contents/jboss-seam-itext-exp.war/WEB-INF/reports/ReportTest.jasper
the structure of my .ear file is:
-lib
-META-INF
 jboss-seam.jar
 jboss-seam-itext.jar
 jboss-seam-itext.war
 pdf.keystore
into the lib package, I put the jasperreports-3.6.0.jar, it already had the commons jars and itext.jar.
I put ReportTest.jasper into the .war file, in the reports package that is into the WEB-INF.
anyone know where I'm wrong ? Is something missing ? I don't know where I can't access the file.
Thanks.
