Java Jasper在jsf应用程序中报告heroku

Java Jasper在jsf应用程序中报告heroku,java,servlets,heroku,jasper-reports,Java,Servlets,Heroku,Jasper Reports,我正在使用jasperreports的应用程序中工作。它使用Primefaces和Mojarra,并部署在Jetty中。当我在本地部署应用程序时,它确实可以正常工作。但当我在heroku部署时,它不起作用 当我将其部署到heroku时,我获得: HTTP错误500 访问/clients.pdf时出现问题。原因: Server Error Caused by: 位于的java.lang.NullPointerException java.io.ObjectInputStream$PeekInpu

我正在使用jasperreports的应用程序中工作。它使用Primefaces和Mojarra,并部署在Jetty中。当我在本地部署应用程序时,它确实可以正常工作。但当我在heroku部署时,它不起作用

当我将其部署到heroku时,我获得:

HTTP错误500

访问/clients.pdf时出现问题。原因:

Server Error Caused by:
位于的java.lang.NullPointerException java.io.ObjectInputStream$PeekInputStream.readObjectInputStream.java:2310 在 java.io.ObjectInputStream$PeekInputStream.readFullyObjectInputStream.java:2323 在 java.io.ObjectInputStream$BlockDataInputStream.readShortObjectInputStream.java:2794 在 java.io.ObjectInputStream.readStreamHeaderObjectInputStream.java:801 在java.io.ObjectInputStream.ObjectInputStream.java:299处 net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.ContextClassLoaderObjectInputStream.java:58 在 net.sf.jasperreports.engine.util.JRLoader.loadObjectJRLoader.java:244 在 net.sf.jasperreports.engine.util.JRLoader.loadObjectJRLoader.java:229 在 net.sf.jasperreports.engine.JasperFillManager.fillJasperFillManager.java:405 在 net.sf.jasperreports.engine.JasperRunManager.runToPdfStreamJasperRunManager.java:201 在 net.sf.jasperreports.engine.JasperRunManager.runreporttopfstreamjasperrunmanager.java:720 在 co.qcsc.spatha.web.servlet.ReportServlet.GenerateReportServlet.java:62 在 co.qcsc.spatha.web.servlet.ReportServlet.processRequestReportServlet.java:37 在 co.qcsc.spatha.web.servlet.ReportServlet.doGetReportServlet.java:25 位于javax.servlet.http.HttpServlet.serviceHttpServlet.java:735 at javax.servlet.http.HttpServlet.serviceHttpServlet.java:848 at org.eclipse.jetty.servlet.ServletHolder.handleServletHolder.java:598 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilterServletHandler.java:1367 在 org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.dofilterneralopenentitymanagerinviewfilter.java:180 在 org.springframework.web.filter.OncePerRequestFilter.doFilterOncePerRequestFilter.java:107 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilterServletHandler.java:1338 在 org.eclipse.jetty.servlet.ServletHandler.doHandleServletHandler.java:484 在 org.eclipse.jetty.server.handler.ScopedHandler.handleScopedHandler.java:119 在 org.eclipse.jetty.security.SecurityHandler.handleSecurityHandler.java:524 在 org.eclipse.jetty.server.session.SessionHandler.doHandleSessionHandler.java:231 在 org.eclipse.jetty.server.handler.ContextHandler.doHandleContextHandler.java:1065 在 org.eclipse.jetty.servlet.ServletHandler.doScopeServletHandler.java:413 在 org.eclipse.jetty.server.session.SessionHandler.doScopeSessionHandler.java:192 在 org.eclipse.jetty.server.handler.ContextHandler.doScopeContextHandler.java:999 在 org.eclipse.jetty.server.handler.ScopedHandler.handleScopedHandler.java:117 在 org.eclipse.jetty.server.handler.ContextHandlerCollection.handleContextHandlerCollection.java:250 在 org.eclipse.jetty.server.handler.HandlerCollection.HandlerCollection.java:149 在 org.eclipse.jetty.server.handler.HandlerWrapper.HandlerWrapper.java:111 位于org.eclipse.jetty.server.server.handleServer.java:350处 org.eclipse.jetty.server.AbstractHttpConnection.handleRequestAssetAbstractHttpConnection.java:454 在 org.eclipse.jetty.server.AbstractHttpConnection.headerCompleteAbstractHttpConnection.java:890 在 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerCompleteAbstractHttpConnection.java:944 位于org.eclipse.jetty.http.HttpParser.parsenextttpparser.java:630 在 org.eclipse.jetty.http.HttpParser.parseAvailableHttpParser.java:230 在 org.eclipse.jetty.server.AsyncHttpConnection.handleAsyncHttpConnection.java:77 在 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handleSelectChannelEndPoint.java:620 在 org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.runSelectChannelEndPoint.java:46 在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJobQueuedThreadPool.java:603 在 org.eclipse.jetty.util.thread.QueuedThreadPool$3.runQueuedThreadPool.java:538 java:744

发送pdf报告的代码如下:

public class ReportServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        generateReport(request, response);
    }

    public void generateReport(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Connection connection;
        InputStream reportStream =getServletConfig().getServletContext().getResourceAsStream(
                "/resources/reports/index.jasper");
        ServletOutputStream servletOutputStream = response.getOutputStream();
        try {
            Class.forName("org.postgresql.Driver");
            connection = DriverManager.getConnection(
                    "jdbc:postgresql://localhost:5432/sid", "sid",
                    "sid");
            response.setContentType("application/pdf");
            JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, new HashMap(),
                    connection);
            connection.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (JRException e) {
            e.printStackTrace();
        }
        servletOutputStream.flush();
        servletOutputStream.close();
    }
在c.xhtml中:

...
    <h:form id="reportForm">
        <p:commandButton value="Generate Report" id="generate_report"
                oncomplete="reportDialogWidget.show()"/>
    </h:form>
    <p:dialog id="reportDialog" modal="true" widgetVar="reportDialogWidget" dynamic="true" resizable="true" maximizable="true" showEffect="fade" hideEffect="explode">
        <iframe src="/clients.pdf" width="800" height="600"></iframe>
    </p:dialog>
...
web.xml中与此servlet相关的部分:

  <servlet>
    <servlet-name>ReportServlet</servlet-name>
    <servlet-class>com.jg.servlet.ReportServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ReportServlet</servlet-name>
    <url-pattern>/clients.pdf</url-pattern>
  </servlet-mapping>
我一直在寻找,但没有找到任何对我有帮助的东西。我认为这些信息足以获得一些帮助,但如果我遗漏了什么,请让我知道,我会添加任何需要的内容


提前感谢您阅读我的问题。

关于这一行:

InputStream reportStream =getServletConfig().getServletContext().getResourceAsStream(
            "/resources/reports/index.jasper");
当您将资源作为流获取时,您必须确保资源存在。希罗库可能找不到。检查它是否已提交,或者最好在使用它之前检查reportStream上是否存在空指针异常。

可能重复
关于@AlexK,这不是重复的。如果你读到了,是我用两种不同的方法问了两个不同的错误。谢谢@unekwu,我查过了。资源已提交。是的,我可以检查NullPointerException。。。但我仍然无法显示包含所需数据的pdf。还有别的想法吗?我真是太蠢了!谢谢@unekwu,我正在检查index.jrxml。。。不是索引。贾斯珀,我们都犯过类似的错误