Hi, <br />
<br />
I have just started to use BIRT and stuck in some issues.<br />
<br />
I am trying to use the scripted datasource for a report and the script in the following<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>reportsUtil = new Packages.org.****.rest.util.ReportsUtil();
reportsVO = reportsUtil.getReportVO("ABC");</pre>
<br />
it works fine with Eclipse but when i run it from Java code,(i am making a REST call to it), it gives the following error...<br />
<br />
WARNING: Fail to execute script in function __bm_OPEN(). Source:<br />
<br />
" + reportsUtil = new Packages.org.****.rest.util.ReportsUtil();<br />
reportsVO = reportsUtil.getReportVO("ABC"); + "<br />
<br />
A BIRT exception occurred. See next exception for more information.<br />
Error evaluating Javascript expression. Script engine error: TypeError: [JavaPackage org.****.rest.util.ReportsUtil] is not a function, it is object. (/report/data-sets/script-data-set[
@id="8"]/me<br />
thod[
@name="open"]#1)<br />
Script source: /report/data-sets/script-data-set[
@id="8"]/method[
@name="open"], line: 0, text:<br />
__bm_OPEN()<br />
org.eclipse.birt.data.engine.core.DataException: Fail to execute script in function __bm_OPEN(). Source:<br />
<br />
" + reportsUtil = new Packages.org.csmc.rdr.rest.util.ReportsUtil();<br />
reportsVO = reportsUtil.getReportVO("ABC"); + "<br />
<br />
A BIRT exception occurred. See next exception for more information.<br />
Error evaluating Javascript expression. Script engine error: TypeError: [JavaPackage org.csmc.rdr.rest.util.ReportsUtil] is not a function, it is object. (/report/data-sets/script-data-set[
@id="8"]/me<br />
thod[
@name="open"]#1)<br />
Script source: /report/data-sets/script-data-set[
@id="8"]/method[
@name="open"], line: 0, text:<br />
__bm_OPEN()<br />
at org.eclipse.birt.data.engine.script.JSMethodRunner.runScript(JSMethodRunner.java:147)<br />
<br />
.........<br />
.........<br />
.........<br />
<br />
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)<br />
at java.lang.Thread.run(Thread.java:619)<br />
Caused by: org.eclipse.birt.data.engine.core.DataException: Data Set script method "Fetch" returned null; expected a Boolean value.<br />
at org.eclipse.birt.report.engine.script.internal.ScriptDataSetScriptExecutor.handleFetch(ScriptDataSetScriptExecutor.java:150)<br />
... 79 more<br />
Aug 1, 2011 6:34:12 PM org.eclipse.birt.report.engine.layout.pdf.font.FontMappingManagerFactory loadFontMappingConfig<br />
INFO: load font config in jar:file:/C:/Program%20Files%20(x86)/Apache%20Software%20Foundation/apache-tomcat-6.0.20/shared/lib/org.eclipse.birt.runtime_3.7.0.v20110615-1818.jar!/fontsConfig.xml cost 32<br />
<br />
<br />
This is how i am initializing the BIRT engine<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>public class BIRTEngineFactory {
private static IReportEngine reportEngine = null;
private static Logger logger = Logger.getLogger(BIRTEngineFactory.class);
public static synchronized IReportEngine getReportEngine() {
if (reportEngine == null)
createEngineInstance();
return reportEngine;
}
private static void createEngineInstance() {
EngineConfig engineConfig = new EngineConfig();
//engineConfig.setEngineHome(DEFAULT_BIRT_HOME_PATH);
try {
logger.info("initializing the BIRT engine");
Platform.startup(engineConfig);
logger.info("initializing the BIRT engine");
} catch (BirtException e) {
e.printStackTrace();
throw new UnrecoverableException("Exception while starting engine");
}
IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
reportEngine = factory.createReportEngine(engineConfig);
/*HashMap contextMap = new HashMap();
contextMap.put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, ReportsUtil.class.getClassLoader());
reportEngine.getConfig().setAppContext(contextMap);*/
}
public static synchronized void destroyReportEngine() {
if(reportEngine == null) {
return ;
}
reportEngine.destroy();
Platform.shutdown();
reportEngine = null;
}</pre>
<br />
<br />
This is how it is being called.<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
@GET@Path("/{reportTemplateId}/report")
public Response generateReport(
@PathParam("reportTemplateId") long reportTemplateId) {
logger.info("generateReport()" + reportTemplateId);
String template = getRequestParameter("template");
IReportRunnable design = null;
IRunAndRenderTask task = null;
PDFRenderOption options = null;
try {
//design = engine.openReportDesign("C:/test/reports/saved_subject_design.rptdesign"); //report is needed in this folder
design = engine.openReportDesign("C:/Project/rdrrest/trunk/src/"+template+".rptdesign"); //report is needed in this folder
} catch (Exception e) {
throw new UnrecoverableException("An error occured during the opening of the report file!");
}
task = engine.createRunAndRenderTask(design);
task.setAppContext(engine.getConfig().getAppContext());
//task.setParameterValue("EntityIdListString", params);
//Set parameter values and validate, if the report requires it
//task.setParameterValue("Years", 2.0);
//task.validateParameters();
//options = new HTMLRenderOption();
options = new PDFRenderOption();
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
options.setOutputStream(ostream);
options.setOutputFormat("pdf");
task.setRenderOption(options);
try {
task.run();
} catch (Exception e) {
System.err.println("An error occured while running the report!");
e.printStackTrace();
}
byte[] bytes = ostream.toByteArray();
return Response.ok(bytes, MediaType.APPLICATION_OCTET_STREAM).header("Content-Disposition", "reportDesign" + reportTemplateId).build();
}</pre>
<br />
<br />
<br />
Can someone help me out please in it..<br />
<br />
Thanks a lot.<br />
<br />
Tuco