Discussions
Categories
Groups
Community Home
Categories
INTERNAL ENABLEMENT
POPULAR
PUBLIC CLOUD
PRIVATE CLOUD
Quick Links
MY LINKS
HELPFUL TIPS
Back to website
Home
Intelligence (Analytics)
ScriptFunctions Extension birt. Category is Displayed but not the function
Veerendra
<p>Hi,</p>
<p> </p>
<p>I have created Script Functions Extension in Birt. Category is shown in Expression Builder but the function is not displayed.</p>
<p> </p>
<p>I have created jar file using Plug-in Project and Export Wizard. All My Class files and Libraries are bundled. All My Class files are within Bin. I am getting class not found exception. </p>
<p> </p>
<p>I am using JRE 7. Please find the plugin.xml below.</p>
<p> </p>
<p> </p>
<div>
<div><?xml version="1.0" encoding="UTF-8"?></div>
<div><?eclipse version="3.2"?></div>
<div><plugin></div>
<div> <extension</div>
<div> id="DecryptorFunction"</div>
<div> name="DecryptorFunction"</div>
<div> point="org.eclipse.birt.core.ScriptFunctionService"></div>
<div> <Category</div>
<div> factoryclass="ubq.decryptor.DecryptorFactory"</div>
<div> name="Decryptor"></div>
<div> <Function</div>
<div> name="DecryptString"</div>
<div> isConstructor="false"</div>
<div> isStatic="true"</div>
<div> isVisible="true"</div>
<div> variableArguments="false"> </div>
<div> <Argument isOptional="false"</div>
<div> name="source"></div>
<div> <DataType</div>
<div> value="String"></div>
<div> </DataType></div>
<div> </Argument></div>
<div> </Function></div>
<div> </Category></div>
<div> </extension></div>
<div></plugin></div>
</div>
<div> </div>
<div> </div>
<div>Thanks in advance</div>
Find more posts tagged with
Comments
Veerendra
<div>I have missed to add the Jar file in the Runtime Classpath. After adding the same I am getting following error.</div>
<div> </div>
<div>ubq.decryptor.DecryptorFactory cannot be cast to org.eclipse.birt.core.script.functionservice.IScriptFunctionFactory.</div>
<div> </div>
<div>Please find my Factory Class</div>
<div> </div>
<div>
<div>package ubq.decryptor;</div>
<div> </div>
<div>import org.eclipse.birt.core.exception.BirtException;</div>
<div>import org.eclipse.birt.core.script.functionservice.IScriptFunctionExecutor;</div>
<div>import org.eclipse.birt.core.script.functionservice.IScriptFunctionFactory;</div>
<div> </div>
<div>public class DecryptorFactory implements IScriptFunctionFactory</div>
<div>{</div>
<div> </div>
<div>public IScriptFunctionExecutor getFunctionExecutor( String functionName ) throws BirtException</div>
<div>{</div>
<div>return new Decryptor( functionName );</div>
<div>}</div>
<div> </div>
<div>}</div>
<div> </div>
<div> </div>
<div>Class</div>
<div> </div>
<div>
<div>package ubq.decryptor;</div>
<div> </div>
<div>import org.eclipse.birt.core.exception.BirtException;</div>
<div> </div>
<div>import org.eclipse.birt.core.script.functionservice.IScriptFunctionContext;</div>
<div>import org.eclipse.birt.core.script.functionservice.IScriptFunctionExecutor;</div>
<div>import org.eclipse.birt.core.script.functionservice.IScriptFunctionFactory;</div>
<div> </div>
<div> </div>
<div>public class Decryptor implements IScriptFunctionExecutor</div>
<div>{</div>
<div> </div>
<div>/**</div>
<div>* </div>
<div>*/</div>
<div>private static final long serialVersionUID = 1L;</div>
<div> </div>
<div>private IScriptFunctionExecutor executor;</div>
<div> </div>
<div>Decryptor( String functionName ) throws BirtException</div>
<div>{</div>
<div>if ( "DecryptString".equals( functionName ) )</div>
<div>this.executor = new DecryptString( );</div>
<div>else</div>
<div>throw new BirtException( " Decryptor ",</div>
<div>null,</div>
<div>"invalid.function.name"<span> </span>+ "Decryptor." + functionName );</div>
<div>}</div>
<div> </div>
<div> </div>
<div>private static class DecryptString implements IScriptFunctionExecutor</div>
<div>{</div>
<div>public DecryptString()</div>
<div> {</div>
<div> }</div>
<div>/**</div>
<div>* </div>
<div>*/</div>
<div>private static final long serialVersionUID = 1L;</div>
<div> </div>
<div>public Object execute( Object[] args, IScriptFunctionContext arg1 ) throws BirtException</div>
<div>{</div>
<div> /* My Logic */</div>
<div>}catch(Exception e){</div>
<div>throw new BirtException(" Error while decrypting. " + e.getMessage());</div>
<div>}</div>
<div> </div>
<div>}</div>
<div>return data;</div>
<div>}</div>
<div>}</div>
<div> </div>
<div> </div>
<div>}</div>
<div>public Object execute( Object[] arguments, IScriptFunctionContext arg1 ) throws BirtException</div>
<div>{</div>
<div>return this.executor.execute( arguments, arg1 );</div>
<div>}</div>
<div> </div>
<div>}</div>
<div> </div>
</div>
</div>
<p> </p>
<div>Plugin.xml is same as above.<br>
</div>
<div>Thank You,</div>
Veerendra
<p>Dear Friends, can anyone please help me. I am in really bad situation. I have to complete this task as soon as possible as we are nearing the project deadlines.... :-(</p>
<p> </p>
<p>Thanks in advance<br>
</p>
Veerendra
<p>Exact Error is as below:</p>
<p> </p>
<div>java.lang.ClassCastException: ubq.decryptor.DecryptorFactory cannot be cast to org.eclipse.birt.core.script.functionservice.IScriptFunctionFactory</div>
<div>at org.eclipse.birt.core.internal.function.impl.FunctionProviderImpl.getCategoryMap(FunctionProviderImpl.java:272)</div>
<div>at org.eclipse.birt.core.internal.function.impl.FunctionProviderImpl.getCategories(FunctionProviderImpl.java:91)</div>
<div>at org.eclipse.birt.core.script.functionservice.impl.FunctionProvider.getCategories(FunctionProvider.java:76)</div>
<div>at org.eclipse.birt.report.designer.ui.dialogs.ExpressionProvider.getChildrenList(ExpressionProvider.java:630)</div>
<div>at org.eclipse.birt.report.designer.ui.dialogs.BindingExpressionProvider.getChildrenList(BindingExpressionProvider.java:135)</div>
<div>at org.eclipse.birt.report.designer.ui.dialogs.ExpressionProvider.getChildren(ExpressionProvider.java:520)</div>
<div>at org.eclipse.birt.report.designer.ui.dialogs.ExpressionBuilder$18.getChildren(ExpressionBuilder.java:977)</div>
<div>at org.eclipse.birt.report.designer.ui.dialogs.ExpressionBuilder$18.getElements(ExpressionBuilder.java:992)</div>
<div>at org.eclipse.jface.viewers.StructuredViewer.getRawChildren(StructuredViewer.java:999)</div>
<div>at org.eclipse.jface.viewers.ColumnViewer.getRawChildren(ColumnViewer.java:699)</div>
<div>at org.eclipse.jface.viewers.AbstractTreeViewer.getRawChildren(AbstractTreeViewer.java:1349)</div>
<div>at org.eclipse.jface.viewers.TreeViewer.getRawChildren(TreeViewer.java:353)</div>
<div>at org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(StructuredViewer.java:905)</div>
<div>at org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(AbstractTreeViewer.java:617)</div>
<div>at org.eclipse.jface.viewers.AbstractTreeViewer$1.run(AbstractTreeViewer.java:815)</div>
<div>at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)</div>
<div>at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:791)</div>
<div>at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:611)</div>
<div>at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:762)</div>
<div>at org.eclipse.jface.viewers.AbstractTreeViewer.internalInitializeTree(AbstractTreeViewer.java:1543)</div>
<div>at org.eclipse.jface.viewers.TreeViewer.internalInitializeTree(TreeViewer.java:790)</div>
<div>at org.eclipse.jface.viewers.AbstractTreeViewer$5.run(AbstractTreeViewer.java:1527)</div>
<div>at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1436)</div>
<div>at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:366)</div>
<div>at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1397)</div>
<div>at org.eclipse.jface.viewers.AbstractTreeViewer.inputChanged(AbstractTreeViewer.java:1519)</div>
<div>at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:292)</div>
<div>at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1675)</div>
<div>at org.eclipse.birt.report.designer.ui.dialogs.ExpressionBuilder$1.selectionChanged(ExpressionBuilder.java:380)</div>
<div>at org.eclipse.jface.viewers.Viewer$2.run(Viewer.java:163)</div>
<div>at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)</div>
<div>at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50)</div>
<div>at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:178)</div>
<div>at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:160)</div>
<div>at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2171)</div>
<div>at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1202)</div>
<div>at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1231)</div>
<div>at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:242)</div>
<div>at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:236)</div>
<div>at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:408)</div>
<div>at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)</div>
<div>at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)</div>
<div>at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)</div>
<div>at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)</div>
<div>at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)</div>
<div>at org.eclipse.jface.window.Window.runEventLoop(Window.java:832)</div>
<div>at org.eclipse.jface.window.Window.open(Window.java:808)</div>
<div>at org.eclipse.birt.report.designer.ui.dialogs.BaseTitleAreaDialog.open(BaseTitleAreaDialog.java:193)</div>
<div>at org.eclipse.birt.report.designer.internal.ui.dialogs.expression.ExpressionButton.openExpressionBuilder(ExpressionButton.java:146)</div>
<div>at org.eclipse.birt.report.designer.internal.ui.dialogs.expression.ExpressionButtonProvider.handleSelectionEvent(ExpressionButtonProvider.java:127)</div>
<div>at org.eclipse.birt.report.designer.internal.ui.dialogs.expression.ExpressionButton$1.widgetSelected(ExpressionButton.java:57)</div>
<div>at org.eclipse.birt.report.designer.internal.ui.swt.custom.MenuButton$3.handleEvent(MenuButton.java:238)</div>
<div>at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)</div>
<div>at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)</div>
<div>at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)</div>
<div>at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)</div>
<div>at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)</div>
<div>at org.eclipse.jface.window.Window.runEventLoop(Window.java:832)</div>
<div>at org.eclipse.jface.window.Window.open(Window.java:808)</div>
<div>at org.eclipse.birt.report.designer.ui.dialogs.BaseDialog.open(BaseDialog.java:111)</div>
<div>at org.eclipse.birt.report.designer.internal.ui.editors.schematic.editparts.DataEditPart.performDirectEdit(DataEditPart.java:134)</div>
<div>at org.eclipse.birt.report.designer.internal.ui.editors.schematic.editparts.ReportElementEditPart.performRequest(ReportElementEditPart.java:155)</div>
<div>at org.eclipse.gef.tools.SelectEditPartTracker.performOpen(SelectEditPartTracker.java:194)</div>
<div>at org.eclipse.gef.tools.SelectEditPartTracker.handleDoubleClick(SelectEditPartTracker.java:137)</div>
<div>at org.eclipse.gef.tools.AbstractTool.mouseDoubleClick(AbstractTool.java:1069)</div>
<div>at org.eclipse.birt.report.designer.internal.ui.editors.schematic.tools.ReportElementDragTracker.mouseDoubleClick(ReportElementDragTracker.java:125)</div>
<div>at org.eclipse.gef.tools.SelectionTool.mouseDoubleClick(SelectionTool.java:527)</div>
<div>at org.eclipse.gef.EditDomain.mouseDoubleClick(EditDomain.java:231)</div>
<div>at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMouseDoubleClicked(DomainEventDispatcher.java:291)</div>
<div>at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseDoubleClick(LightweightSystem.java:518)</div>
<div>at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:196)</div>
<div>at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)</div>
<div>at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)</div>
<div>at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)</div>
<div>at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)</div>
<div>at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)</div>
<div>at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)</div>
<div>at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)</div>
<div>at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)</div>
<div>at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)</div>
<div>at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636)</div>
<div>at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)</div>
<div>at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579)</div>
<div>at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)</div>
<div>at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135)</div>
<div>at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)</div>
<div>at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)</div>
<div>at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)</div>
<div>at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)</div>
<div>at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)</div>
<div>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)</div>
<div>at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)</div>
<div>at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)</div>
<div>at java.lang.reflect.Method.invoke(Unknown Source)</div>
<div>at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)</div>
<div>at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)</div>
<div>at org.eclipse.equinox.launcher.Main.run(Main.java:1465)</div>
<div>at org.eclipse.equinox.launcher.Main.main(Main.java:1438)</div>
JFreeman
<p>My first guess by looking over the code and stack trace you have posted is that it has do with the first class you are implementing:</p>
<pre class="_prettyXprint _lang-js">
public class DecryptorFactory implements IScriptFunctionFactory
</pre>
<p>My guess is that by declaring the class this way, it is trying to cast DecryptorFactory to a IScriptFunctionFactory which cannot be done.</p>