Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Error generar reportes desde JAR

Hola amigos soy nuevo en el foro, y además nuevo en la programación JAVA, quería solicitar su valiosa ayuda con un problema que tengo:

Tengo una aplicacion Java utilizando Eclipse y los reportes diseñados en Ireport 5.5.0, al correr la aplicación dentro de Eclipse los reportes se generan sin ningún problema, luego genere un jar utilizando FAT-JAR, y al ejecutar la aplicación desde el Jar no genera los reportes, la corri desde la ventana de comandos y me da el siguiente error:

Grave: End event threw exception
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.commons.beanutils.MethodUtils.invokeMethod(MethodUtils.java:283)
at org.apache.commons.digester.SetNextRule.end(SetNextRule.java:220)
at org.apache.commons.digester.Rule.end(Rule.java:257)
at org.apache.commons.digester.Digester.endElement(Digester.java:1345)
at net.sf.jasperreports.engine.xml.JRXmlDigester.endElement(JRXmlDigester.java:199)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.endElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp l$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(U
nknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next
(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown So
urce)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Un
known Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.p
arse(Unknown Source)
at org.apache.commons.digester.Digester.parse(Digester.java:1892)
at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:
289)
at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:
276)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:265
)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:210
)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:194
)
at ReportesVtas.runReporte(ReportesVtas.java:186)
at PRepCons.actionPerformed(PRepCons.java:231)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: net.sf.jasperreports.engine.JRRuntimeException: No query executer fac
tory registered for the 'SQL' language.
at net.sf.jasperreports.engine.util.JRQueryExecuterUtils.getExecuterFact
ory(JRQueryExecuterUtils.java:114)
at net.sf.jasperreports.engine.design.JRDesignDataset.queryLanguageChang
ed(JRDesignDataset.java:1180)
at net.sf.jasperreports.engine.design.JRDesignDataset.setQuery(JRDesignD
ataset.java:647)
at net.sf.jasperreports.engine.design.JasperDesign.setQuery(JasperDesign
.java:791)
... 65 more

Mensaje de Error:org.xml.sax.SAXParseException; lineNumber: 51; columnNumber: 16
; Error at line 51 char 16: No query executer factory registered for the 'SQL' language.


Según esta traza el error es causado en: "Caused by: net.sf.jasperreports.engine.JRRuntimeException: No query executer factory registered for the 'SQL' language."

Ya verifique el archivo "defaultjasperreports" dentro del FatJar y allí esta registrado el SQL para el query executer Factory, estas son las líneas:

# Query executer settings
net.sf.jasperreports.query.executer.factory.sql=net.sf.jasperreports.engine.query.JRJdbcQueryExecuterFactory
net.sf.jasperreports.query.executer.factory.SQL=net.sf.jasperreports.engine.query.JRJdbcQueryExecuterFactory
net.sf.jasperreports.query.executer.factory.hql=net.sf.jasperreports.engine.query.JRHibernateQueryExecuterFactory
net.sf.jasperreports.query.executer.factory.HQL=net.sf.jasperreports.engine.query.JRHibernateQueryExecuterFactory
net.sf.jasperreports.query.executer.factory.xPath=net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory
net.sf.jasperreports.query.executer.factory.XPath=net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory

También van todos los archivos de reportes y librerías en el FatJar.

Ya busque por toda la red una solución y hasta ahorita no he encontrado nada que me guie, alguien que me ilumine.

De antemano muchas gracias

junio 7, 2014 | Registered Commenterhugopadilla

Buenas,

El análisis que has hecho del error es perfecto. Yo diría que incluso sorprendente para alguien que empieza con java.

Efectivamente el problema es que al empaquetar con FatJar (sea lo que sea) no encuentra encuentra fichero de configuración en el classpath y no lo puede cargar.
Comentas que el fichero default.jasperreports.properties está dentro del jar, puedes indicar exactamente en que ruta está dentro del jar? Está dentro de "classes"?
Si no es así, copia dicho fichero en tu proyecto colgando directamente del src y genera de nuevo el "superjar".


Un saludo

junio 7, 2014 | Unregistered CommenterUnoPorAhi

Gracias por tu respuesta rápida, agradezco mucho tu ayuda, y bueno soy nuevo en java pero he programado en VB.net eso creo que me ha ayudado, en cuanto a tu pregunta el fichero default.jasperreports.properties no esta bajo ningún directorio se ecuentra directamente al abrir el jar, voy a hacer lo que me mencionas de copiar el fichero directamente al src y te comento el resultado.

Gracias

junio 7, 2014 | Registered Commenterhugopadilla

Copie el fichero default.jasperreports.properties directamente a mi proyecto en SRC genere el "superjar" pero siempre me da el mismo error.

Una aclaración:

- default.jasperreports.properties lo tome del primer "superjar" que había generado esta bien asi o ?debería tomarlo de algún directorio de mi proyecto original?

- y algo mas al abrir el "superjar" todos los archivos .class están directamente al abrir el "superjar" (al igual que default.jasperreports.properties) no están dentro de ningún directorio es eso correcto o ?debería de existir algún directorio "classes"?

junio 7, 2014 | Registered Commenterhugopadilla

Ya veo. Olvida lo de classes. Parece que FatJar genera un jar copiando dentro el contenido de todas las dependencias y hace un merge de los distintos manifest.

Yo he utilizado solo un poquito Jasper reports y eso fue hace unos 10 años aprox. Sin embargo, por lo que veo aquí (http://rajendratambat.blogspot.fr/2011/12/working-with-jasperreportsproperties.html), tienes otras opciones.

-Copia el fichero en tu src pero llamalo jasperreports.properties , sin el default. Reempaqueta y vuelve a probar.
-Si no funciona, al inicio de tu programa haz un:
Properties systemProps = System.getProperties();
systemProps.put("net.sf.jasperreports.query.executer.factory.SQL", "net.sf.jasperreports.engine.query.JRJdbcQueryExecuterFactory
");
System.setProperties(systemProps);


Un saludo

junio 7, 2014 | Unregistered CommenterUnoPorAhi

Probe de las dos formas y nada siempre me da el mismo error.

Revisando el Jar note que hay 2 librerías que no me las agrega, a pesar de ir marcadas cuando genero el Jar, las dos librerías son: commons-beanutils-1.8.3 y jasperreports-extensions-3.5.3 no andara por aquí el problema.

Saludos

junio 9, 2014 | Unregistered CommenterHugo Padilla

Problema resuelto.

Por si alguien mas tiene algún problema similar, lo solucione generando el JAR con la opción "Runnable Jar File" en eclipse anteriormente lo estaba generando con "Fat Jar Exporter", probablemente fue el plugin de Fat Jar que agregue.

Muchas Gracias por la ayuda.

junio 13, 2014 | Unregistered CommenterHugo Padilla

Me alegro, gracias por compartir la solución.

Un saludo

junio 13, 2014 | Unregistered CommenterUnoPorAhi