HTTP 500 - somente no internet explore

4 respostas
F
Bom estou com um problema em um aplicação JSP-SERVLET, mas o erro ocorre somente no internet explore, oque me deixa mais desesperado, pois como pode rodar blza no firefox e nada no iE. Tenho uma jsp que submete um Post para um servlet, esse conecta ao banco de dados MySQL e me retorna um grafico, JfreeChart. Contudo no IE quando submeto o Post o servlet retorna o erro Http 500, listado abaixo:
HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

java.lang.StringIndexOutOfBoundsException: String index out of range: 46
	java.lang.String.charAt(String.java:558)
	org.jfree.text.TextUtilities.createTextBlock(TextUtilities.java:197)
	org.jfree.text.TextUtilities.createTextBlock(TextUtilities.java:155)
	org.jfree.chart.title.TextTitle.arrangeRR(TextTitle.java:421)
	org.jfree.chart.title.TextTitle.arrange(TextTitle.java:395)
	org.jfree.chart.JFreeChart.drawTitle(JFreeChart.java:1143)
	org.jfree.chart.JFreeChart.draw(JFreeChart.java:1027)
	org.jfree.chart.JFreeChart.createBufferedImage(JFreeChart.java:1244)
	org.jfree.chart.JFreeChart.createBufferedImage(JFreeChart.java:1223)
	org.jfree.chart.ChartUtilities.writeChartAsPNG(ChartUtilities.java:173)
	org.jfree.chart.ChartUtilities.writeChartAsPNG(ChartUtilities.java:119)
	C_DiarioPizza.doPost(C_DiarioPizza.java:60)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.5 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.5.5
Pelo erro parece que o problema está ligado ao bufferImage do JfreeChart, alguém saberia a solução para isso? Maldito Bill Gates.... Obrigado

4 Respostas

C

poderia colcoar o codigo q gera o chart e retorna o seu BufferedImage pra gente dar uma olhada aki.

F
Abaixo segue o código do servlet:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

