Jag har en servlet som genererar PDF-filer och returnerar till användaren. Nu är det så att för vissa användare så fungerar det inte utan dom får endast ett blankt fönster i sin browser.
Någon som kan se nåt fel i koden nedan.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
HttpSession session = request.getSession(true);
String strtotalNumberOfBookings = (String)request.getParameter("totalNumberOfBookings");
int totalNumberOfBookings = Integer.parseInt( strtotalNumberOfBookings );
PnlPdfDocumentContents[] vos = new PnlPdfDocumentContents[totalNumberOfBookings];
for (int i = 0; i < totalNumberOfBookings; i++)
{
vos[i] = getPnlPdfMultipleBookinVO( request, i+1 ) ;
}
String numberOfLabelsOnOnePage = request.getParameter( "numberOfLabelsOnOnePage").trim();
if ( numberOfLabelsOnOnePage != null)
{
PnlPdfDocumentContents.numberOfLabelsOnOnePage = Integer.parseInt( numberOfLabelsOnOnePage );
}
try
{
String openPdfInBrowser = (String)request.getParameter("openPdfInBrowser");
String printForThermo = (String)request.getParameter("printForThermo");
String filename = (String)request.getParameter("filename");
if(filename==null || filename.length()<1)
filename="booking";
ByteArrayOutputStream baos;
if(printForThermo!=null && printForThermo.compareTo("YES")==0)
{
baos = generatePdfForServlet( vos ,true);
}
else
{
baos = generatePdfForServlet( vos ,false);
}
if ( openPdfInBrowser!= null && openPdfInBrowser.equalsIgnoreCase("1") )
{
response.setContentType("application/pdf");
}
else
{
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + ".pdf" + "\"");
response.setContentLength(baos.size());
}
ServletOutputStream out = response.getOutputStream();
baos.writeTo(out);
out.flush();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
Jag har sett i loggarna att vid raden baos.writeTo(out); kan det ibland genereras ett exception
java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:668)
at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:160)
at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:523)
at org.apache.coyote.Response.doWrite(Response.java:518)
at org.apache.coyote.tomcat4.OutputBuffer.realWriteBytes(OutputBuffer.java:384)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:348)
at org.apache.coyote.tomcat4.OutputBuffer.writeBytes(OutputBuffer.java:411)
at org.apache.coyote.tomcat4.OutputBuffer.write(OutputBuffer.java:398)
at org.apache.coyote.tomcat4.CoyoteOutputStream.write(CoyoteOutputStream.java:110)
at java.io.ByteArrayOutputStream.writeTo(ByteArrayOutputStream.java:112)
at net.tradevision.general.pdflabels.PnlPdfMultipleBookingService.doPost(PnlPdfMultipleBookingService.java:177)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:263)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2489)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:413)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:380)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:537)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:533)
at java.lang.Thread.run(Thread.java:536)