developer Posted May 1, 2008 Share Posted May 1, 2008 Hi All, sorry for my english:)I have the next code in Servlet:ServletOutputStream servletOutputStream = response.getOutputStream(); InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream("/reports/FirstReport.jrxml"); try { JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, new HashMap(), new JREmptyDataSource()); response.setContentType("application/pdf"); servletOutputStream.flush(); servletOutputStream.close(); } catch (JRException e) { StringWriter stringWriter = new StringWriter(); PrintWriter printWriter = new PrintWriter(stringWriter); e.printStackTrace(printWriter); response.setContentType("text/plain"); response.getOutputStream().print(stringWriter.toString()); response.getOutputStream().print(e.getMessage()); } But when I execute this the exception is shown: net.sf.jasperreports.engine.JRException: Error loading object from InputStream at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:196) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:580) at net.sf.jasperreports.engine.JasperRunManager.runReportToPdfStream(JasperRunManager.java:368) at bu.grsu.test.STest.processRequest(STest.java:40) at bu.grsu.test.STest.doGet(STest.java:61) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Thread.java:595)Caused by: java.io.StreamCorruptedException: invalid stream header at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:753) Thanks to All who can help me on this question. P.S. May be there are some other ways how to generate report from Servlet? I use Netbeans 5.5, Apache Tomcat 5.5.17.After some changes in my code I have got the next exception: net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:D:Program Filesnetbeans-5.5enterprise3apache-tomcat-5.5.17binsimple_1209718587554_414918.java:4: package net.sf.jasperreports.engine does not existimport net.sf.jasperreports.engine.*;^D:Program Filesnetbeans-5.5enterprise3apache-tomcat-5.5.17binsimple_1209718587554_414918.java:5: package net.sf.jasperreports.engine.fill does not existimport net.sf.jasperreports.engine.fill.*;^D:Program Filesnetbeans-5.5enterprise3apache-tomcat-5.5.17binsimple_1209718587554_414918.java:18: cannot find symbolsymbol: class JREvaluatorpublic class simple_1209718587554_414918 extends JREvaluator I put the appropriate libs to Tomcat But It does't work :( Can somebody give the working sample how to generate a simple emty report from Servlet with neccesarry setting in Netbeans and Tomcat Thanks very much!!! Post edited by: developer, at: 2008/05/02 09:09 Link to comment Share on other sites More sharing options...
ashosheh Posted May 1, 2008 Share Posted May 1, 2008 Hitry the following:InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream(request.getContextPath()+"/reports/FirstReport.jrxml"); Where:request is of type HttpServletRequest ashosheh Link to comment Share on other sites More sharing options...
lshannon Posted May 2, 2008 Share Posted May 2, 2008 Hi; If you look at the method you are using, it requires a compiled report template for the input stream. http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JasperRunManager.html#runReportToPdfStream(java.io.InputStream,%20java.io.OutputStream,%20java.util.Map) You are using the JRXML. I think you want to try something like this:Code:InputStream reportStream = JasperCompileManager.compileReport(context.getRealPath("/reports/ FirstReport.jrxml")); HTH Post edited by: lshannon, at: 2008/05/01 17:37 Post edited by: lshannon, at: 2008/05/01 17:38 Post edited by: lshannon, at: 2008/05/01 19:46Post edited by: lshannon, at: 2008/05/01 19:48 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now