Javafree
Página Inicial do Fórum > Java Avançado

Jasper NullPointerException



Criar novo tópico   Responder tópico
  1. Comment Arrow

    Publicado em: 11/10/2016 12:08:02

    Olá a todos, estou precisando gerar um relatório em pdf via browser pelo servlet pois tenho um projeto que é preciso ser entregue o quanto antes. Eu consegui gerar o relatorio usando o jasper JasperViewer e salvar como pdf, porem o que preciso é mostrar via browser em pdf e a pessoa baixar em pdf. Ja usei tanto recurso e indicacoes que nao funcionaram que estou usando agora um passo a passo do David Buzatto, inclusive ate enviei email para ver se ele poderia me ajudar, enfim segue projeto.

    O erro é:

    out 11, 2016 11:11:50 AM org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: Servlet.service() for servlet [ReportServlet] in context with path [] threw exception
    java.lang.NullPointerException
    at java.lang.Class.isAssignableFrom(Native Method)
    at net.sf.jasperreports.engine.fill.JRFillTextField.getFormat(JRFillTextField.java:706)
    at net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:394)
    at net.sf.jasperreports.engine.fill.JRFillTextField.evaluate(JRFillTextField.java:36
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:25
    at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:499)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillBandNoOverflow(JRVerticalFiller.java:439)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillPageHeader(JRVerticalFiller.java:403)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:264)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:12
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845)
    at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:5
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:37
    at tutorialrelatoriosweb.util.ReportUtils.createPDFReport(ReportUtils.java:57)
    at tutorialrelatoriosweb.servlets.ReportServlet.processRequest(ReportServlet.java:51)
    at tutorialrelatoriosweb.servlets.ReportServlet.doGet(ReportServlet.java:80)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:20
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:20
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)



    Meu projeto esta da seguinte maneira:

    Index:

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
    </head>
    <body>
    <a href="ReportServlet">ReportServlet</a></br>
    </body>
    </html>
    Classe ConnectionFactory

    package tutorialrelatoriosweb.jdbc;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;

    public class ConnectionFactory {

    /*
    * Este bloco estático será executado assim que esta classe for carregada,
    * sendo assim, será executado apenas uma vez.
    */
    static {
    try {
    /*
    * Carrega a classe com.mysql.jdbc.Driver, que é a implementação
    * do driver JDBC para o MySQL.
    */
    Class.forName( "com.mysql.jdbc.Driver" );

    // caso a classe não seja encontrada
    } catch ( ClassNotFoundException exc ) {

    /*
    * Como log usaremos o stacktrace das excessões, mas recomendo
    * que para um projeto real você utilize algum mecanismo de log
    * melhor, como o Log4J por exemplo.
    */
    exc.printStackTrace();

    }
    }


    public static Connection getConnection(
    String url,
    String usuario,
    String senha ) throws SQLException {

    // retorna a conexão a partir do método getConnection de DriverManager
    return DriverManager.getConnection( url, usuario, senha );

    }

    /**
    * Obtém uma conexão para a base de dados sakila.
    *
    * @return Uma conexão para a base de dados sakila.
    * @throws SQLException Caso ocorra algum problema durante a conexão.
    */
    public static Connection getSakilaConnection() throws SQLException {

    return getConnection(
    "jdbc:mysql://localhost/sakila",
    "root",
    "123456" );

    }

    }
    SERVLET

    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */

    package tutorialrelatoriosweb.servlets;

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.Map;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import net.sf.jasperreports.engine.JRException;
    import tutorialrelatoriosweb.jdbc.ConnectionFactory;
    import tutorialrelatoriosweb.util.ReportUtils;

    /**
    * Servlet para geração de relatórios.
    *
    * @author David Buzatto
    */
    public class ReportServlet extends HttpServlet {

    /**
    * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
    * @param request servlet request
    * @param response servlet response
    * @throws ServletException if a servlet-specific error occurs
    * @throws IOException if an I/O error occurs
    */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    OutputStream out = null;

    // obtém o relatório compilado
    InputStream inputStream = getClass().getResourceAsStream( "/ClientesPorNome.jasper" );

    // preenche o mapa de parâmetros
    Map<String, Object> parametros = new HashMap<String, Object>();
    parametros.put( "primeiroNome", "D%" );

    try {

    // gera o relatório e atribui o OutputStream gerado
    out = ReportUtils.createPDFReport( inputStream, parametros,
    ConnectionFactory.getSakilaConnection(), response );

    } catch ( SQLException exc ) {
    exc.printStackTrace();
    } catch ( JRException exc ) {
    exc.printStackTrace();
    } finally {

    // se não aconteceu nenhum problema, fecha o output stream
    if ( out != null ) {
    out.close();
    }

    }

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    * @throws ServletException if a servlet-specific error occurs
    * @throws IOException if an I/O error occurs
    */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    processRequest(request, response);
    }

    /**
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    * @throws ServletException if a servlet-specific error occurs
    * @throws IOException if an I/O error occurs
    */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    processRequest(request, response);
    }

    /**
    * Returns a short description of the servlet.
    * @return a String containing servlet description
    */
    @Override
    public String getServletInfo() {
    return "Short description";
    }// </editor-fold>

    }


    **ReportUtils**

    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */

    package tutorialrelatoriosweb.util;

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.sql.Connection;
    import java.util.Map;
    import javax.servlet.http.HttpServletResponse;
    import net.sf.jasperreports.engine.JRException;
    import net.sf.jasperreports.engine.JRExporter;
    import net.sf.jasperreports.engine.JRExporterParameter;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.JasperPrint;
    import net.sf.jasperreports.engine.export.JRPdfExporter;

    /**
    * Classe com métodos utilitários para gerar relatórios.
    *
    * @author David Buzatto
    */
    public class ReportUtils {

    /**
    * Gera o relatório em PDF.
    *
    * @param inputStream InputStream que contém o relatório.
    * @param parametros Parâmetros utilizados pelo relatório.
    * @param conexao Conexão utilizada para a execução da query.
    * @param response HttpServletResponse que será usado como base para
    * gerar o relatório.
    * @return O OutputStream do HttpServletResponse passado.
    * @throws JRException Caso ocorra algum problema na geração do relatório.
    * @throws IOException Caso ocorra algum problema na obtenção do
    * OutputStream.
    */
    public static OutputStream createPDFReport(
    InputStream inputStream,
    Map<String, Object> parametros,
    Connection conexao,
    HttpServletResponse response ) throws JRException, IOException {

    // configura o content type do response
    response.setContentType( "application/pdf" );

    // obtém o OutputStream para escrever o relatório
    OutputStream out = response.getOutputStream();

    /*
    * Cria um JasperPrint, que é a versão preenchida do relatório,
    * usando uma conexão.
    */
    JasperPrint jasperPrint = JasperFillManager.fillReport(
    inputStream, parametros, conexao );

    // Exporta em PDF, escrevendo os dados no outputStream do response.
    JRExporter exporter = new JRPdfExporter();
    exporter.setParameter( JRExporterParameter.JASPER_PRINT,
    jasperPrint );
    exporter.setParameter( JRExporterParameter.OUTPUT_STREAM,
    out );

    exporter.exportReport();

    // retorna o OutputStream
    return out;

    }

    }
    estrutrua projeto.png302x660 17.6 KB
    Sou novo aqui, se tiver postado algo de errado peço desculpas desde ja, aguardo uma ajuda ai galera. Obrigado.



  1. Relacionados