Java Jasper在jsf应用程序中报告heroku
我正在使用jasperreports的应用程序中工作。它使用Primefaces和Mojarra,并部署在Jetty中。当我在本地部署应用程序时,它确实可以正常工作。但当我在heroku部署时,它不起作用 当我将其部署到heroku时,我获得: HTTP错误500 访问/clients.pdf时出现问题。原因: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
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。。。不是索引。贾斯珀,我们都犯过类似的错误