2010-04-29 8 views
1

Я новичок в Java, и я сталкиваюсь с этой проблемой, которую я не могу понять. Я унаследовал этот проект и у меня есть следующий код в одном из моих скриптлетов: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); 

И я получаю следующие результаты (четвертая строки есть строка 287 в 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) 

Я не могу понять, где нулевая ссылка. Из строк отладки видно, что каждый параметр имеет значение. Может ли это иметь в виду плохой путь к одному из изображений? Есть идеи? По какой-то причине мой сервер не запускается в режиме отладки в Eclipse, поэтому мне трудно понять это.

+0

Какая версия JasperReports это? Глядя на точный файл исходного кода для этой версии, очень полезно. – doublep

+0

скорее всего это: http://grepcode.com/file/repo1.maven.org/maven2/jasperreports/jasperreports/3.1.0/net/sf/jasperreports/engine/fill/JRFiller.java – MeBigFatGuy

+0

Не могли бы вы опубликовать, как вы создаете источник данных «jr»? – Gordon

ответ

4

Глядя на линии, где вы получаете ошибку:

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

В исходном коде JRFiller это соответствует

jasperPrint = filler.fill(parameters, dataSource); 

Единственное, что может вызвать NullPointerException в этой линии случай, когда filler - null. На данный момент параметры не проверяются на null.

Рассматривая код createFiller (строка 134), вы можете легко увидеть условие, в котором эта функция возвращает нулевой указатель. Поэтому, я думаю, вы как-то забыли указать заказ печати (PRINT_ORDER_HORIZONTAL или PRINT_ORDER_VERTICAL).

+0

Отлично! Я просматриваю API/документацию, чтобы попытаться найти способ установить порядок печати ... – Daniel

1

У меня такая же проблема.

Роланд Иллиг прав, печатный заказ отсутствует. Возможно, это связано с тем, что в скомпилированном файле отчета отсутствуют требуемые поля.

Добавление значения в поле порядка печати впоследствии не помогает, оно просто продолжает сбой в следующей позиции, где отсутствует другое поле.

Используйте ту же самую версию компилятора (например, iReport) и вашу библиотеку времени исполнения.

+0

У меня была такая же проблема. Просто заметил, что я использовал другую версию для компиляции и запуска. Решив их, я решил проблему. Спасибо ! – bkrish

1

Удалить заказ из всех ваших серий и категорий. Удалит это исключение.