
上QQ阅读APP看书,第一时间看更新
5.4 扩展黑名单元素
在4.4.3节介绍process、userTask、definitions元素解析时使用了黑名单处理机制,userTask节点的解析工作是围绕其对应的解析器UserTaskXMLConverter中的convertXMLToElement方法展开的,该方法首先解析任务节点中定义的常规属性,然后委托BpmnXMLUtil类中的静态方法addCustomAttributes解析自定义属性。这里以扩展任务节点属性为例,详细讲解该实现过程。
5.4.1 扩展元素属性原理
BpmnXMLUtil类中的addCustomAttributes方法相关实现如代码清单5-5所示。
代码清单5-5 BpmnXMLUtil.java

在上述代码中,第2~15行循环遍历任务节点的所有属性信息,其中第13行验证黑名单列表,如果属性不在黑名单列表中,则执行第14行代码,将其作为扩展属性信息进行存储。任务节点中定义的黑名单集合如表5-1所示。
表5-1 任务节点的黑名单集合

5.4.2 任务节点扩展属性实战
下面定义一个流程文档以验证自定义黑名单是否生效,该流程文档内容如代码清单5-6所示。
代码清单5-6 customTask.bpmn

在上述代码中,第3行为任务节点定义了两个扩展属性shareniu:id和shareniu:name,其中shareniu为代码清单5-3中定义的命名空间,任务节点的扩展属性需要引入命名空间前缀以方便与任务节点的默认属性进行区分,扩展属性的名称不限于上面两种,可以是任意值。下面自定义一个类用于获取任务节点的扩展属性,如代码清单5-7所示。
代码清单5-7 App.java

执行上述代码,控制台打印的信息如下:
id, shareniuId name, shareniuName
强调
shareniu:id与id两个属性的命名空间前缀不一致,因此引擎将shareniu:id作为扩展属性处理。