public class C_DiarioLinha extends HttpServlet {
    
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException {
                response.setContentType("text/html");
                PrintWriter out1 = response.getWriter();
                out1.println("<HTML>");
                out1.println("<HEAD>");
                out1.println("<TITLE>Corrente Diaria</TITLE>");
                out1.println("</HEAD>");
                out1.println("<BODY>");
                out1.println("<CENTER>");
                out1.println("<BR>");
                out1.println("<H2>Corrente Diaria</H2>");
                out1.println("<BR>");
                out1.println("<FORM METHOD=POST>");
                out1.println("<Data : >");
                out1.println("<INPUT TYPE=TEXT NAME=DataInicio>");;
                out1.println("<BR>");
                out1.println("<Carga : >");
                out1.println("<INPUT TYPE=TEXT NAME=Carga>");
                out1.println("<BR>");
                out1.println("<Local : >");
                out1.println("<INPUT TYPE=TEXT NAME=Local>");
                out1.println("<BR>");
                out1.println("<INPUT TYPE=SUBMIT VALUE=Consulta>");
                out1.println("</FORM>");
                out1.println("</CENTER>");
                out1.println("</BODY>");
                out1.println("</HTML>");
    }//fim do get
    public void doPost(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException {
        OutputStream out = response.getOutputStream();
        //capturando as strings de entrada
        String DataInicio = request.getParameter("DataInicio");
        String Carga = request.getParameter("Carga");
        String Local = request.getParameter("Local");
        HttpSession session = request.getSession(true);
        String nomeGrafico = "C_DiarioLinha";
        session.setAttribute("nomeGrafico1",nomeGrafico);
        session.setAttribute("C_DiarioLinha_DataInicio", DataInicio);
        session.setAttribute("C_DiarioLinha_Carga", Carga);
        //pegando dados
        try {
            //pegando dados
            DefaultCategoryDataset ds = Consulta(DataInicio, Carga, Local);
        String Titulo = "Acumulo de carga em "+DataInicio+" em "+Carga;
        JFreeChart grafico = ChartFactory.createLineChart(Titulo, "Hora", "Corrente(A)", ds, PlotOrientation.VERTICAL, true, false, false);
        response.setContentType("image/png");
                ChartUtilities.writeChartAsPNG(out, grafico, 610, 330);
               
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
    }//fim do post
    private DefaultCategoryDataset Consulta(String DataInicio, String Carga, String Local) throws ClassNotFoundException{
        String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        String DATABASE_URL = "jdbc:mysql://ENDEREÇO_IP/BANCO";
        DefaultCategoryDataset ds = new DefaultCategoryDataset();
        
        
        try
        {
            Class.forName(JDBC_DRIVER);
            Connection conn = DriverManager.getConnection(DATABASE_URL,"USUARIO","SENHA");
            Statement stm = conn.createStatement();
            //prepara a pesquisa
    
               PreparedStatement consultaDiarioA = conn.prepareStatement("select ("+Local+".valor*calibracao.constante) AS valor, HOUR("+Local+".hora) AS hora FROM "+Local+", carga, calibracao" +
                                                                         " WHERE carga.autocod="+Local+".carga AND calibracao.carga="+Local+".carga AND carga.fase='A' AND "+Local+".data=?" +
                                                                         " AND carga.nome=? AND "+Local+".hora BETWEEN '00:00:00' AND '23:59:59' GROUP BY HOUR("+Local+".hora)");
               PreparedStatement consultaDiarioB = conn.prepareStatement ("select ("+Local+".valor*calibracao.constante) AS valor, HOUR("+Local+".hora) AS hora FROM "+Local+", carga, calibracao" +
                                                                         " WHERE carga.autocod="+Local+".carga AND calibracao.carga="+Local+".carga AND carga.fase='B' AND "+Local+".data=?" +
                                                                         " AND carga.nome=? AND "+Local+".hora BETWEEN '00:00:00' AND '23:59:59' GROUP BY HOUR("+Local+".hora)");
               PreparedStatement consultaDiarioC = conn.prepareStatement ("select ("+Local+".valor*calibracao.constante) AS valor, HOUR("+Local+".hora) AS hora FROM "+Local+", carga, calibracao" +
                                                                         " WHERE carga.autocod="+Local+".carga AND calibracao.carga="+Local+".carga AND carga.fase='C' AND "+Local+".data=?" +
                                                                         " AND carga.nome=? AND "+Local+".hora BETWEEN '00:00:00' AND '23:59:59' GROUP BY HOUR("+Local+".hora)");
               //Enviando as Strings
               consultaDiarioA.setString(1, DataInicio);
               consultaDiarioA.setString(2, Carga);
               consultaDiarioB.setString(1, DataInicio);
               consultaDiarioB.setString(2, Carga);
               consultaDiarioC.setString(1, DataInicio);
               consultaDiarioC.setString(2, Carga);
               
               //executando a pesquisa e setando ao ResultSet
               ResultSet rsA = consultaDiarioA.executeQuery();
               ResultSet rsB = consultaDiarioB.executeQuery();
               ResultSet rsC = consultaDiarioC.executeQuery();
               while((rsA.next())&&(rsB.next())&&(rsC.next())){
                        ds.setValue(rsA.getDouble("valor"), "Corrente Fase A", rsA.getString("hora"));
                        ds.setValue(rsB.getDouble("valor"), "Corrente Fase B", rsA.getString("hora"));
                        ds.setValue(rsC.getDouble("valor"), "Corrente Fase C", rsA.getString("hora"));
               }
               
               return ds;
        }//fim do try
        catch (SQLException e) {
                e.printStackTrace();
			
		}//fim do catch
        return ds;
    }//fim do Consulta
}
C

Kra, uma dica… crie um método que retornara um BufferedImage pra ti, ou seja o método que cria o chart e retorna pra vc uma imagem, fica bem mais facil tu colocar ela na sua pagina.

F

Implementei a sua dica de criar um metodo BufferedImage, e novamente no Firefox rodou beleza. Contudo no IE nada de funcionar deu o mesmo erro…

Criado 17 de janeiro de 2007
Ultima resposta 24 de jan. de 2007
Respostas 4
Participantes 2