tags:

views:

268

answers:

1

I'm trying to generate graphs using JFreeChart. I added record in web.xml, installed jfreechart library. Compiled servlet. Below code of servlet has shown:

import java.io.IOException;
import java.io.OutputStream;
import java.io.File;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.Color;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;



public class diagram extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException {

doTestPieChart(request,response);
   }

   protected void doTestPieChart(HttpServletRequest request, 
                                 HttpServletResponse response)
      throws IOException, ServletException
   {
      OutputStream out = response.getOutputStream();

      try
      {
         DefaultPieDataset dataset = new DefaultPieDataset();

         dataset.setValue("Graphic Novels", 192);
         dataset.setValue("History", 125);
         dataset.setValue("Military Fiction", 236); 
         dataset.setValue("Mystery", 547); 
         dataset.setValue("Performing Arts", 210);
         dataset.setValue("Science, Non-Fiction", 70);
         dataset.setValue("Science Fiction", 989); 

         JFreeChart chart = ChartFactory.createPieChart(
            "Books by Type",  
            dataset,         
            true,            
            false,            
            false             
         );
         chart.setBackgroundPaint(Color.white);

         response.setContentType("image/png");
         ChartUtilities.writeChartAsPNG(out, chart, 400, 300);
   /*
   ServletContext sc = getServletContext(); 
   String filename = sc.getRealPath("pie.png");
   File file = new File(filename); 
   ChartUtilities.saveChartAsPNG(file,chart,400,300);
   */

      }
      catch (Exception e)
      {
         System.out.println(e.toString());
      }
      finally
      {
         out.close();
      }

   }


}

When i launch the servlet, mistake has shown :

HTTP Status 500 -

type Exception report

message

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

exception

javax.servlet.ServletException: Error instantiating servlet class diagram
 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
 java.lang.Thread.run(Thread.java:619)

root cause

java.lang.NoClassDefFoundError: org/jfree/data/general/PieDataset
 java.lang.Class.getDeclaredConstructors0(Native Method)
 java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
 java.lang.Class.getConstructor0(Class.java:2699)
 java.lang.Class.newInstance0(Class.java:326)
 java.lang.Class.newInstance(Class.java:308)
 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
 java.lang.Thread.run(Thread.java:619)

root cause

java.lang.ClassNotFoundException: org.jfree.data.general.PieDataset
 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1484)
 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1329)
 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
 java.lang.Class.getDeclaredConstructors0(Native Method)
 java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
 java.lang.Class.getConstructor0(Class.java:2699)
 java.lang.Class.newInstance0(Class.java:326)
 java.lang.Class.newInstance(Class.java:308)
 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
 java.lang.Thread.run(Thread.java:619)

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

Help me to solve a problem. and where is problem?

+1  A: 

Make sure you have JFreeChart jar inside your

WEB-INF/lib

directory or your WAR deployment file.

Pablo Santa Cruz