NullPointerException com jasper reports

Amigos, estou tendo um problema para exibir um relatório em minha aplicação. Segue as partes relevantes do código:

// (...)

HashMap parametros = new HashMap();

// [inserção dos parâmetros]

// Instancia o array de bytes de retorno
byte[] retorno = null;

// Lista que será preenchida com beans preenchidos com o resultado da pesquisa e será enviado para o data source
List listaRelatorios = new ArrayList();

// [preenchimento da lista]

RelatorioAmostraPorElementoDataSource ds = new RelatorioAmostraPorElementoDataSource(listaRelatorios);

// Constante com o caminho do relatório
URL url = this.getClass().getClassLoader().getResource(ConstantesRelatorios.CAMINHO_RELATORIO_AMOSTRAS_POR_ELEMENTO_SUB);
File arquivoRelatorio = new File(url.getFile());
InputStream relatorioStream = null;

relatorioStream = new FileInputStream(arquivoRelatorio);
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(relatorioStream);

try {
         JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parametros, ds);
         retorno = JasperExportManager.exportReportToPdf(jasperPrint);
} catch (NullPointerException npe) {
         npe.printStackTrace();
}

Na linha 25, na hora de preencher o JasperPrint eu recebo o seguinte erro: (Edit: na verdade, o erro acontece na linha 23, na hora de usar o JRLoader.)

09:07:16,029 WARN  [RequestProcessor] Unhandled Exception thrown: class java.lang.NullPointerException
09:07:16,029 ERROR [STDERR] javax.servlet.ServletException
09:07:16,029 ERROR [STDERR]         at org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
09:07:16,029 ERROR [STDERR]         at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
09:07:16,029 ERROR [STDERR]         at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
09:07:16,342 ERROR [STDERR]         at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
09:07:16,342 ERROR [STDERR]         at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
09:07:16,342 ERROR [STDERR]         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
09:07:16,342 ERROR [STDERR]         at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
09:07:16,342 ERROR [STDERR]         at org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:46)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
09:07:16,342 ERROR [STDERR]         at sgcq.gui.util.FiltroExibirPesquisar.doFilter(FiltroExibirPesquisar.java:76)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
09:07:16,342 ERROR [STDERR]         at sgcq.gui.util.FiltroLimparSessao.doFilter(FiltroLimparSessao.java:64)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
09:07:16,342 ERROR [STDERR]         at sgcq.gui.util.FiltroSegurancaAcesso.doFilter(FiltroSegurancaAcesso.java:57)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
09:07:16,342 ERROR [STDERR]         at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
09:07:16,342 ERROR [STDERR]         at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
09:07:16,342 ERROR [STDERR]         at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
09:07:16,342 ERROR [STDERR]         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
09:07:16,342 ERROR [STDERR]         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
09:07:16,342 ERROR [STDERR]         at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
09:07:16,342 ERROR [STDERR]         at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
09:07:16,342 ERROR [STDERR]         at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
09:07:16,342 ERROR [STDERR]         at java.lang.Thread.run(Thread.java:619)

Parece ser bem simples, o problema é que a constante com o caminho do relatório não está errada (pois existem outros relatórios que estão funcionando na aplicação que utilizam essas constantes), e ele de fato acha o arquivo do jasper, pois eu estava recebendo outros erros, estes referentes a coisas específicas do relatório (problemas de cast e coisas do tipo).

Alguém tem alguma idéia do que possa ser?