2012-02-09 6 views
5

Estoy utilizando embarcadero 6.1.23 dentro de eclipse RAP (Rich Ajax Platform 1.3.2) y Java versión 1.5. Estoy enviando una imagen PNG al navegador. Estas son piezas de código que están causando problemas:org.mortbay.jetty.EofException se lanza al escribir en la respuesta

lado del servidor:

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(); 

lado del cliente:

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

Lo que es raro es que este problema no sucede todo el tiempo. Sucede intermitentemente después de que pasamos a la producción. No hubo problemas en nuestro entorno de prueba. La única diferencia entre la producción y nuestro entorno de prueba es que en el entorno de producción, los usuarios están lejos de nuestros servidores, mientras que en el entorno de prueba, están muy cerca.

Cuando se lanza la excepción, la imagen no se muestra en absoluto en el extremo del navegador del cliente. Que esta pasando? ¿Qué puedo hacer para solucionarlo o al menos tener una solución alternativa?

Ésta es la traza completa excepción (I destacado excepciones clave):

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

La excepción es analfabeto. El problema real es la 'tubería rota ', que no tiene nada que ver con EOF. – EJP

Respuesta

2

El problema parece estar relacionado con la red, y tiene poco o nada que ver con embarcadero.

Está intentando escribir una cantidad de datos en un socket de red que se ha cerrado en el otro extremo. Eso es lo que significa la excepción Broken pipe.

Necesita averiguar por qué la conexión HTTP se cierra inesperadamente. Es posible que la causa tenga algo que ver con Jetty, pero sospecho fuertemente que no.

1

Verificar límites de tamaño de solicitud/respuesta. Intenta descargar imagen más pequeña < 4k.

Cuestiones relacionadas