activiti 通过xml上传 直接部署模型

通过流程xml 直接先发布模型,然后再通过发布模型之后的流程定义获取bpmn model来创建Model.

1、通过xml先发布模型

bash 复制代码
InputStream bpmnStream = multipartFile.getInputStream()
deployment = repositoryService.createDeployment()
                    .addInputStream(multipartFile.getOriginalFilename(), bpmnStream).deploy();
            List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()
                    .deploymentId(deployment.getId()).list();
            String processDefinitionId = list.get(0).getId();
            convertToModel(processDefinitionId);

2. 发布之后 通过流程定义获取bpmn model新建model

注意这里的addModelEditorSource addModelEditorSourceExtra获取。

bash 复制代码
 Model modelData = repositoryService.newModel();
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .processDefinitionId(processDefinitionId).singleResult();
        InputStream bpmnStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(),
                processDefinition.getResourceName());
        XMLInputFactory xif = XMLInputFactory.newInstance();
        InputStreamReader in = new InputStreamReader(bpmnStream, "UTF-8");
        XMLStreamReader xtr = xif.createXMLStreamReader(in);
        BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr);
        BpmnJsonConverter converter = new BpmnJsonConverter();
        com.fasterxml.jackson.databind.node.ObjectNode modelNode = converter.convertToJson(bpmnModel);
        modelData.setKey(processDefinition.getKey());
        modelData.setName(processDefinition.getKey());
        ObjectNode modelObjectNode = objectMapper.createObjectNode();
        modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processDefinition.getResourceName());
        modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);// 版本
        modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION,processDefinition.getResourceName());
        modelData.setMetaInfo(modelObjectNode.toString());
        repositoryService.saveModel(modelData);
        DefaultProcessDiagramGenerator generator = new DefaultProcessDiagramGenerator();
        generator.generateDiagram(bpmnModel,  new ArrayList<>());
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        IoUtil.copy(bpmnStream, bos);
        byte[] bytes = bos.toByteArray();
        repositoryService.addModelEditorSource(modelData.getId(), modelNode.toString().getBytes("utf-8"));
        repositoryService.addModelEditorSourceExtra(
                modelData.getId(), bytes);
        deploy(modelData.getId());
相关推荐
执明wa3 天前
Android RecyclerView 多类型, 多种 Item
android·xml·开发语言·设计模式·android studio
wl85113 天前
SAP CPI 教程004 如何通过groovy修改XML节点属性值
xml
码匠许师傅5 天前
【C++三方组件】TinyXML2:两个文件的极简 XML 解析器
xml·c++
yuzhiboyouye6 天前
my-batisPlus什么时候用xml什么时候用mapper自带的方法,这两种写法专业一点叫什么,什么场景分别使用
xml
筝筝ba7 天前
如何跳过FFDC
xml·linux·运维·服务器·网络
yuzhiboyouye8 天前
那xml对应的sql语法,列举一下
xml·数据库·sql
筝筝ba12 天前
OpenBMC 自动化测试中的多进程陷阱:从 Execute Process 返回异常到 output.xml 损坏问题分析
xml·linux·运维·服务器·网络
spencer_tseng17 天前
[j2cache ehcache.xml]/tmp/.ehcache-diskstore.lock (Permission denied)
xml·linux·python·ehcache·[j2cache
DevOpenClub18 天前
PDF 多格式解析如何避免混用输出:TEXT、HTML、XML 与 TAG 数据契约
xml·前端·数据库·pdf·html
Java小白笔记18 天前
MyBatis XML Mapper 标签与 CRUD 原理实战
xml·数据库·mybatis