苦不堪言,iReport + JasperReports项目中的历练(二)

苦不堪言,iReport + JasperReports项目中的历练(二)

1)  java.lang.InternalError: erroneous handlers
error like following
Servlet.service()  for  servlet action threw exception
java.lang.InternalError: erroneous handlers
    at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:
250 )
    at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfStream(JasperExportManager.java:
167 )
    at com.justcommodity.cxc.jsp.reports.CxcReportBasedEnhSqlAction$$M$573fee08.write2Stream(CxcReportBasedEnhSqlAction.java:
161 )
    at com.justcommodity.cxc.jsp.reports.CxcReportBasedEnhSqlAction$$M$573fee08.execute(CxcReportBasedEnhSqlAction.java:
62 )
    at com.justcommodity.cxc.jsp.reports.CxcReportBasedEnhSqlAction$$A$573fee08.execute(
< generated > : 0 )
    at com.justcommodity.cxc.jsp.reports.CxcReportBasedEnhSqlAction.execute(
< generated > : 0 )
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:
484 )
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
274 )
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1482 )
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:
507 )
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:
697 )
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:
810 )
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
252 )
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
173 )
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:
672 )
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:
463 )
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:
398 )
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:
301 )
    at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:
1069 )
    at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:
455 )
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
279 )
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1482 )
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:
507 )
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:
697 )
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:
810 )

just cause lacking some jar, like I used jasperreport.jar, but with no iText.jar, so the error happen

2) java.io.IOException: java.awt.Image fetch aborted or errored
error like following
java.io.IOException: java.awt.Image fetch aborted or errored
        at com.lowagie.text.Image.getInstance(Unknown Source)
        at com.lowagie.text.Image.getInstance(Unknown Source)
        at net.sf.jasperreports.engine.export.JRPdfExporter.exportImage(JRPdfExporter.java:
1075 )
        at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:
480 )
        at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:
448 )
        at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:
413 )
        at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:
250 )
        at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfStream(JasperExportManager.java:
167 )
        at com.justcommodity.cxc.jsp.reports.CxcReportBasedEnhSqlAction.write2Stream(CxcReportBasedEnhSqlAction.java:
164 )
        at com.justcommodity.cxc.jsp.reports.CxcReportBasedEnhSqlAction.execute(CxcReportBasedEnhSqlAction.java:
69 )
        at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:
484 )
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
274 )
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1482 )
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:
507 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
697 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
810 )
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
252 )
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
173 )
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:
672 )
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:
463 )
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:
398 )
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:
301 )
        at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:
1069 )
        at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:
455 )
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
279 )
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1482 )
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:
507 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
697 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
810 )
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
252 )
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
173 )

You know, java can release resource, but it never catch the process of memory running;
So, while doing batch print, so you can open Is Cache & Is Delay, both the two options can make you sure using the pic only once, and read from cache later.

3) java.io.EOFException
12 : 06 : 47 , 612  ERROR [ReportAction]
  demo.jsp.reports.ReportException: java.io.EOFException
        at java.io.DataInputStream.readInt(DataInputStream.java:
358 )
        at demo.jsp.reports.Report.throwAnyErrorFromChild(CxcReport.java:
664 )
        at demo.jsp.reports.Report.writeReportToStream(CxcReport.java:
740 )
        at demo.jsp.reports.ReportAction.execute(CxcReportAction.java:
110 )
        at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:
484 )
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
274 )
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1482 )
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:
525 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
717 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
810 )
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
252 )
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
173 )
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:
672 )
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:
463 )
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:
398 )
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:
301 )
        at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:
1069 )
        at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:
455 )
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
279 )
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1482 )
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:
525 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
717 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
810 )
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
252 )
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
173 )
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:
292 )
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:
116 )
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:
79 )
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:
303 )
        at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
246 )
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:
303 )
        at com.jc.cxc.web.filter.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:
171 )
Caused by: java.io.EOFException
         
32  more
12 : 06 : 47 , 615  ERROR [ReportAction]
ClientAbortException:  java.net.SocketException: Write failed: Broken pipe
        at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:
327 )
        at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:
293 )
        at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:
97 )
        at demo.jsp.reports.ReportAction.execute(ReportAction.java:
132 )
        at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:
484 )
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
274 )
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1482 )
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:
525 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
717 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
810 )
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
252 )
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
173 )
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:
672 )
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:
463 )
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:
398 )
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:
301 )
        at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:
1069 )
        at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:
455 )
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
279 )
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1482 )
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:
525 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
717 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
810 )
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
252 )
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
173 )
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:
292 )
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:
116 )
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:
79 )
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:
303 )
        at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
246 )
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:
303 )
        at com.jc.cxc.web.filter.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:
171 )
Caused by: java.net.SocketException: Write failed: Broken pipe
        at jrockit.net.SocketNativeIO.writeBytesPinned(Native Method)
        at jrockit.net.SocketNativeIO.socketWrite(Unknown Source)
        at java.net.SocketOutputStream.socketWrite0(SocketOutputStream.java)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:
92 )
        at java.net.SocketOutputStream.write(SocketOutputStream.java:
136 )
        at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:
