4 Replies Latest reply on Oct 27, 2008 10:25 AM by mputz

    NPE in GPD

    clandestino_bgd

      Hello,
      I am trying to port process definition from one machine (Ubuntu) to other machine (Windows) designed with JBPM GPD version 3.1.3.

      I am facing NPE when I try to launch it on Windows machine. In workspace/.metadata/log I can see the folowing trace:

      java.lang.NullPointerException
       at org.jbpm.gd.jpdl.notation.JpdlNode.getDestinationNode(Unknown Source)
       at org.jbpm.gd.jpdl.notation.JpdlNode.propertyChange(Unknown Source)
       at org.jbpm.gd.jpdl.notation.JpdlRootContainer.addLeavingEdges(Unknown Source)
       at org.jbpm.gd.common.notation.RootContainer.addNode(Unknown Source)
       at org.jbpm.gd.common.editor.AbstractContentProvider.addNode(Unknown Source)
       at org.jbpm.gd.common.editor.AbstractContentProvider.addNodes(Unknown Source)
       at org.jbpm.gd.jpdl.editor.JpdlContentProvider.addNodes(Unknown Source)
       at org.jbpm.gd.common.editor.AbstractContentProvider.processRootContainer(Unknown Source)
       at org.jbpm.gd.common.editor.AbstractContentProvider.addNotationInfo(Unknown Source)
       at org.jbpm.gd.common.editor.Editor.initGraphPage(Unknown Source)
       at org.jbpm.gd.common.editor.Editor.createPages(Unknown Source)
       at org.jbpm.gd.jpdl.editor.JpdlEditor.createPages(Unknown Source)
       at org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:283)
       at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:661)
       at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:426)
       at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:592)
       at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:299)
       at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:179)
       at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:268)
       at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65)
       at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:400)
       at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1256)
       at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1209)
       at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1604)
       at org.eclipse.ui.internal.PartStack.add(PartStack.java:499)
       at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:103)
       at org.eclipse.ui.internal.PartStack.add(PartStack.java:485)
       at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:112)
       at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:63)
       at org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorAreaHelper.java:217)
       at org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAreaHelper.java:207)
       at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:774)
       at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:673)
       at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:634)
       at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2737)
       at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2651)
       at org.eclipse.ui.internal.WorkbenchPage.access$13(WorkbenchPage.java:2643)
       at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2595)
       at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
       at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2590)
       at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2574)
       at org.eclipse.ui.actions.OpenWithMenu.openEditor(OpenWithMenu.java:340)
       at org.eclipse.ui.actions.OpenWithMenu.access$0(OpenWithMenu.java:328)
       at org.eclipse.ui.actions.OpenWithMenu$2.handleEvent(OpenWithMenu.java:190)
       at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
       at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
       at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
       at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
       at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
       at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
       at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
       at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
       at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
       at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
       at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
       at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
       at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
       at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
       at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
       at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
       at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
       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.equinox.launcher.Main.invokeFramework(Main.java:508)
       at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
       at org.eclipse.equinox.launcher.Main.run(Main.java:1173)
      
      
      


      Ok, obviously there is some problem in my process definition, but from the log, I cannot figure out, what exactly.
      Is there a way, or plan for the future to make GPD error more informative, e.g to point to the Node, or any element which is malformed.
      Thanks for the answer.

      For the reference, here are the files:

      best,
      Milan

      My processdefinition.xml looks like this:

      <?xml version="1.0" encoding="UTF-8"?>
      
      <process-definition
       xmlns="urn:jbpm.org:jpdl-3.2"
       name="process setup">
      
      
       <start-state name="start">
       <transition to="select annotation modules"></transition>
       </start-state>
       <task-node name="select annotation modules">
       <task description="Here you can specify annotation modules to be used in the annotation process." name="select annotation modules">
       <assignment actor-id="#{initiator}" />
       <controller>
       <variable name="doAutomatic" access="read,write,required" mapped-name="X_Automatic Annotation"></variable>
       <variable name="doManual" access="read,write,required" mapped-name="X_Manual Annotation"></variable>
       </controller>
       </task>
       <transition to="do automatic?"></transition>
       </task-node>
      
       <decision name="do manual?">
       <transition to="end" name="No"></transition>
       <transition to="super-state1/select users" name="Yes"></transition>
       </decision>
      
       <task-node name="save project">
       <transition to="end"></transition>
       </task-node>
      
       <super-state name="gas configuration">
       <task-node name="gas quick configuration">
       <task description="Here you can specify GAS services to be used in the annotation process." name="specify GAS pipeline">
       <assignment actor-id="#{initiator}" />
       <controller>
       <variable name="gasName" access="read,write,required" mapped-name="GAS Name"></variable>
       <variable name="endpointURL" access="read,write,required" mapped-name="GAS URL"></variable>
       </controller>
       </task>
       <transition to="gas advanced configuration" name="Advanced Options "></transition>
       <transition to="gas quick configuration" name="Specify Next"></transition>
       <transition to="../do manual?" name="Finish"></transition>
       </task-node>
       <task-node name="gas advanced configuration">
       <task description="Here you can specify GAS services to be used in the annotation process." name="specify GAS pipeline">
       <assignment actor-id="#{initiator}" />
       <controller>
       <variable name="gasName" access="read,write,required" mapped-name="GAS Name"></variable>
       <variable name="endpointURL" access="read,write,required" mapped-name="GAS URL"></variable>
       <variable name="asKey" access="read,write" mapped-name="Annotation Set Key"></variable>
       <variable name="asValue" access="read,write" mapped-name="Annotation Set Value"></variable>
       <variable name="asExtraMappings" access="read,write" mapped-name="A_Annotation Set Extra Mappings"></variable>
       <variable name="parameterKey" access="read,write" mapped-name="Parameter Key"></variable>
       <variable name="parameterValue" access="read,write" mapped-name="Parameter Value"></variable>
       </controller>
       </task>
       <transition to="gas quick configuration" name="Specify Next"></transition>
       <transition to="../do manual?" name="Finish"></transition>
       </task-node>
       </super-state>
      
       <super-state name="manual annotation configuration">
       <task-node name="select users">
       <task description="Here you can select users for manual annotation." swimlane="curator" name="specify annotation process parameters">
       <controller>
       <variable name="curatorCSVList" access="read,write,required" mapped-name="M_:usersInRoleList#curator_Curators"></variable>
       <variable name="annotatorCSVList" access="read,write,required" mapped-name="M_:usersInRoleList#annotator_Annotators"></variable>
       </controller>
       </task>
       <transition to="specify annotation strategy"></transition>
       </task-node>
       <task-node name="specify annotation strategy">
       <task description="Here you can specify annotation strategy to be used for manual annotation." name="specify annotation strategy">
       <assignment actor-id="#{initiator}" />
       <controller>
       <variable name="annotatorsPerDocument" access="read, write" mapped-name="C_:numOfPerformersPerTask_Annotators per Document"></variable>
       <variable name="canCancel" access="read, write" mapped-name="X_Cancel Task Allowed"></variable>
       <variable name="anonymousAnnotation" access="read,write" mapped-name="X_Anonymous Annotation"></variable>
       </controller>
       </task>
       <transition to="save project" name="Save Project"></transition>
       <transition to="../end" name="Don't Save"></transition>
       </task-node>
       </super-state>
      
       <decision name="do automatic?">
       <transition to="gas configuration/gas quick configuration" name="Yes"></transition>
       <transition to="do manual?" name="No"></transition>
       </decision>
       <end-state name="end"></end-state>
      
      </process-definition>
      
      


      and my gpd.xml looks like this:
      <?xml version="1.0" encoding="UTF-8"?>
      
      <root-container name="process setup" width="781" height="478">
       <node name="start" x="103" y="7" width="140" height="40">
       <edge>
       <label x="5" y="-10"/>
       </edge>
       </node>
       <node name="select annotation modules" x="60" y="65" width="229" height="36">
       <edge>
       <label x="5" y="-10"/>
       </edge>
       </node>
       <node name="do manual?" x="60" y="221" width="229" height="36">
       <edge>
       <label x="-21" y="-13"/>
       <bendpoint w1="-135" h1="0" w2="-101" h2="-199"/>
       <bendpoint w1="-135" h1="199" w2="-101" h2="0"/>
       </edge>
       <edge>
       <label x="-24" y="-40"/>
       <bendpoint w1="0" h1="64" w2="-276" h2="2"/>
       </edge>
       </node>
       <node name="save project" x="72" y="346" width="132" height="36">
       <edge>
       <label x="5" y="-10"/>
       </edge>
       </node>
       <node name="end" x="72" y="420" width="132" height="36"/>
       <node-container name="gas configuration" x="336" y="36" width="281" height="181">
       <node name="gas quick configuration" x="20" y="28" width="232" height="36">
       <edge>
       <label x="2" y="-9"/>
       <bendpoint w1="42" h1="41" w2="42" h2="-43"/>
       </edge>
       <edge>
       <label x="-80" y="3"/>
       <bendpoint w1="126" h1="-6" w2="126" h2="-6"/>
       <bendpoint w1="125" h1="-43" w2="125" h2="-43"/>
       <bendpoint w1="64" h1="-42" w2="64" h2="-42"/>
       <bendpoint w1="-2" h1="-42" w2="-2" h2="-42"/>
       </edge>
       <edge>
       <label x="-84" y="58"/>
       <bendpoint w1="168" h1="-1" w2="474" h2="-150"/>
       <bendpoint w1="169" h1="147" w2="475" h2="-2"/>
       </edge>
       </node>
       <node name="gas advanced configuration" x="18" y="120" width="234" height="36">
       <edge>
       <label x="-81" y="-11"/>
       <bendpoint w1="-44" h1="-40" w2="-44" h2="44"/>
       </edge>
       <edge>
       <label x="-26" y="11"/>
       <bendpoint w1="-159" h1="3" w2="146" h2="-54"/>
       </edge>
       </node>
       </node-container>
       <node-container name="manual annotation configuration" x="336" y="264" width="284" height="145">
       <node name="select users" x="20" y="12" width="231" height="36">
       <edge>
       <label x="5" y="-10"/>
       </edge>
       </node>
       <node name="specify annotation strategy" x="21" y="73" width="234" height="36">
       <edge>
       <label x="-49" y="-19"/>
       </edge>
       <edge>
       <label x="-229" y="-20"/>
       <bendpoint w1="0" h1="73" w2="311" h2="0"/>
       </edge>
       </node>
       </node-container>
       <node name="do automatic?" x="60" y="144" width="229" height="36">
       <edge>
       <label x="6" y="-53"/>
       <bendpoint w1="130" h1="0" w2="-176" h2="72"/>
       <bendpoint w1="138" h1="-70" w2="-168" h2="2"/>
       </edge>
       <edge>
       <label x="5" y="-10"/>
       </edge>
       </node>
      </root-container>
      
      


        • 1. Re: NPE in GPD
          kukeltje

          did you try with just the processdefinition.xml? Graph might be mixed up, but then you can reorder manually (not the best solution, but might be a 'quick fix')

          • 2. Re: NPE in GPD
            clandestino_bgd

            Hi,
            yes I did, if you mean to manually delete gpd.xml and then launch processdefinition.xml.

            It works for different process, but not for this one, NPE occurs every time.
            I know, it is pretty hard to detect what is messed up, just wanted to see if you guys have this problem in mind, and plan to solve it in GPD.
            I am not a eclipse developer, otherwise I would try to help.

            best,
            Milan

            • 3. Re: NPE in GPD
              kukeltje

               

              I am not a eclipse developer, otherwise I would try to help.


              Me neither, but it is still just Java, and adding some logging/debug statements is not that hard... thing is that you do have to build the GPD yourself then.

              • 4. Re: NPE in GPD
                mputz

                 

                java.lang.NullPointerException
                 at org.jbpm.gd.jpdl.notation.JpdlNode.getDestinationNode(Unknown Source)
                


                looks like there is an incorrect transition somewhere in the process, pointing to a node that cannot be resolved.

                I would suspect the following:

                <decision name="do manual?">
                 <transition to="end" name="No"></transition>
                 <transition to="super-state1/select users" name="Yes"></transition>
                 </decision>


                and change it to:

                <decision name="do manual?">
                 <transition to="end" name="No"></transition>
                 <transition to="manual annotation configuration/select users" name="Yes"></transition>
                 </decision>


                How did you end up with this corrupted process in the first place?