activiti部署时json与XML与BpmnModel之间的相互转换

如果使用的是activiti自带的前端设计器,画完图保存model时会生成两个主要参数,一个是json.xml【json串】,一个是svg.xml,一个是数据,一个是图片,样板参见:

链接:https://share.weiyun.com/XgJg85XC 密码:88e79q

那么保存的时候是json串,引擎认识的却是符合bpmn2.0规范的xml,所以在首次的部署的时候要将json串转换为BpmnModel,再将BpmnModel转换成xml保存进数据库,以后每次使用就直接将xml转换成BpmnModel,这套操作确实有点啰嗦,实际项目中如果不用activiti自带的设计器,可以考虑用插件,直接生成的是xml,或者自己开发设计器,在后端生成节点及其属性,引擎有现成的节点实体,如:开始节点StartEvent,线SequenceFlow等。

Model modelData = repositoryService.getModel(modelId);
ObjectNode modelNode = (ObjectNode) new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));// readTree(这里面是json)
BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);// 转model
byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model);// 转xml
String processName = modelData.getName() + ".bpmn20.xml";
Deployment deployment = repositoryService.createDeployment().name(modelData.getName()).addString(processName, new String(bpmnBytes)).deploy();
redirectAttributes.addFlashAttribute("message", "部署成功,部署ID=" + deployment.getId());

其中convertToBpmnModel中从json转model,convertToXML是从model转xml,实现源码就不展开分析了
在这里插入图片描述
在上面完成整个model转xml,标注2部分会根据节点的类型完成对应属性的组装
在这里插入图片描述下面这段代码是如果只有xml,如何转为json。

  		// xml转bpmnModel
        InputStream bpmnStream = new ByteArrayInputStream(((ProcessDefinitionEntity) definition).getBytes());// 获取bpmn2.0规范的xml
        XMLInputFactory xif = XMLInputFactory.newInstance();
        InputStreamReader in = new InputStreamReader(bpmnStream, "UTF-8");
        XMLStreamReader xtr = xif.createXMLStreamReader(in);
        // 然后转为bpmnModel
        BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr);
        // bpmnModel转json
        BpmnJsonConverter converter = new BpmnJsonConverter();
        com.fasterxml.jackson.databind.node.ObjectNode editorJsonNode = converter.convertToJson(bpmnModel);

也可以将前端json直接转换成对象,用于设计器的图形渲染。

com.fasterxml.jackson.databind.node.ObjectNode editorJsonNode = (ObjectNode) new ObjectMapper().readTree(definition.getJsonBytes());
modelNode.put(“model”, editorJsonNode);

版权声明:本文为zpfzly原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。