Предостережение: я не являюсь разработчиком Struts (больше JSF 1.2 / 2.0):
JasperReports довольно привередлив и очень многословен в отношении ошибок, если вы специально не настроите его на бесшумное поведение.Исключения нулевого указателя часто происходят из тех мест, которые вы не ожидаете (изображения / простой текст и т. Д.), И, к сожалению, иногда вы получаете сообщение об ошибке в вызовах «loadObject» или «fillReport» практически без информации.
Попробуйте разбить его на несколько этапов и посмотреть на него в отладчике, чтобы точно определить, где он выходит из строя.Скорее всего, это не составит труда, если разбить его на части.Удалите все изображения и т. Д. ... и запустите пустой отчет (буквально привет), чтобы убедиться, что NPE не находится внутри отчета и что ваша структура работает.Его будет довольно легко отлаживать, если он будет разбит на части.
Обычно вы можете проверить каждый шаг с помощью:
//load == classloader (I'm inside JBoss so I have to explicitly define it)
//This is pseudo code pulled from my test environment
JasperReport report = JasperCompileManager.compileReport(load.getResourceAsStream("yourpackage/report.jrxml"));
JasperPrint print = JasperFillManager.fillReport(report, new Map<String, Object>(), java.sql.Connection);
JasperExportManager.exportReportToPdfStream(print, outStream);
Я действительно не рекомендую компилировать в производственной среде(использование печати - лучший способ), но у меня был ряд проблем с загрузкой классов (связанных с JBoss), NPE, вызванных изображениями и другими мелочами, и ошибки, вызванные множеством неверных сценариев внутри отчета.
Пройдите тестирование внутри фреймворка, и вы быстро обнаружите проблему.Jasper, пожалуй, лучшее программное обеспечение для составления отчетов для Java (оно очень детализировано), но отладка довольно бешеная.
Разбивая его на шаги, вы облегчаете отладку и видите, где на самом деле существует NPE.Код, который вы используете, выглядит хорошо: я поместил бы мои деньги в нулевой поток или на ресурс в отчете, который не находится (вероятно, изображение).