5 Replies Latest reply on Mar 31, 2010 4:02 PM by Ronald van Kuijk

    NPE while serviceTask call

    Claus Straube Novice

      Hi all,

       

      I'm always running in a NPE with BPMN 2.0 (jBPM 4.3) and Spring 2.5.3.

       

      This is my testcase:

       

          @Test
          public void testAsyncCalls(){
              //deploy process
              repositoryService.createDeployment().addResourceFromClasspath("async_service_call.bpmn.xml").deploy();
              
              //start instance
              ProcessInstance instance = executionService.startProcessInstanceByKey("foobar");
              Assert.assertNotNull(instance);
              
              //get instance id
              String iid = instance.getId();
              
              //set instance id as variable
              executionService.setVariable(iid, "instanceId", iid);
              
              //signal first execution
              Execution e1 = instance.findActiveExecutionIn("r1");
              Assert.assertNotNull(e1);
              executionService.signalExecutionById(e1.getId());
              
              //get instance back
              ProcessInstance instance2 = executionService.findProcessInstanceById(iid);
              Assert.assertNotNull(instance2);
              
              //check if the var has been set
              Assert.assertEquals("foo", executionService.getVariable(iid, "v1"));
              
              //signal second execution
              Execution e2 = instance2.findActiveExecutionIn("r2");
              Assert.assertNotNull(e2);
              ProcessInstance instance3 = executionService.signalExecutionById(e2.getId());
              
              //check if the instance has been ended
              Assert.assertTrue(instance3.isEnded());
          }
      

       

      This is the process:

       

      <?xml version="1.0" encoding="UTF-8"?>
      <bpmn:definitions id="ServiceTaskJava"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
          xmlns:bpmn="http://schema.omg.org/spec/BPMN/2.0" typeLanguage="http://www.w3.org/2001/XMLSchema"
          expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://sample.bpmn.camunda.com/"
          xmlns:jbpm="http://jbpm.org/4.0/bpmn2">
      
      
          <bpmn:itemDefinition id="i1">
              <jbpm:arg>
                  <jbpm:object expr="#{instanceId}" />
              </jbpm:arg>
          </bpmn:itemDefinition>
      
          <bpmn:itemDefinition id="i2">
              <jbpm:var name="v1" />
          </bpmn:itemDefinition>
      
          <bpmn:message id="im" name="input message"
              structureRef="i1"></bpmn:message>
      
          <bpmn:message id="om" name="output message"
              structureRef="i2">
          </bpmn:message>
      
          <bpmn:interface id="if1" name="mocks.Mock01">
              <bpmn:operation id="o1" name="call">
                  <bpmn:inMessageRef>inputMessage</bpmn:inMessageRef>
                  <bpmn:outMessageRef>outputMessage</bpmn:outMessageRef>
              </bpmn:operation>
          </bpmn:interface>
      
      
          <!-- process definition -->
          <bpmn:process id="foobar" name="async_process">
      
              <bpmn:startEvent id="s" />
              
              <bpmn:sequenceFlow id="f1" name="s_2_r1" sourceRef="s" targetRef="r1" />
      
              <bpmn:receiveTask id="r1" name="r1" />
              
              <!-- start -->
              <bpmn:sequenceFlow id="f2" name="r1_2_t1" sourceRef="r1" targetRef="t1" />
      
              <bpmn:serviceTask id="st1" name="st1" implementation="Other" operationRef="o1"/>
              
              <bpmn:sequenceFlow id="f3" name="st1_2_r2" sourceRef="st1" targetRef="r2" />
              <!-- end -->
              
              <!-- 
              <bpmn:sequenceFlow id="fx" name="r1_2_r2" sourceRef="r1" targetRef="r2" />
              -->
              
              <bpmn:receiveTask id="r2" name="r2" />
              
              <bpmn:sequenceFlow id="f4" name="r2_2_e1" sourceRef="r2" targetRef="e1" />
      
              <bpmn:endEvent id="e1" name="e1" />            
          </bpmn:process>
      </bpmn:definitions>
      

       

      and this is the service I want to call:

      package mocks;
      
      public class Mock01 {
              
          public String call(String var){
              System.out.println(var);
              return "foo";
          }
      
      }
      

       

      If I comment out the lines between 'start' and 'end' in my process (and comment in the flow between r1 and r2) no NPE happens (of cource the test fails). But if I run the process as it is, I will get a npe. Can onyone give me a hint where the problem is?

       

      Thanks in advance - Claus

        • 1. Re: NPE while serviceTask call
          Claus Straube Novice

          arrrrg - found the mistake (of course one minute after my post). Here is the correct code:

           

          <?xml version="1.0" encoding="UTF-8"?>
          <bpmn:definitions id="ServiceTaskJava"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
              xmlns:bpmn="http://schema.omg.org/spec/BPMN/2.0" typeLanguage="http://www.w3.org/2001/XMLSchema"
              expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://sample.bpmn.camunda.com/"
              xmlns:jbpm="http://jbpm.org/4.0/bpmn2">
          
          
              <bpmn:itemDefinition id="i1">
                  <jbpm:arg>
                      <jbpm:object expr="#{instanceId}" />
                  </jbpm:arg>
              </bpmn:itemDefinition>
          
              <bpmn:itemDefinition id="i2">
                  <jbpm:var name="v1" />
              </bpmn:itemDefinition>
          
              <bpmn:message id="im" name="input message"
                  structureRef="i1"></bpmn:message>
          
              <bpmn:message id="om" name="output message"
                  structureRef="i2">
              </bpmn:message>
          
              <bpmn:interface id="if1" name="mocks.Mock01">
                  <bpmn:operation id="o1" name="call">
                      <bpmn:inMessageRef>im</bpmn:inMessageRef>
                      <bpmn:outMessageRef>om</bpmn:outMessageRef>
                  </bpmn:operation>
              </bpmn:interface>
          
          
              <!-- process definition -->
              <bpmn:process id="foobar" name="async_process">
          
                  <bpmn:startEvent id="s" />
                  
                  <bpmn:sequenceFlow id="f1" name="s_2_r1" sourceRef="s" targetRef="r1" />
          
                  <bpmn:receiveTask id="r1" name="r1" />
                  
                  <!-- -->
                  <bpmn:sequenceFlow id="f2" name="r1_2_t1" sourceRef="r1" targetRef="st1" />
          
                  <bpmn:serviceTask id="st1" name="st1" implementation="Other" operationRef="o1"/>
                  
                  <bpmn:sequenceFlow id="f3" name="st1_2_r2" sourceRef="st1" targetRef="r2" />
                  <!-- -->
                  
                  <!-- 
                  <bpmn:sequenceFlow id="fx" name="r1_2_r2" sourceRef="r1" targetRef="r2" />
                  -->
                  
                  <bpmn:receiveTask id="r2" name="r2" />
                  
                  <bpmn:sequenceFlow id="f4" name="r2_2_e1" sourceRef="r2" targetRef="e1" />
          
                  <bpmn:endEvent id="e1" name="e1" />            
              </bpmn:process>
          </bpmn:definitions>
          

           

          The problem was the in and out message ref.

           

          Best regards - claus

          • 2. Re: NPE while serviceTask call
            Koen Aers Master

            I was wondering: do you get the points for answering if you answer the question yourself? ;-)

             

            Cheers,

            Koen

            • 3. Re: NPE while serviceTask call
              Claus Straube Novice

              It doesn't seem so. I've got 53 points and this answer should give 100 pts, right? But nice try...

               

              Best regards - Claus

              • 4. Re: NPE while serviceTask call
                Koen Aers Master

                Bummer... I would have started jazzing up my score instantly otherwise ;-)