2010-04-29 6 views
1

Je suis nouveau sur Java et je suis confronté à ce problème que je n'arrive pas à résoudre. J'ai hérité de ce projet et je le code suivant dans un de mes scriptlets:Java jasper report NullPointerException

DefaultLogger.logMessage("DEBUG path: "+ reportFile.getPath()); 
DefaultLogger.logMessage("DEBUG parameters: "+ parameters); 
DefaultLogger.logMessage("DEBUG jr: "+ jr); 
bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, jr); 

Et j'obtenir les résultats suivants (la quatrième ligne il y a la ligne 287 en FootwearReportsServlet.doGet):

DEBUG path: C:\Development\JavaWorkspaces\Workspace1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\RSLDevelopmentStandard\reports\templates\footwear\RslFootwearReport.jasper 
DEBUG parameters: {[email protected]7af1, signature_path=images/logo_reports.jpg, submission_id=20070213154168780, [email protected]5795ce, logo_path=images/logos_3.gif, [email protected]2, test[email protected]1883d5f, signature_path2=images/logo_reports.jpg, [email protected], [email protected]504e0} 
DEBUG jr: [email protected]b6 
Apr 29, 2010 4:15:13 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet FootwearReportsServlet threw exception 
java.lang.NullPointerException 
    at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89) 
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601) 
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:517) 
    at net.sf.jasperreports.engine.JasperRunManager.runReportToPdf(JasperRunManager.java:385) 
    at com.rsl.reports.FootwearReportsServlet.doGet(FootwearReportsServlet.java:287) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Unknown Source) 

Ce que je ne peux pas comprendre est où la référence nulle est. À partir des lignes de débogage, je peux voir que chaque paramètre a une valeur. Se pourrait-il se référer à un mauvais chemin à l'une des images? Des idées? Pour une raison quelconque, mon serveur ne démarre pas en mode débogage dans Eclipse, j'ai donc du mal à comprendre cela.

+0

Quelle version de JasperReports est-ce? Regarder le fichier de code source exact pour cette version est très utile. – doublep

+0

très probablement c'est ceci: http://grepcode.com/file/repo1.maven.org/maven2/jasperreports/jasperreports/3.1.0/net/sf/jasperreports/engine/fill/JRFiller.java – MeBigFatGuy

+0

Pourriez-vous poster comment vous créez la source de données "jr"? – Gordon

Répondre

4

En regardant la ligne où vous obtenez l'erreur:

jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89) 

Dans le code source JRFiller correspond à

jasperPrint = filler.fill(parameters, dataSource); 

La seule chose qui peut provoquer une NullPointerException dans cette ligne est le cas où filler est null. Les paramètres ne sont pas vérifiés pour null à ce stade. En regardant le code de createFiller (ligne 134), vous pouvez facilement voir la condition dans laquelle cette fonction renvoie un pointeur nul. Donc je suppose que vous avez oublié d'indiquer la commande d'impression (PRINT_ORDER_HORIZONTAL ou PRINT_ORDER_VERTICAL).

+0

Excellent! Je regarde dans l'API/documentation pour essayer de trouver un moyen de définir la commande d'impression ... – Daniel

1

J'ai le même problème.

Roland Illig a raison, la commande d'impression est manquante. Cela peut être dû au fait que le fichier de rapport compilé ne contient pas les champs obligatoires. Ajouter ensuite une valeur au champ de commande d'impression n'aide pas, il continue à se bloquer à la position suivante où un autre champ est manquant.

Utilisez la même version du compilateur (par exemple iReport) et votre bibliothèque d'exécution.

+0

J'ai eu le même problème. Juste remarqué que j'ai utilisé une version différente pour compiler et exécuter. Les rendre identiques a résolu mon problème. Je vous remercie ! – bkrish

1

Enlever l'ordre de toutes vos séries et catégories. Il supprimera cette exception.