Generating a pdf report using JasperRunManager-Collection of common programming errors

I want to generate a pdf report using ejbql ,but I dont know how to do that. I have tried to do thye following but an error occure:

parameterMap.put(JRJpaQueryExecuterFactory.PARAMETER_JPA_ENTITY_MANAGER,    entityManager);
parameterMap.put("priority", "3");
try
{
JasperFillManager.fillReportToFile("C:/Documents and Settings/MyDocuments/NetBeansProjects/JiraMap/src/java/Reports/Test.jasper", parameterMap);
JasperRunManager.runReportToPdfFile("C:/Documents and Settings/MyDocuments/NetBeansProjects/JiraMap/src/java/Reports/Test.pdf", parameterMap);
}
catch (JRException ex)
{
ex.printStackTrace();
}

Tehb error is:

net.sf.jasperreports.engine.JRException: Error loading object from file : C:\Documents and Settings\My Documents\NetBeansProjects\JiraMap\src\java\Reports\Test.pdf
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:101)
at net.sf.jasperreports.engine.JasperRunManager.runReportToPdfFile(JasperRunManager.java:93)
at Reporting.ReportBean.main(ReportBean.java:38)
Caused by: java.io.EOFException

UPdate

I have use this code (I haven’t use any parameter ) but always the report is empty:

JasperReport report = JasperCompileManager.compileReport("C:/Documents and Settings/My Documents/NetBeansProjects/JiraMap/src/java/Reports/Test.jrxml");
JasperPrint print = JasperFillManager.fillReport(report,null);
JasperExportManager.exportReportToPdfFile(print,"C:/Documents and Settings/My Documents/NetBeansProjects/JiraMap/src/java/Reports/Test.pdf");

My report with the Aggregate Function count(I have tried to use the alias as numebr but it didn’t work):











    

    

    


        

    


    


    
        
            
            
            
        

    


    
        
            
            
              
        
    


    


    


    


The error is :

net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : count(j)
at    net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDat    aSource.java:123)
at   net.sf.jasperreports.engine.data.JRJpaDataSource$PropertyReader.getValue(JRJpaDataSource.java:206)
at  net.sf.jasperreports.engine.data.JRJpaDataSource.getFieldValue(JRJpaDataSource.java:131)
at  net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:821)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:785)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1482)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:126)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:118)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:435)
at Reporting.ReportBean.main(ReportBean.java:41)
Caused by: java.lang.NoSuchMethodException: Unknown property 'count'+ on bean class 'class java.lang.Long'
[EL Info]: 2011-06-29 11:05:12.606--ServerSession(27055962)--file:/C:/Documents and     Settings/a497165/My Documents/NetBeansProjects/JiraMap/build/web/WEB-INF/classes/_JiraMapPU logout successful
at   org.apache.commons.beanutils.PropertyUtilsBean.getMappedProperty(PropertyUtilsBean.java:624)
at org.apache.commons.beanutils.PropertyUtilsBean.getMappedProperty(PropertyUtilsBean.java:570)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:758)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
at  net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
... 10 more
  1. This is part of the code I used for generating with JasperPrint; and sending the file back to a browser response. This using JDBC though, not EJBQL. But the JasperReports part of the code is the same.

                 FileResolver fileResolver = new FileResolver() {
                                                @Override
                                                public File resolveFile(String fileName) {
                                                   return new File(getServletContext().getRealPath("/") + fileName);
                                                }
                                             };
    
                 Map parameters = new HashMap();
                 parameters.put("REPORT_FILE_RESOLVER", fileResolver);
    
                 ...... // blah blah
    
                 JasperPrint jrprint = JasperFillManager.fillReport(input, parameters,  conn);
    
                 byte[] reportBytes;
    
                 jrprint.setName("MyFile." + fileFormat);
    
                 response.setContentType("APPLICATION/OCTET-STREAM");
                 String disHeader = "Attachment;Filename=\"MyFile.";
    
                 ServletOutputStream os = response.getOutputStream();
    
                    response.setHeader("Content-Disposition", disHeader);
    
                    reportBytes = JasperExportManager.exportReportToPdf(jrprint);
                    os.write(reportBytes);
    
  2. your problem it’s that you’re using wrong the methods of jasper each method returns an object. Try like this

    //your conn have's to be a empty datasource because you are using a ejb connection
    JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, parameters, conn);
    
    //notes that i'm using the object jasperprint
    JasperManager.printReportToPdfFile(jasperPrint,"Name of youer File.pdf");
    

    i think that solved your problem

    UPDATE

    tried to compile the jrxml first and then fill the report

    JasperReport report = JasperCompileManager.compileReport(
          "yourReport.jrxml");
      JasperPrint print = JasperFillManager.fillReport(report, parameters, conn);
    

    Also instead the use the method printreporttopdffile try like this

    //this method only takes two parameters
    JasperExportManager.exportReportToPdfFile(jasperPrint,"Name of youer File.pdf");
    

    UPDATE 2 Assuming that the class that map of the your data table it’s called foo and have a attribute called j the select it’s like this

    SELECT COUNT(f.j) from foo as f