While running Burt Report I am getting exception

Dewangan
edited February 11, 2022 in Analytics #1
I am facing this exception:-
java.lang.NullPointerException
org.eclipse.birt.report.engine.executor.ExecutionContext.setRunnable(ExecutionContext.java:1114)
org.eclipse.birt.report.engine.api.impl.EngineTask.setReportRunnable(EngineTask.java:318)
org.eclipse.birt.report.engine.api.impl.EngineTask.<init>(EngineTask.java:165)
org.eclipse.birt.report.engine.api.impl.EngineTask.<init>(EngineTask.java:176)
org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.<init>(RunAndRenderTask.java:54)
org.eclipse.birt.report.engine.api.impl.ReportEngineHelper.createRunAndRenderTask(ReportEngineHelper.java:292)
org.eclipse.birt.report.engine.api.impl.ReportEngine.createRunAndRenderTask(ReportEngine.java:303)
com.emptoris.app.reports.helper.BirtReportServlet.doGet(BirtReportServlet.java:82)
javax.servlet.http.HttpServlet.service(HttpServlet.java:596)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

Code is failing at line:-
IRunAndRenderTask task = engine.createRunAndRenderTask( design );
Bellow is the servlet to generate birt report:-
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.EngineConstants;
import org.eclipse.birt.report.engine.api.HTMLRenderContext;
import org.eclipse.birt.report.engine.api.HTMLRenderOption;
import org.eclipse.birt.report.engine.api.HTMLServerImageHandler;
import org.eclipse.birt.report.engine.api.IReportEngineFactory;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
import org.eclipse.birt.report.engine.api.IReportEngine;


public class BirtReportServlet extends HttpServlet {
private EngineConfig config = null;
private IReportEngine engine = null;
public BirtReportServlet() {
super();
}
/**
* Destruction of the servlet.
*/
public void destroy() {
super.destroy();

}
/**
* The doGet method of the servlet.
*
*/
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

//get report name and launch the engine
resp.setContentType("text/html");
ServletContext sc = req.getSession().getServletContext();
IReportRunnable design;
try
{
//Open report design
design = engine.openReportDesign( "C:/BirtRptFiles/sample.rptdesign");
//create task to run and render report
IRunAndRenderTask task = engine.createRunAndRenderTask( design );

task.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, BirtReportServlet.class.getClassLoader());

//set output options
HTMLRenderOption options = new HTMLRenderOption();
//set the image handler to a HTMLServerImageHandler if you plan on using the base image url.
options.setImageHandler(new HTMLServerImageHandler());
//options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);
options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF);
options.setOutputStream(resp.getOutputStream());
options.setBaseImageURL(req.getContextPath()+"/images");
options.setImageDirectory(sc.getRealPath("/images"));
task.setRenderOption(options);

//run report
task.run();
task.close();
}catch (Exception e){

e.printStackTrace();
throw new ServletException( e );
}
}

/**
* The doPost method of the servlet.
*
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println(" Post Not Supported");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}

/**
* Initialization of the servlet.
*
* @throws ServletException if an error occure
*/
public void init() throws ServletException {

try{
config = new EngineConfig( );
config.setEngineHome( "D:/software_d/BIRT2/birt-runtime-2_1_3/ReportEngine" );
config.setLogConfig("c:/temp", Level.FINE);
Platform.startup( config ); //If using RE API in Eclipse/RCP application this is not needed.
IReportEngineFactory factory = (IReportEngineFactory) Platform
.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
engine = factory.createReportEngine( config );
engine.changeLogLevel( Level.WARNING );

}catch( Exception ex){
ex.printStackTrace();

}

}

}

Comments

  • phillyx
    edited December 31, 1969 #2
    did you see any error lines while designing the report in eclipse? (In the Problems window)
  • Dewangan
    edited December 31, 1969 #3
    There is not error while creating .rptdesign file.
  • Dewangan
    edited December 31, 1969 #4
    There is no error while creating .rptdesign file. When i do preview that also works fine.
  • cypherdj
    edited December 31, 1969 #5
    Just a thought, but since you're running the report within a Servlet, should you not use the platform context in your init method?

    IPlatformContext context = new PlatformServletContext
    (config.getServletContext());
    config.setPlatformContext(context);

    This specifies the plugins location in WEB-INF/platform/plugins.

    Regards,
    Cedric
  • Dewangan
    edited December 31, 1969 #6
    MY Birt designer and BirtRunTime were of different versions and that was causing the problem. Now it is resolved.