746 )
        at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:
433 )
        at org.apache.coyote.http11.InternalOutputBuffer.flush(InternalOutputBuffer.java:
304 )
        at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:
991 )
        at org.apache.coyote.Response.action(Response.java:
182 )
        at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:
322 )
        at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:
293 )
        at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:
97 )
        at com.justcommodity.cxc.jsp.reports.CxcReportAction.execute(CxcReportAction.java:
132 )
        at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:
484 )
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
274 )
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1482 )
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:
525 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
717 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
810 )
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
252 )
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
173 )
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:
672 )
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:
463 )
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:
398 )
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:
301 )
        at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:
1069 )
        at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:
455 )
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
279 )
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1482 )
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:
525 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
717 )
  测试了所有能排除的问题,最后解决了,绝对不解释,哈哈
另外把java.io.EOFException查找到比较好的资料帖过来:
------------------转-start-----------------
摘自http://xiao-yi.javaeye.com/blog/151120
摘自http://blog.csdn.net/fengzi1/archive/2008/01/30/2073433.aspx

ClientAbortException,java.net.SocketException.
关键字: Tomcat ClientAbortException
TOMCAT报异常,如下:

引用
java.lang.RuntimeException: javax.xml.transform.TransformerException: ClientAbortException: java.net.SocketException: Software caused connection abort: socket write error
at org.ajaxanywhere.XMLHandler.sendDOMDocument(XMLHandler.java:
123 )
at org.ajaxanywhere.XMLHandler.sendZones(XMLHandler.java:
93 )
at org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:
76 )
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
202 )
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
173 )

等等,在下面还能看到这样的提示:
Caused by: java.net.SocketException: Connection reset by peer: socket write error

查了下TOMCAT的文档,解释如下:

引用
Wrap an IOException identifying it as being caused by an abort of a request by a remote client.

在BAIDU和GOOGLE上找了下原因,大概归结为:

ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error的原因是由于处理http连接时,正在输出内容时,用户关闭了IE,会出现一个
" ClientAbortException " ,属于I / O处理中出现的一个异常,应用服务器应该会捕捉。
Connection reset by peer的原因:
经常出现的Connection reset by peer: 原因可能是多方面的,不过更常见的原因是:
①:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;
②:客户关掉了浏览器,而服务器还在给客户端发送数据;
③:浏览器端按了Stop
很多人都说是客户端造成的,没有办法控制,是个比较郁闷的问题。

但是,我担心的是:虽然前台没有任何出错的迹象,但是后台会记录这个异常,日志也会疯狂爆满,时间长了,肯定会DOWN掉的,还没找到好的解决办法,若有相同经历,且优雅的解决掉的朋友,望告之,谢!

resin有一个参数ignore - client - disconnect
tomcat似乎没有


原因:
一般是有些客户端已关闭,一些线程因为延迟等原因觉察不到此连接已结束,继续等到到出错
或是
客户端那里不停刷或一个访问
/ 刷新没完成前再刷,要让这个无用的线程死掉

这个问题一般是客户端在连接还没有完全建立的时候就取消连接,比如用户按了浏览器上面的“停止”按钮,一般来说没有什么问题。但是如果频繁出现,就表示很多客户端连接到Apache服务器的响应时间太长了,可能是网络的问题或者服务器性能问题。

connection reset 多半是因为对方在你未读完数据之前就关闭socket.
------------------转-end-----------------

4) java.lang.IllegalStateException: getOutputStream() has already been called for this response
2008 - 04 - 03   10 : 56 : 10 , 452  ERROR[org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[ / demo].[action]]http - 0.0 . 0.0 - 443 - 12  Servlet.service()  for  serv
let action threw exception
java.lang.IllegalStateException: getOutputStream() has already been called 
for   this  response
        at org.apache.catalina.connector.Response.getWriter(Response.java:
599 )
        at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:
195 )
        at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:
124 )
        at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:
117 )
        at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:
182 )
        at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:
115 )
        at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:
75 )
        at org.apache.jsp.admin.admin_005fmpob_005fexport_jsp._jspService(admin_005fmpob_005fexport_jsp.java:
119 )
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:
97 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
810 )
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:
334 )
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:
314 )
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:
264 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
810 )
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
252 )
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
173 )
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:
672 )
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:
463 )
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:
398 )
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:
301 )
        at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:
1069 )
        at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:
455 )
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
279 )
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1482 )
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:
507 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
697 )
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:
810 )

5) java.lang.OutOfMemoryError: PermGen space
This error occurs when the JVM runs out of space in the permanent generation heap. Since the defaults  for  the JVM are quite low, the first step should be to increase the  default  using  - XX:MaxPermSize.

<!--  verbose garbage collection  -->
< jvm - arg >- XX:MaxPermSize = 256m </ jvm - arg >   <!--  sets the maximum size of the permanent heap (recommended)  -->

In Jboss
run.conf, add like the followings:
JAVA_OPTS
= " $JAVA_OPTS -XX:MaxPermSize=256m "

你可能感兴趣的:(苦不堪言,iReport + JasperReports项目中的历练(二))