En una parte de mi aplicación web quiero hacer reportes pdf con iReport. Bien el archivo .jrxml lo tengo, perfecto. También he realizados algunas pruebas, con este código:
Código PHP:
package es.pfc.gtc.http.controller.actions;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
public class JasperReports1
{
public static void main(String[] args)
{
JasperReport jasperReport;
JasperPrint jasperPrint;
try
{
//0-Se hace la conexion a la Base de Datos
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection ("jdbc:mysql://localhost:3306/gtc?user=root&password=admin");
System.out.println("PASAMOS POR PASO 0!");
//1-Compilamos el archivo XML y lo cargamos en memoria
jasperReport = JasperCompileManager.compileReport(
"D:/Informes/gtc-informe-PP_INICIO.jrxml");
System.out.println("PASAMOS POR PASO 1!");
//2-Llenamos el reporte con la información y parámetros necesarios (En este caso nada)
jasperPrint = JasperFillManager.fillReport(
jasperReport, new HashMap(), conn);
System.out.println("PASAMOS POR PASO 2!");
//3-Exportamos el reporte a pdf y lo guardamos en disco
JasperExportManager.exportReportToPdfFile(
jasperPrint, "D:/Informes/holaMundo.pdf");
System.out.println("PASAMOS POR PASO 3!");
//5-Cerrar la conexion
conn.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Mi problema está cuando no está en el main.
Código PHP:
package es.pfc.gtc.http.controller.actions;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import es.pfc.util.exceptions.InternalErrorException;
import es.pfc.util.struts.action.DefaultAction;
public class JasperReportAction extends DefaultAction {
protected ActionForward doExecute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException, InternalErrorException {
JasperReport jasperReport;
JasperPrint jasperPrint;
Map pars = new HashMap();
try{
//1. Conexion con la base de datos --> connection
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection ("jdbc:mysql://localhost:3306/gtc?user=root&password=okok");
System.out.println("1 - DAO REPORT");
//2. Compilar el archivo jrxml y cargar en memoria
jasperReport = JasperCompileManager.compileReport("C:/Documents and Settings/Administrador/workspace/pfc/gtc-informe-PP_INICIO.jrxml");
//jasperReport = JasperCompileManager.compileReport("D:/Informes/gtc-informe-PP_INICIO.jrxml");
System.out.println("2 - DAO REPORT");
//3. Rellenamos el reporte con la información y parámetros necesarios
jasperPrint = JasperFillManager.fillReport(jasperReport, pars, connection);
//4. Exportamos el reporte a pdf y lo guardamos en disco
JasperExportManager.exportReportToPdfFile(jasperPrint, "D:/Informes/informe.pdf");
} catch (Exception e) {
throw new InternalErrorException(e);
} finally {
}
return null;
}
}
Trato de ejecutarlo desde una acción (desde una pagina jsp pulsar un botón que me ejecute el action. Los errors que me da es el siguiente :
Código PHP:
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.<clinit>(JRXmlDigesterFactory.java:180)
net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:203)
net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:168)
net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152)
net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:150)
es.pfc.gtc.http.controller.actions.JasperReportAction.doExecute(JasperReportAction.java:65)
es.pfc.util.struts.action.DefaultAction.execute(DefaultAction.java:45)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
es.pfc.gtc.http.controller.frontcontroller.MyPortalRequestProcessor.processActionPerform(MyPortalRequestProcessor.java:41)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Quizá sea una tontería... pero yo no lo veo!!
MUCHAS GRACIAS!