Erro ao tentar retornar um BufferedImage

0 respostas
eberson_oliveira

Boa tarde a todos,

Estou com um problema, talvez simples, que não estou conseguindo resolver…

Eu tenho um código javascript que num dado momento requisita uma imagem. Essa requisição é feita a uma servlet que monta essa imagem e retorna. O problema ocorre porque de alguma forma estão vindo duas requisições dessa imagem (meu código a requisita somente uma vez) e em uma dessas requisições ocorre o seguinte erro:

ClientAbortException:  java.net.SocketException: Software caused connection abort: socket write error	
   at org.apache.coyote.tomcat5.OutputBuffer.doFlush(OutputBuffer.java:331)
   at org.apache.coyote.tomcat5.OutputBuffer.flush(OutputBuffer.java:297)
   at org.apache.coyote.tomcat5.CoyoteOutputStream.flush(CoyoteOutputStream.java:85)
   .
   .
   .

O código da servlet é o seguinte:

String soperacao = request.getParameter( "operacao" );
      
if ( soperacao == null || soperacao.length() == 0 ){
    return;
}
      
synchronized ( MUTEX ) {
   System.out.println( ">>>>>>>>>>chegou aqui...." );
         
   try {
      conexao.conecta();

      BufferedImage image;

      image = processaGrafico( request, response ); // código que irá gerar uma imagem do gráfico

      if ( "SALVAR_GRAFICO".equals( soperacao ) ) {
         String sidSessao = request.getSession().getId();
         String snomeArquivo = sidSessao + "chart" + Math.random();

          response.setContentType( "image/png" );
          response.setHeader( "Content-Disposition", "attachment; filename=\"" + snomeArquivo + ".png\"" );
      }
            
      ServletOutputStream outputStream = response.getOutputStream();
            
      try {
           ImageIO.write( image, "png", outputStream );
      }
      catch ( IOException e ) {
         e.printStackTrace();
      }
            
       outputStream.flush();
    }
    catch ( SQLException e ) {
        e.printStackTrace();
    }
     finally {
         conexao.desconecta();
    }
}

Queria saber por que está ocorrendo esse erro? Por que ocorre somente em uma das requisições? Por que vem duas requisições? E o que posso fazer para resolver?

Desde já agradeço pela atencao
[]s

Éberson

Criado 27 de março de 2009
Respostas 0
Participantes 1