Jasper报告未在ADF屏幕上呈现PDF文件

时间:2015-05-26 12:36:25

标签: java jasper-reports oracle-adf

我收到错误:Error While Displaying Report Page : See Console for Details

我有以下所有罐子

  • 的iText-2.1.7.js2
  • 杰克逊 - 芯 - 2.1.4
  • 的JasperReports-5.6.0
  • 的JasperReports-图表主题-5.6.0
  • JasperReports的核呈现器
  • 的JasperReports的字体-5.6.0
  • jcommon-1.0.15
  • jfreechart的-1.0.13

有人可以告诉我哪里错了吗?

堆栈跟踪:

      java.lang.ClassCastException:       net.sf.jasperreports.engine.export.DefaultExporterFilterFactory cannot be cast       to net.sf.jasperreports.engine.export.ExporterFilterFactory      
     at          net.sf.jasperreports.engine.export.ExporterFilterFactoryUtil.getFilterFactory(Ex     porterFilterFactoryUtil.java:53)
    at     net.sf.jasperreports.engine.JRAbstractExporter.createFilter(JRAbstractExporter.j     ava:1136)
    at net.sf.jasperreports.engine.JRAbstractExporter.initReport(JRAbstractExporter.jav     a:726)
      at   net.sf.jasperreports.engine.export.JRGraphics2DExporter.initReport(JRGraphics2DE     xporter.java:255)
    at      net.sf.jasperreports.engine.JRAbstractExporter.setCurrentExporterInputItem(JRAbs     tractExporter.java:567)
     at net.sf.jasperreports.engine.export.JRGraphics2DExporter.exportReportToGraphics2D     (JRGraphics2DExporter.java:285)
     at net.sf.jasperreports.engine.export.JRGraphics2DExporter.exportReport(JRGraphics2     DExporter.java:236)
    at net.sf.jasperreports.view.JRViewer.paintPage(JRViewer.java:2121)
    at      net.sf.jasperreports.view.JRViewer$PageRenderer.paintComponent(JRViewer.java:227     1)
     at javax.swing.JComponent.paint(JComponent.java:1054)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JViewport.paint(JViewport.java:731)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
     at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5226)
    at      javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:     1529)
    at      javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1452)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1249)
    at javax.swing.JComponent.paint(JComponent.java:1040)
    at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
    at      sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78)
    at      sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115)
    at java.awt.Container.paint(Container.java:1967)
    at java.awt.Window.paint(Window.java:3877)
    at javax.swing.RepaintManager$3.run(RepaintManager.java:819)
    at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
     at java.security.AccessController.doPrivileged(Native Method)
    at      java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:7     6)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)
    at      javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)
    at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)
    at      javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at      java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:7     6)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242      )
    at      java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150     )
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

我的Bean代码:

 public class PortoflioListJasper {
    public PortoflioListJasper() {
      }

      public String runReportAction() {
          System.out.println("On ReportAction");
          DCIteratorBinding empIter = (DCIteratorBinding)       getBindings().get("*Iterator Name*");
            System.out.println("On Iterator");
          Integer var = (Integer)      (empIter.getCurrentRow().getAttribute("Id"));
            System.out.println("On Attribute");
          Map m = new HashMap();
            System.out.println("On Map EmpID");
          m.put("name",var );// where employeeId is a jasper report       parameter
          System.out.println("On Map " +portfolioId);
          try
          {
            runReport("Reporta.jasper", m);
          }
          catch (Exception e)
          {
          }
          return null;
          }
                public BindingContainer getBindings()
                       {
                       return       BindingContext.getCurrent().getCurrentBindingsEntry();
                       }

                       public Connection getDataSourceConnection(String       dataSourceName)
                         throws Exception
                       {
                         Context ctx = new InitialContext();
                         DataSource ds =       (DataSource)ctx.lookup(dataSourceName);
                   return ds.getConnection();
                 }

                 private Connection getConnection()
                 {
                   try
                   {
                   System.out.println("On Connection");
                 return getDataSourceConnection("*DataSource Name*");//       datasource name should be defined in weblogic

                         }
                   catch (Exception e) {
                       System.out.println("On Catch");
                       e.printStackTrace();
                       return null;
                   }
                 }


                 public  ServletContext getContext()
                 {
                         return           (ServletContext)getFacesContext().getExternalContext().getContext();
                       }
                 public  HttpServletResponse getResponse()
                 {
                   return       (HttpServletResponse)getFacesContext().getExternalContext().getResponse();
                       }
                       public static FacesContext getFacesContext()
                       {
                         return FacesContext.getCurrentInstance();
                 }
                 public void runReport(String repPath, java.util.Map param) throws Exception
                 {
                 Connection conn = null;
                 try
                 {
                   HttpServletResponse response = getResponse();
                     System.out.println("Response : " +response);
                   ServletOutputStream out = response.getOutputStream();
                   response.setHeader("Cache-Control", "max-age=0");
                   response.setContentType("application/octet-stream");
                   ServletContext context = getContext();
                         InputStream fs = context.getResourceAsStream("/Reports/"             + repPath);
                           System.out.println("Response : " +repPath);
                           System.out.println("Response : " +fs);

                   JasperReport template = (JasperReport)     JRLoader.loadObject(fs);
                           System.out.println("Template : " +template);
                      template.setWhenNoDataType(WhenNoDataTypeEnum.ALL_SECTIONS_NO_DETAIL);
                   conn = getConnection();

                         JasperPrint print =       JasperFillManager.fillReport(template, param, conn);
                           System.out.println("PDF" +print);
                         ByteArrayOutputStream baos = new ByteArrayOutputStream();
                         JasperExportManager.exportReportToPdfStream(print, baos);


                     System.out.println("PDF" +baos);
                     out.write(baos.toByteArray());
                    JasperViewer view = new JasperViewer(print,false);
                    view.setVisible(true);
                     System.out.println("Printed");
                     out.flush();
                     out.close();
                     FacesContext.getCurrentInstance().responseComplete();

                  }
                 catch (Exception jex)
                 {
                   jex.printStackTrace();
                 }
                 finally
                 {   
                   close(conn);
                 }
                 }

                 public void close(Connection con)
                 {
                  if (con != null)
                  {
                    try
                    {
                      con.close();
                    }
                    catch (Exception e)
                    {
                    }
                  }
                 }
      }

