Community
Participate
Working Groups
Build Identifier: Version: 3.7.1 Build id: M20110909-1335 I have created a birt extension functions plugin like the following : http://code.google.com/a/eclipselabs.org/p/birt-functions-lib/, inside the library i have implemented a function that get a company image from the file system with this code : private class getCompanyLogo implements IScriptFunctionExecutor { @Override public Object execute(Object[] arguments, IScriptFunctionContext context) throws BirtException { // Argument : ReportContext if(arguments.length > 0) { Object rcArgument = arguments[0]; if ( !(rcArgument instanceof IReportContext) ) throw new BirtException("Report Context object is not instance of IReportContext in " + this.getClass().getSimpleName() ); IReportContext reportContext = (IReportContext) rcArgument; //Get Report Name java.io.File report = new java.io.File(reportContext.getReportRunnable().getReportName()); java.net.URL uLogo = reportContext.getResource("CompanyLogo.png"); java.io.File file = null; //If exist get the Company image from resource if(uLogo != null) file = new java.io.File(uLogo.getFile()); //Try to get CompanyLogo image from the current folder java.io.File f = new java.io.File("CompanyLogo.png"); if(f.exists()) file = f; //Try to get the CompanyLogo from report related file String path = report.getPath(); String[] name = report.getName().split("\\."); f = new java.io.File( ((path != null) ? path : "") + ((name.length > 0) ? name[0] : "") ); if(f.exists()) file = f; if(file != null && file.exists()) { try { java.awt.image.BufferedImage img = javax.imageio.ImageIO.read(file); return img; } catch (java.io.IOException e) { throw new BirtException(String.format("Error loading Company Logo image : %s!",e.getMessage())); } } } else throw new BirtException("No arguments for function getCompanyLogo(), you must pass ReportContext !"); return null; } When i call this function from a report Script(OnCreate of a Dynamic image): importPackage(Packages.java.io); importPackage(Packages.java.lang); importPackage(Packages.java.net); importPackage(Packages.javax.imageio); var img = MyFunctions.getCompanyLogo(reportContext); var bas = new ByteArrayOutputStream(); ImageIO.write(img, "png", bas); this.data = bas.toByteArray(); i get the following error and i don't know why ... Looking in debug mode of the report the object BufferedImage is correclty passed by the function.. StackTrace of the error : Description Resource Path Location Type org.eclipse.birt.report.engine.api.EngineException: There are errors evaluating script "importPackage(Packages.java.io); importPackage(Packages.java.lang); importPackage(Packages.java.net); importPackage(Packages.javax.imageio); var img = UakariFunctions.getCompanyLogo(reportContext); var bas = new ByteArrayOutputStream(); ImageIO.write(img, "png", bas); this.data = bas.toByteArray();": TypeError: Cannot find default value for object. (/report/page-setup/simple-master-page[@id="2"]/page-header/grid[@id="642"]/row[@id="644"]/cell[@id="671"]/image[@id="674"]/method[@name="onRender"]#7) (Element ID:674) at org.eclipse.birt.report.engine.script.internal.ScriptExecutor.addException(ScriptExecutor.java:244) at org.eclipse.birt.report.engine.script.internal.ImageScriptExecutor.handleOnRender(ImageScriptExecutor.java:99) at org.eclipse.birt.report.engine.script.internal.OnRenderScriptVisitor.visitImageItem(OnRenderScriptVisitor.java:125) at org.eclipse.birt.report.engine.ir.ImageItemDesign.accept(ImageItemDesign.java:94) at org.eclipse.birt.report.engine.script.internal.OnRenderScriptVisitor.onRender(OnRenderScriptVisitor.java:73) at org.eclipse.birt.report.engine.presentation.LocalizedContentVisitor.handleOnRender(LocalizedContentVisitor.java:1228) at org.eclipse.birt.report.engine.presentation.LocalizedContentVisitor.localizeImage(LocalizedContentVisitor.java:694) at org.eclipse.birt.report.engine.presentation.LocalizedContentVisitor.localize(LocalizedContentVisitor.java:165) at org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportItemExecutor.execute(LocalizedReportItemExecutor.java:37) at org.eclipse.birt.report.engine.executor.ReportExecutorUtil.executeAll(ReportExecutorUtil.java:87) at org.eclipse.birt.report.engine.executor.ReportExecutorUtil.executeAll(ReportExecutorUtil.java:92) at org.eclipse.birt.report.engine.executor.ReportExecutorUtil.executeAll(ReportExecutorUtil.java:92) at org.eclipse.birt.report.engine.executor.ReportExecutorUtil.executeAll(ReportExecutorUtil.java:92) at org.eclipse.birt.report.engine.executor.ReportExecutorUtil.executeAll(ReportExecutorUtil.java:92) at org.eclipse.birt.report.engine.executor.ReportExecutorUtil.executeMasterPage(ReportExecutorUtil.java:71) at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.start(HTMLPageLM.java:147) at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:91) at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:100) at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:180) at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:77) at org.eclipse.birt.report.service.ReportEngineService.runAndRenderReport(ReportEngineService.java:929) at org.eclipse.birt.report.service.BirtViewerReportService.runAndRenderReport(BirtViewerReportService.java:973) at org.eclipse.birt.report.service.actionhandler.BirtGetPageAllActionHandler.__execute(BirtGetPageAllActionHandler.java:131) at org.eclipse.birt.report.service.actionhandler.AbstractBaseActionHandler.execute(AbstractBaseActionHandler.java:90) at org.eclipse.birt.report.soapengine.processor.AbstractBaseDocumentProcessor.__executeAction(AbstractBaseDocumentProcessor.java:47) at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.executeAction(AbstractBaseComponentProcessor.java:143) at org.eclipse.birt.report.soapengine.processor.BirtDocumentProcessor.handleGetPageAll(BirtDocumentProcessor.java:183) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.process(AbstractBaseComponentProcessor.java:112) at org.eclipse.birt.report.soapengine.endpoint.BirtSoapBindingImpl.getUpdatedObjects(BirtSoapBindingImpl.java:66) at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397) at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186) at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454) at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281) at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699) at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.doPost(BirtSoapMessageDispatcherServlet.java:265) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.service(BirtSoapMessageDispatcherServlet.java:122) at org.eclipse.equinox.http.registry.internal.ServletManager$ServletWrapper.service(ServletManager.java:180) at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61) at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:126) at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:317) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:939) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) Caused by: org.eclipse.birt.core.exception.CoreException: There are errors evaluating script "importPackage(Packages.java.io); importPackage(Packages.java.lang); importPackage(Packages.java.net); importPackage(Packages.javax.imageio); var img = MyFunctions.getCompanyLogo(reportContext); var bas = new ByteArrayOutputStream(); ImageIO.write(img, "png", bas); this.data = bas.toByteArray();": TypeError: Cannot find default value for object. (/report/page-setup/simple-master-page[@id="2"]/page-header/grid[@id="642"]/row[@id="644"]/cell[@id="671"]/image[@id="674"]/method[@name="onRender"]#7) at org.eclipse.birt.report.engine.javascript.JavascriptEngine.evaluate(JavascriptEngine.java:295) at org.eclipse.birt.core.script.ScriptContext.evaluate(ScriptContext.java:154) at org.eclipse.birt.report.engine.executor.ExecutionContext.evaluate(ExecutionContext.java:780) at org.eclipse.birt.report.engine.executor.ExecutionContext.evaluate(ExecutionContext.java:709) at org.eclipse.birt.report.engine.script.internal.ScriptExecutor.handleScriptInternal(ScriptExecutor.java:117) at org.eclipse.birt.report.engine.script.internal.ScriptExecutor.handleScript(ScriptExecutor.java:104) at org.eclipse.birt.report.engine.script.internal.ImageScriptExecutor.handleOnRender(ImageScriptExecutor.java:90) ... 67 more Caused by: org.mozilla.javascript.EcmaError: TypeError: Cannot find default value for object. (/report/page-setup/simple-master-page[@id="2"]/page-header/grid[@id="642"]/row[@id="644"]/cell[@id="671"]/image[@id="674"]/method[@name="onRender"]#7) at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3654) at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3632) at org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3660) at org.mozilla.javascript.ScriptRuntime.typeError1(ScriptRuntime.java:3672) at org.mozilla.javascript.ScriptableObject.getDefaultValue(ScriptableObject.java:781) at org.mozilla.javascript.ScriptableObject.getDefaultValue(ScriptableObject.java:700) at org.mozilla.javascript.ScriptRuntime.toString(ScriptRuntime.java:724) at org.mozilla.javascript.ScriptRuntime.notFunctionError(ScriptRuntime.java:3741) at org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThisHelper(ScriptRuntime.java:2247) at org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.java:2214) at org.mozilla.javascript.gen.c604._c0(/report/page-setup/simple-master-page[@id="2"]/page-header/grid[@id="642"]/row[@id="644"]/cell[@id="671"]/image[@id="674"]/method[@name="onRender"]:7) at org.mozilla.javascript.gen.c604.call(/report/page-setup/simple-master-page[@id="2"]/page-header/grid[@id="642"]/row[@id="644"]/cell[@id="671"]/image[@id="674"]/method[@name="onRender"]) at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:398) at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3065) at org.mozilla.javascript.gen.c604.call(/report/page-setup/simple-master-page[@id="2"]/page-header/grid[@id="642"]/row[@id="644"]/cell[@id="671"]/image[@id="674"]/method[@name="onRender"]) at org.mozilla.javascript.gen.c604.exec(/report/page-setup/simple-master-page[@id="2"]/page-header/grid[@id="642"]/row[@id="644"]/cell[@id="671"]/image[@id="674"]/method[@name="onRender"]) at org.eclipse.birt.report.engine.javascript.JavascriptEngine.evaluate(JavascriptEngine.java:290) Reproducible: Always