[quote=gustavo_l_walker]Olá ahdeerre,
Bom ao que indica seu erro você tem um erro na consulta do seu relatório, dah um revisada se o sql que você esta usando está correto e se retorna resultados.
Para verificar o StackTrace completo vá na pasta do seu server, lá provavelmente irá ter uma pasta “log” ai dentro dela possivelmente um “server.log” ou qualquer coisa configura um logger para sua aplicação responder tudo no console.[/quote]
Mas utilizando o mesmo relatorio, a mesma consulta e extamente tudo igual sem alterar nada diretamente no eclipse ele funciona normalmente. Esse erro ocorre apenas quando faço upload do .war para o servidor, e no servidor esta tudo igual, criei a mesma base de dados e as mesmas tabelas. Nesse processo de gerar o .war no eclipse e fazer o upload no servidor não ocorre nenhuma alteração certo?
Encontrei no server um arquivo que faz a mesma função da aba console do eclipse, e la descobri que sempre cai no catch.
Abaixo segue a classe que utilizo para gerar o relatorio:
package relatorios;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.util.JRLoader;
public class RelatorioUsuarioSemParametro extends HttpServlet {
private static final long serialVersionUID = 1L;
public void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, Exception {
Connection conn = getConnection();
// gera o relatório
ServletContext context = getServletContext();
byte[] bytes = null;
try{
// carrega os arquivos jasper
JasperReport relatorioJasper = (JasperReport) JRLoader.loadObject(context.getRealPath("/WEB-INF/relatorios/usuarios.jasper"));
// parâmetros, se houver
Map parametros = new HashMap();
// direcciona a saída do relatório para um stream
bytes = JasperRunManager.runReportToPdf(relatorioJasper, parametros, conn);
if (bytes != null && bytes.length > 0)
{
// envia o relatório em formato PDF para o browser
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
}
}catch (JRException jre){
System.err.println("Errrrrrrrrrrroooooooooooooooooooo" + jre);
}
}
private static Connection getConnection() throws ClassNotFoundException, SQLException {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/sistemas";
String user = "root";
String password = "******";
Class.forName(driver);
Connection con = DriverManager.getConnection(url, user, password);
return con;
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
try {
processRequest(request, response);
} catch (Exception ex) {
Logger.getLogger(RelatorioUsuarioSemParametro.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (Exception ex){
Logger.getLogger(RelatorioUsuarioSemParametro.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public String getServletInfo(){
return "Short description";
}
}
Uma vez li em algum lugar que não lembro mais onde foi que era necessário incluir um dos arquivos do ireport (não lembro se era o .jrxml ou o .jasper) no classpath da aplicação. O pior é que agora não encontro mais onde eu li isso. Sabe alguma coisa a respeito?