转自:http://blog.csdn.net/windsails/archive/2005/03/03/309851.aspx
XPDL作为一种由WfMC提出来的比较规范的工作流描述语言,很好的解决了工作流的定义的问题,也就是WfMC提出的工作流参考模
型中的接口一,此外,对于工作流的核心而言,如何解释XPDL也是关键。
JaWE是目前公认的比较好的基于Java编写的图形化工作流定义工具,它使用的描述语言正是XPDL。如果你自己想做个简单的工作
流处理引擎,了解和解释XPDL是关键的第一步,既然有了JaWE这个这么好的工具,而且它还是开源的,那么为什么不也利用它的
函数库来解释XPDL呢?
JaWE是一个开源的项目,最新的版本可以在http://jawe.objectweb.org下载。
如果你只是利用它作为XPDL的解释器的话,只需要以下的Java库文件:
jawexpdl.jar
它同时需要几个运行库:
xercesImpl.jar
xml-apis.jar
jawelan.jar (如果不涉及中文的描述,可以不要)
另外如果想直接用JaWE的一些现成的图形化工具库,则需要jawe.jar
下面是个简单的代码例子;
package org.aas.readXPDL;
import org.enhydra.jawe.xml.*;
import org.enhydra.jawe.xml.elements.*;
import java.util.*;
/**
* @author Jonathan
* @version v0.1
* Main: TODO To declare the description of this type
*/
public class Main {
public static void main(String[] args) {
XMLInterfaceForJDK13 xml = new XMLInterfaceForJDK13();
String strFilename = "XXX.xpdl";
int i = 0;
XMLElement subElement = null;
if (xml.doesPackageFileExists(strFilename))
{
System.out.println("OK!!!");
org.enhydra.jawe.xml.elements.Package pkg = xml.openPackage(strFilename,false);
// pkg = xml.getPackageByFilename(strFilename);
// System.out.println("Version:" + pkg.getVersion());
System.out.println("ElementCount:" + pkg.getElementsCount());
System.out.println("Is made by JaWE:" + pkg.isMadeByJaWE());
System.out.println("Package to string:" + pkg.toString());
System.out.println("ID:" + xml.getIDFromFile(strFilename));
System.out.println("Current Version:" + pkg.getCurrentVersion());
System.out.println("Package ID:" + pkg.get("Id"));
System.out.println("package Name:" + pkg.get("Name"));
// 读取头信息
System.out.println(" --- 头信息 ---");
PackageHeader pkgh = (PackageHeader)pkg.get("PackageHeader");
System.out.println("Header ElementCount:" + pkgh.getElementsCount());
List pkghList = pkgh.getChildElements();
for (i=0;i<pkghList.size();i++)
{
subElement = (XMLElement)pkghList.get(i);
Object value = subElement.toValue();
System.out.println("No." + i + " : " + subElement.toName()
+ "[" + subElement.toLabel() + "] "
+ value);
}
// 获取WorkflowProcesses
WorkflowProcesses wfps = (WorkflowProcesses)pkg.get("WorkflowProcesses");
System.out.println("WorkflowProcesses Number: " + wfps.size());
Collection wfpList = wfps.toCollection();
Iterator itor = wfpList.iterator();
while(itor.hasNext())
{
WorkflowProcess wfp = (WorkflowProcess)itor.next();
System.out.println(wfp.get("Name"));
System.out.println(wfp.get("Id"));
}
xml.closeAllPackages();
}
else
System.out.println("Error when open the file!");
}
}
熟悉XML操作的朋友一定觉得很简单吧?
XPDL的各个元模型元素在JaWE中都定义成了对象,可直接使用,十分方便。