异常描述:
同一个activiti数据源,我一个项目A(springboot 3.2.10 + activiti 7.1.0.M6)启动不会报错,但是另一个项目B(springboot 2.7.12 + activiti 7.1.0.M6)启动却报以下异常:
Failed to start bean 'processDeployedEventProducer'; nested exception is org.activiti.bpmn.exceptions.XMLException: Error reading XML
初步排查:
问过AI发现该检查的都检查了,还是报错,所以怀疑起是activiti加载的XML字节流有问题,因此看错误消息,进入错误的行,进行断点调试,发现异常出现在以下这段代码中org.activiti.engine.impl.bpmn.deployer.ParsedDeploymentBuilder.build()方法中

猜测是因为其字节流是低版本activiti发布 或 发布的源文件不符合规范 或 文件损坏导致。
解决方案:
方案1:将排查到异常的流程文件在表act_re_procdef中删除,然后将原本的流程文件后缀格式改为.bpmn再进行发布流程,如果删除act_re_procdef记录时出现外键关联异常,可按方案二进行。
方案2:
首先,将原本的流程文件后缀格式改为.bpmn再进行发布流程,此时会在表act_ge_bytearray生成一条记录,在第三步时会用到;
第二步,在表act_re_procdef找到异常的记录,本案例异常的记录RESOURCE_NAME_=process/bpmn20.xml,将之改为process/bpmn20.bpmn;
第三步,偷梁换柱:在表act_ge_bytearray中找到有问题的DEPLOYMENT_ID_那条记录,把字段ID_、DEPLOYMENT_ID_ 赋值到第一步生成的那条记录中,旧纪录删除。
重启springboot项目,并调试发现已启用新的流程文件及其字节流,启动成功。