我希望在屏幕上显示报告。

我想念任何罐子吗?

1 个答案:

答案 0 :(得分:1)

我们在adf中提供了相当多的pdf。这是一个这样的例子。所需的罐子清单随附供参考。 我的jasper报告(MainReport.jasper)是一个jar文件,放在应用程序中。

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
    try {
        response.setContentType("application/pdf");
        Gson gson = new Gson();
        System.out.println("Request in GeneratePDFServlet ::" + request.getParameter("obj"));
        PDFReportQuoteDeatails pdfReportQuoteDeatails = gson.fromJson(request.getParameter("obj"), PDFReportQuoteDeatails.class);
        System.out.println(pdfReportQuoteDeatails);
        InputStream is = (InputStream)getPdfReportAsInputStream(pdfReportQuoteDeatails);
        OutputStream os = response.getOutputStream();
        // is = (InputStream)getPdfReportAsInputStream(pdfReportQuoteDeatails);
        int idx;
        byte[] buffer = new byte[10240];
        while ((idx = is.read(buffer, 0, 10240)) != -1) {
            os.write(buffer, 0, idx);
        }
        System.out.println("Finished Writing..");
        os.close();
        response.flushBuffer();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}


public InputStream getPdfReportAsInputStream(PDFReportQuoteDeatails quoteDetails) {
    try {
        Long maxPeriod = 0L;
        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("MainReport.jasper");
        if (is == null)
            System.out.println("******FILE is null*******");
        else
            System.out.println("FILE is not null");
        JasperPrint printFileName;
        // JasperDesign jd = JRXmlLoader.load(is);
        //   JasperReport compiledReport = JasperCompileManager.compileReport(jd);
        SortedMap<Long, SortedSet<Long>> periodMap = new TreeMap<Long, SortedSet<Long>>();
        for (PDFQuoteLineBean qlb : quoteDetails.getQuoteLines()) {
            SortedSet<Long> milagesForPeriod = periodMap.get(qlb.getPeriod());
            if (milagesForPeriod == null) {
                milagesForPeriod = new TreeSet<Long>();
                System.out.println("qlb.getPeriod():" + qlb.getPeriod());
                System.out.println("milagesForPeriod:" + milagesForPeriod);
                periodMap.put(qlb.getPeriod(), milagesForPeriod);
                if (maxPeriod < qlb.getPeriod()) {
                    maxPeriod = qlb.getPeriod();
                }
            }
            milagesForPeriod.add(qlb.getMileage());
        }
        List<String> quoteHeaders = new ArrayList<String>();
        for (Map.Entry<Long, SortedSet<Long>> e : periodMap.entrySet()) {
            for (Long mileage : e.getValue()) {
                quoteHeaders.add(getHeader(e.getKey(), mileage));
            }
        }
        List list = getQuoteDetailsBeanList(quoteDetails.getQuoteLines(), quoteHeaders);
        JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(list,false);
        Map parameters = new HashMap();
        parameters.put("custAddrLine1", quoteDetails.getCustAddrLine1());
        parameters.put("custAddrLine2", quoteDetails.getCustAddrLine2());
        parameters.put("custAddrPoBox", quoteDetails.getCustAddrPoBox());
        parameters.put("custAddrState", quoteDetails.getCustAddrState());
        parameters.put("CustAddrCountry", quoteDetails.getCustAddrCountry());
        parameters.put("custPhoneNo", quoteDetails.getCustPhoneNo());
        parameters.put("custFaxNo", quoteDetails.getCustFaxNo());
        parameters.put("quoteNo", quoteDetails.getQuoteNumber());
        parameters.put("quoteSubject", quoteDetails.getOpportunityProduct() + " Rates");
        parameters.put("quoteMsg",
                       "We thank you for your enquiry. As desired, please find below our " + quoteDetails.getOpportunityProduct().toLowerCase() + " rates for the vehicle(s) as mentioned below");
        parameters.put("custName", quoteDetails.getCustomerName());
        parameters.put("contactName", quoteDetails.getContactPointName());
        parameters.put("quoteHeader1", quoteHeaders.size() > 0 ? quoteHeaders.get(0) : null);
        parameters.put("quoteHeader2", quoteHeaders.size() > 1 ? quoteHeaders.get(1) : null);
        parameters.put("quoteHeader3", quoteHeaders.size() > 2 ? quoteHeaders.get(2) : null);
        parameters.put("quoteHeader4", quoteHeaders.size() > 3 ? quoteHeaders.get(3) : null);
        parameters.put("quoteDate", quoteDetails.getQuoteDate());
        parameters.put("salesManName", quoteDetails.getSalesManName());
        parameters.put("salesManEmail", quoteDetails.getSalesManEmail());
        parameters.put("salesManContactNo", quoteDetails.getSalesManConatactNo());
        parameters.put("insuranceExcess", quoteDetails.getInsuranceExcess() != null && quoteDetails.getInsuranceExcess().trim().length() > 0 ? quoteDetails.getInsuranceExcess() : "0");
        parameters.put("trafficViolationCharges",
                       quoteDetails.getTrafficViolationCharges() != null && quoteDetails.getTrafficViolationCharges().trim().length() > 0 ? quoteDetails.getTrafficViolationCharges() :
                       "0");
        parameters.put("salikServiceCharge",
                       quoteDetails.getSalikServiceCharge() != null && quoteDetails.getSalikServiceCharge().trim().length() > 0 ? quoteDetails.getSalikServiceCharge() : "0");
        String terminationClause = "";
        if (maxPeriod != null) {
            if (maxPeriod / 12 == 1) {
                terminationClause = "The contract is non Cancellable in the first year. ";
            } else if (maxPeriod / 12 == 2) {
                terminationClause = "The contract is Non cancellable in the first year.\n" +
                        "If the contract is cancelled in the second year , then 3 months rentals would be charged as penalty.\n ";
            } else if (maxPeriod / 12 == 3) {
                terminationClause = "The contract is Non cancellable in the first year.\n" +
                        "If the contract is cancelled in the second year , then 4 months rentals would be charged as penalty.\n" +
                        "If the contract is cancelled in the third  year , then 3 months rentals would be charged as penalty.\n";
            } else {
                terminationClause = "The contract is Non cancellable in the first year.\n" +
                        "If the contract is cancelled in the second year , then 5 months rentals would be charged as penalty.\n" +
                        "If the contract is cancelled in the third  year , then 4 months rentals would be charged as penalty.\n" +
                        "If the contract is cancelled in the fourth year , then 3 months rentals would be charged as penalty.\n";
            }
        }
        parameters.put("terminationClause", terminationClause);
        if (list != null && list.size() > 0) {
            System.out.println(quoteDetails.getQuoteLines().size() + " Quote lines detected");
            parameters.put("noOfLines", list.size());
            printFileName = JasperFillManager.fillReport(is, parameters, beanColDataSource);
        } else {
            System.out.println("No Quote lines detected");
            parameters.put("noOfLines", 1);
            printFileName = JasperFillManager.fillReport(is, parameters, new JREmptyDataSource());
        }
        if (printFileName != null) {
            is = new ByteArrayInputStream(JasperExportManager.exportReportToPdf(printFileName));
            return is;
        } else {
            System.out.println("getPdfReportAsInputStream::after fillReport ::: printFileName is null");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

Jar Files Used in the project