2012-02-09 7 views
5

Sto utilizzando il molo 6.1.23 all'interno di RAP di eclipse (Rich Ajax Platform 1.3.2) e Java versione 1.5. Sto inviando un'immagine PNG al browser. Si tratta di pezzi di codice che causano problemi:org.mortbay.jetty.EofException viene generato durante la scrittura nella risposta

lato server:

response.setContentType(application.getMimeType(".png")); 
response.setContentLength(outputSize); 
response.setHeader("Cache-Control", "no-cache"); 
response.setDateHeader("Expires", 0); 
response.setHeader("Pragma", "no-cache"); 
response.setDateHeader("Max-Age", 0); 
ServletOutputStream servletoutputstream = response.getOutputStream(); 

servletoutputstream.write(imageBytes); // this throws EofException 

servletoutputstream.flush(); 

lato client:

<img src="path to the servlet that is loading the image"> 

La cosa che è strano è che questo problema non si verifica tutto il tempo. Succede a intermittenza dopo il passaggio alla produzione. Non ci sono stati problemi nel nostro ambiente di test. L'unica differenza tra la produzione e il nostro ambiente di test è che nell'ambiente di produzione gli utenti sono molto lontani dai nostri server, mentre nell'ambiente di test sono molto vicini.

Quando viene generata l'eccezione, l'immagine non viene visualizzata affatto alla fine del browser del client! Cosa sta succedendo? Cosa posso fare per risolverlo o almeno avere una soluzione alternativa?

Questa è la traccia completa eccezione (ho evidenziato eccezioni chiave):

08 Feb 2012 11:49:08,955 ERROR [[email protected]] plugin.sda - 
org.mortbay.jetty.EofException 
    at org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:789) 
    at org.mortbay.jetty.AbstractGenerator$Output.flush(AbstractGenerator.java:568) 
    at org.mortbay.jetty.HttpConnection$Output.flush(HttpConnection.java:1006) 
    at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:650) 
    at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:590) 
    at com.scotiabank.ebss.common.viewer.util.ViewerUtil.sendBytes(ViewerUtil.java:533) 
    at com.scotiabank.ebss.common.viewer.servlets.ViewerServlet.doGet(ViewerServlet.java:242) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.eclipse.equinox.http.registry.internal.ServletManager$ServletWrapper.service(ServletManager.java:180) 
    at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61) 
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:126) 
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:318) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:924) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
Caused by: java.io.IOException: Broken pipe 
    at sun.nio.ch.FileDispatcher.writev0(Native Method) 
    at sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:61) 
    at sun.nio.ch.IOUtil.write(IOUtil.java:192) 
    at sun.nio.ch.SocketChannelImpl.write0(SocketChannelImpl.java:393) 
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:416) 
    at java.nio.channels.SocketChannel.write(SocketChannel.java:375) 
    at org.mortbay.io.nio.ChannelEndPoint.flush(ChannelEndPoint.java:232) 
    at org.mortbay.io.nio.SelectChannelEndPoint.flush(SelectChannelEndPoint.java:211) 
    at org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:712) 
    ... 27 more 
+0

L'eccezione è analfabeta. Il vero problema è il 'pipe rotto ', che non ha nulla a che fare con EOF. – EJP

risposta

2

Il problema sembra essere di rete correlati, e ha poco a nulla a che fare con Jetty.

Si sta tentando di scrivere una quantità di dati in una presa di rete che è stata chiusa all'altra estremità. Questo è ciò che significa l'eccezione Broken pipe.

È necessario capire perché la connessione HTTP si sta chiudendo in modo imprevisto. È possibile che la causa abbia qualcosa a che fare con Jetty, ma sospetto fortemente di no.

1

Controllare i limiti delle dimensioni della richiesta/risposta. Prova a scaricare l'immagine più piccola < 4k.