activiti获取用户任务同时查询流程变量 null pointer问题解决

简介: activiti获取用户任务同时查询流程变量 null pointer问题解决

我用的activiti版本是 5.13

先上代码:

/**
     * 查询用户任务
     * @param userId
     * @return
     */
    public List<Task> getTasksByUserId(String userId){
        TaskQuery query = taskService.createTaskQuery().taskCandidateUser(userId).includeProcessVariables();//同时查询流程变量
        return query.orderByTaskCreateTime().desc().list();
    }

如果您用

task.getProcessVariables().get("faultId");

如果流程变量里面有不是基本类型的变量,例如你之前保存了一个实体,就会报null pointer异常,很奇怪。经过看源代码:

/**
 * @author Tom Baeyens
 * @author Joram Barrez
 * @author Falko Menge
 * @author Tijs Rademakers
 */ 
public class TaskEntity extends VariableScopeImpl implements Task, DelegateTask, Serializable, PersistentObject, HasRevision {
  public Map<String, Object> getProcessVariables() {
    Map<String, Object> variables = new HashMap<String, Object>();
    if (queryVariables != null) {
      for (VariableInstanceEntity variableInstance: queryVariables) {
        if (variableInstance.getId() != null && variableInstance.getTaskId() == null) {
          variables.put(variableInstance.getName(), variableInstance.getValue());
        }
      }
    }
    return variables;
  }

会发现在循环中,如果VariableInstanceEntity 保存的不是基本数据类型,variableInstance.getValue()就会出现null pointer异常**,具体为什么报异常也没有深入研究,但是我提出了一个解决办法供大家参考:

List<VariableInstanceEntity> variableInstanceEntityList =  ((TaskEntity)task).getQueryVariables();
                 Object faultIdOb = getProcessVariable(variableInstanceEntityList,"faultId");
  /**
     * 获取流程变量
     * @param variableInstanceEntityList
     * @param variableName 流程变量名
     * @return
     */
    public Object  getProcessVariable(  List<VariableInstanceEntity> variableInstanceEntityList,String variableName ){
        for (VariableInstanceEntity variableInstance: variableInstanceEntityList) {
            if (variableInstance.getId() != null && variableInstance.getTaskId() == null) {
                if(variableInstance.getName().equals(variableName))
                    return  variableInstance.getValue();
            }
        }
        return null;
    }

这样就绕过了读取非基本类型变量 的值,也不会报错了。


相关文章
|
2月前
|
存储 JavaScript 前端开发
|
5月前
|
JavaScript 前端开发
null、未定义或未声明的变量之间有什么区别
null、未定义或未声明的变量之间有什么区别
null、undefined和未声明变量的具体应用场景
null、undefined和未声明变量的具体应用场景
定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
|
6月前
|
SQL 关系型数据库 MySQL
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all
|
6月前
|
SQL Java 数据库连接
Mybatis 查询出来的数据集合数量正确,但是具体数据为null
Mybatis 查询出来的数据集合数量正确,但是具体数据为null
174 1
|
Java 数据库 Spring
spring boot 查询到的数据返回null
spring boot 查询到的数据返回null
365 0
|
PHP
php开发实战分析(3):php中判断变量为空(0、false、null)的方法
php开发实战分析(3):php中判断变量为空(0、false、null)的方法
257 0
|
XML Java 数据库连接
Mybatis查询结果List集合数量正确,但全为null
Mybatis查询结果List集合数量正确,但全为null
230 0
Mybatis查询结果List集合数量正确,但全为null
|
数据库 索引
数据库查询当列值为null以相应的值代替
数据库查询当列值为null以相应的值代替
数据库查询当列值为null以相应的值代替