下面是一个赛跑的小流程。这里我已经把流程持久化到数据库中。
为什么第一种方法不行呢?
代码如下:
类都实现ActionHandler接口:
方法都类似RunAction类。如下:
RunAction: public void execute(ExecutionContext executionContext) throws Exception {System.out.println("开始了...");}
MatchAction:{System.out.println("比赛中...");
PauseAction:System.out.println("受伤了...");
EndAction:System.out.println("比赛结束!");
Test1类:
ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("E:\\workspace\\articleaudit\\WebRoot\\WEB-INF\\test1\\processdefinition.xml");
ProcessInstance ProcessInstance = new ProcessInstance(processDefinition);
Token token = ProcessInstance.getRootToken();
System.out.println(token.getNode().getName());
token.signal("tr1");
System.out.println(token.getNode().getName());
token.signal();
System.out.println(token.getNode().getName());
程序运行到第1句就异常了,下面是所有异常信息:
16:32:21,093 INFO JbpmConfiguration:277 - using jbpm configuration resource 'jbpm.cfg.xml'
16:32:21,453 ERROR JpdlXmlReader:158 - couldn't parse process definition
org.dom4j.DocumentException: null Nested exception: null
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.jbpm.jpdl.xml.JpdlParser.parse(JpdlParser.java:57)
at org.jbpm.jpdl.xml.JpdlXmlReader.readProcessDefinition(JpdlXmlReader.java:138)
at org.jbpm.graph.def.ProcessDefinition.parseXmlInputStream(ProcessDefinition.java:172)
at org.jbpm.graph.def.ProcessDefinition.parseXmlResource(ProcessDefinition.java:153)
at test1.struts.Test1.main(Test1.java:11)
Nested exception:
java.net.MalformedURLException
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.jbpm.jpdl.xml.JpdlParser.parse(JpdlParser.java:57)
at org.jbpm.jpdl.xml.JpdlXmlReader.readProcessDefinition(JpdlXmlReader.java:138)
at org.jbpm.graph.def.ProcessDefinition.parseXmlInputStream(ProcessDefinition.java:172)
at org.jbpm.graph.def.ProcessDefinition.parseXmlResource(ProcessDefinition.java:153)
at test1.struts.Test1.main(Test1.java:11)
Exception in thread "main" org.jbpm.jpdl.JpdlException: [[ERROR] couldn't parse process definition]
at org.jbpm.jpdl.xml.JpdlXmlReader.readProcessDefinition(JpdlXmlReader.java:163)
at org.jbpm.graph.def.ProcessDefinition.parseXmlInputStream(ProcessDefinition.java:172)
at org.jbpm.graph.def.ProcessDefinition.parseXmlResource(ProcessDefinition.java:153)
at test1.struts.Test1.main(Test1.java:11)
****************************************************************
但当我把第一句改为直接写的方式:
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("" +
"<process-definition xmlns='urn:jbpm.org:jpdl-3.1' name='test1'>" +
"<start-state name=\"开始\">" +
"<event type=\"node-leave\">" +
"<action name=\"action1\"></action></event>" +
"<transition name=\"tr1\" to=\"赛跑中\"></transition>" +
"<transition name=\"tr2\" to=\"受伤中\"></transition>" +
"</start-state>" +
"<state name=\"赛跑中\">" +
"<event type=\"node-enter\">" +
"<action name=\"赛跑\" class=\"test1.struts.MatchAction\"></action>" +
"</event>" +
"<transition name=\"结束\" to=\"比赛结束\"></transition></state>" +
"<state name=\"受伤中\">" +
"<event type=\"node-enter\">" +
"<action name=\"受伤\" class=\"test1.struts.PauseAction\"></action>" +
"</event>" +
"<transition name=\"结束\" to=\"比赛结束\"></transition></state>" +
"<end-state name=\"比赛结束\">" +
"<event type=\"node-enter\">" +
" <action name=\"结束\" class=\"test1.struts.EndAction\"></action></event>" +
"</end-state>" +
"</process-definition>");
正常输出:
开始
比赛中...
赛跑中
比赛结束!
比赛结束
为什么前一方式不行呢?
帮助文档上就这么一句:
引用
15.2.2. 解析xml文件
其他情况, 你可能想手写 processdefinition.xml 文件然后打包进zip文件通过ant script.这钟情况下你可以选择 JpdlXmlReader
...
static ProcessDefinition auctionProcess =
ProcessDefinition.parseXmlResource("org/jbpm/tdd/auction.xml");
...
分享到:
相关推荐
JBPM工作流实战_流程定义文件的上传处理视频
eclipse3.4解压版带jbpm流程定义插件,很简单,只需解压即可使用
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
jbpm流程
JBPM创建数据库,流程定义以及发布学习笔记
jbpm 基本使用方法,附带sqlserver数据库,附加数据库后可直接运行
jbpm工作流程jbpm工作流程jbpm工作流程jbpm工作流程jbpm工作流程
jbpm4.4流程图
JBPM Web流程设计器,用js+extjs画的jbpm流程设计器,与eclipse插件类似,可以进行自定义。
jbpm4流程提交及执行完整代码,把每个文件放到对应的位置即可。 生成流程跟踪图的方法见: http://download.csdn.net/source/2905937
jBPM 视频教程 管理流程定义 jBPM 视频教程 管理流程定义
jbpm4 jbpl流程定义语言,详细介绍了jbpl语言的各种定义
JBPM流程引擎设计 工作流资料JBPM流程引擎设计 工作流资料JBPM流程引擎设计 工作流资料JBPM流程引擎设计 工作流资料JBPM流程引擎设计 工作流资料
jbpm业务流程设计demo 基于jbpm设计的业务流程
文档详细介绍了如何利用JBPM开发流程应用,从框架构造到节点处理。
1.10 JBPM_MODULEDEFINITION:流程模块定义表 8 1.11JBPM_EXCEPTIONHANDLER:流程异常处理器表 8 1.12 JBPM_DECISIONCONDITION:DECISION节点判断条件表 9 1.13 JBPM_ SWINLANE:DECISION节点判断条件表 10 2 流程...
1、JBPM5流程图设计规则。 2、bpmn2.0。 3、节点使用规则 4、下载后重命名为名称.doc即可打开
持久执行模式是指流程定义、 流程执行以及流程历史都保存在关系数据库中, 这是jBPM实际通常使用的方式。 这个用户指南介绍了jBPM中支持的使用方式。 开发指南介绍了更多的、高级的、定制的、 没有被支持的选项。
JBPM4 PVM的流程定义模型与过程调度
jbmp入门教程,jBPM流程定义语言,业务日历,流程建模