[jboss-user] [jBPM] New message: "NullPointerException on Assignment-Handler"
Andre Muniz
do-not-reply at jboss.com
Wed Jan 13 14:30:48 EST 2010
User development,
A new message was posted in the thread "NullPointerException on Assignment-Handler":
http://community.jboss.org/message/519884#519884
Author : Andre Muniz
Profile : http://community.jboss.org/people/andre.muniz
Message:
--------------------------------------------------------------
Hi!
On the following test process when the execution reaches task3 JBPM 4.3 throws a null pointer exception.
<?xml version="1.0" encoding="UTF-8"?>
<process description="Test" key="testProcess" name="Test Process" xmlns="http://jbpm.org/4.3/jpdl">
<start g="67,236,48,48" name="start1">
<transition g="-43,-18" name="to fork1" to="fork1"/>
</start>
<task g="255,144,92,52" name="task1" candidate-groups="firstGroup">
<assignment-handler class="com.test.AutoAssignment"/>
<transition g="-41,-18" name="to join1" to="join1"/>
</task>
<task g="258,334,92,52" name="task2" candidate-groups="secondGroup">
<assignment-handler class="com.test.AutoAssignment"/>
<transition g="-41,-18" name="to join1" to="join1"/>
</task>
<task g="515,228,92,52" name="task3" candidate-groups="thirdGroup">
<assignment-handler class="com.test.AutoAssignment"/>
<transition g="-42,-18" name="to end1" to="end1"/>
</task>
<end g="676,232,48,48" name="end1"/>
<fork g="172,236,48,48" name="fork1">
<transition g="-44,-18" name="to task1" to="task1"/>
<transition g="-44,-18" name="to task2" to="task2"/>
</fork>
<join g="385,233,48,48" name="join1">
<transition g="-44,-18" name="to task3" to="task3"/>
</join>
</process>
If I take the assignment-handler out it works, which makes me think that's the problem, but if I put it back in the debugger doesn't even get into the class attached below:
package com.test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.TaskService;
import org.jbpm.api.model.OpenExecution;
import org.jbpm.api.task.Assignable;
import org.jbpm.api.task.AssignmentHandler;
import org.jbpm.api.task.Participation;
import org.jbpm.api.task.Task;
public class AutoAssignment implements AssignmentHandler {
/**
* Auto-claim the task to the default user.
* @param assignable assignable object
* @param execution execution object
* @throws Exception exception
*/
@Override
public void assign(Assignable assignable, OpenExecution execution) throws Exception {
// Default users (group --> user mapping)
Map < String, String > defaultUsers = new HashMap < String, String >();
defaultUsers.put("firstGroup", "firstUser");
defaultUsers.put("secondGroup", "secondUser");
defaultUsers.put("thirdGroup", "thirdUser");
// Engine and task service
ProcessEngine processEngine = new Configuration().buildProcessEngine();
TaskService taskService = processEngine.getTaskService();
// Loads the active activities
Set < String > activities = execution.findActiveActivityNames();
// Iterates the activities
for (String activity : activities) {
// Loads the tasks according to the process instance and activity name
List < Task > tasks =
taskService.createTaskQuery().activityName(activity).processInstanceId(
execution.getProcessInstance().getId()).list();
// Iterates the tasks
for (Task task : tasks) {
// Compares the task name to the activity name
// If the task name matches the activity name, loads the candidate-group and assigns the default user
if (task.getName().equals(activity)) {
// Loads the tasks candidate groups (in our process we have just one group)
List < Participation > groups = taskService.getTaskParticipations(task.getId());
// If the groups collection is not empty, loads the default user and sets in the task
if (!groups.isEmpty()) {
assignable.setAssignee(defaultUsers.get(groups.get(0).getGroupId()));
}
}
}
}
}
}
As another unexpected result from my testing, if I replace task3 by a fork and 2 tasks, both with assignment-handlers, the execution flows normally:
<?xml version="1.0" encoding="UTF-8"?>
<process description="Test" key="testProcess" name="Test Process" xmlns="http://jbpm.org/4.3/jpdl">
<start g="67,236,48,48" name="start1">
<transition g="-43,-18" name="to fork1" to="fork1"/>
</start>
<task candidate-groups="firstGroup" g="255,144,92,52" name="task1">
<assignment-handler class="com.test.AutoAssignment"/>
<transition g="-41,-18" name="to join1" to="join1"/>
</task>
<task candidate-groups="secondGroup" g="258,334,92,52" name="task2">
<assignment-handler class="com.test.AutoAssignment"/>
<transition g="-41,-18" name="to join1" to="join1"/>
</task>
<end g="858,229,48,48" name="end1"/>
<fork g="172,236,48,48" name="fork1">
<transition g="-44,-18" name="to task1" to="task1"/>
<transition g="-44,-18" name="to task2" to="task2"/>
</fork>
<join g="385,233,48,48" name="join1">
<transition name="to fork2" to="fork2" g="-43,-18"/>
</join>
<fork name="fork2" g="506,234,48,48">
<transition name="to task3" to="task3" g="-44,-18"/>
<transition name="to task4" to="task4" g="-44,-18"/>
</fork>
<task name="task3" g="593,136,92,52">
<assignment-handler class="com.test.AutoAssignment"/>
<transition name="to join2" to="join2" g="-41,-18"/>
</task>
<task name="task4" g="603,324,92,52">
<assignment-handler class="com.test.AutoAssignment"/>
<transition name="to join2" to="join2" g="-41,-18"/>
</task>
<join name="join2" g="732,232,48,48">
<transition name="to end1" to="end1" g="-42,-18"/>
</join>
</process>
Did anyone ever experienced a similar problem or has any idea of what might be happening? Thanks!
--------------------------------------------------------------
To reply to this message visit the message page: http://community.jboss.org/message/519884#519884
More information about the jboss-user
mailing list