NPE while serviceTask call
clauss Mar 31, 2010 12:55 PMHi 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