[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