C.2. Depuración de errores al intentar ejecutar informes JasperReports en gvHidra

Para activar el modo de depuración de informes Jasper en GvHidra, dentro del proyecto PHP en el que estemos trabajando iremos al fichero: include/jasper/modulosPHP/informeJasper.PHP

Y dentro de el, hay que moverse a la linea 2 y cambiar la instrucción:


			define('DEBUG', FALSE);
			
			

por:


			define('DEBUG', TRUE);
			
			

y a partir de ese momento los listados ya no se exportarán a PDF ni se visualizarán y en su lugar se imprimirá en el navegador toda la información siguiente:

En el caso de que el error esté arreglado y funcione todo bien se presentará:

En el caso de que el error haya surgido al intentar ejecutar el informe con los parámetros y la conexión pasada, que es el caso más habitual, se nos presentará un mensaje al final del navegador que dirá algo similar a:

			-informeJasper.php: No se generó el fichero resultado: /tmp/listadoAlumnosJasper_XiAaZx.pdf
			

Y justo arriba de este mensaje aparecerá toda la pila de mensajes de error devuelta por JasperReports, por ejemplo si no pasamos el valor de un parámetro requerido obtendriamos un mensaje como éste:


Resultado Ejecución: net.sf.jasperreports.engine.JRException: Error executing SQL statement for : 
listadoAlumnosJasper at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:141) 
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:682) at 
net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:614) at 
net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:892) at 
net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:716) at 
net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:669) at 
net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63) at 
net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402) at 
net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234) at 
InformeJasper.createResultFile(InformeJasper.java:282) at 
InformeJasper.cargaFichDatosEntrada(InformeJasper.java:724) at 
InformeJasper.main(InformeJasper.java:338) Caused by: org.postgresql.util.PSQLException: 
No se ha especificado un valor para el parámetro 1. at 
org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:146) at 
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:182) at 
org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452) at 
org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:351) at 
org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:255) at 
net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:135) ... 
11 more	
			

Nótese que en primer lugar encontramos todos los métodos del API de JasperReports que han fallado empezado por el primer método que haya abortado su ejecución, y que debe acabar llegando a la clase InformeJasper.class A continuación aparece un mensaje "Caused by:" que es la linea más importante de todo el listado ya que en ella JasperReports intentará explicarnos la causa del error .

Seguiremos intentado arregalr el error hasta que al lanzarlo en el navegador ya no aparezca la pila de mensajes de error y tampoco aparezca el aviso de:


-informeJasper.php: No se generó el fichero resultado:
			

Si lo que tenemos en pantalla es únicamente es el fichero XML que intercambian InformeJasper.php y InformeJasper.class es que ya hemos corregido el error y en este caso debemos abandonar el modo de depuración volviendo a colocar en el fichero include/jasper/modulosPHP/informeJasper.PHP la linea define('DEBUG', FALSE);