[轉(zhuǎn)] XPDL parser
轉(zhuǎn)自:http://blog.csdn.net/windsails/archive/2005/03/03/309851.aspx
XPDL作為一種由WfMC提出來的比較規(guī)范的工作流描述語言,很好的解決了工作流的定義的問題,也就是WfMC提出的工作流參考模
型中的接口一,此外,對于工作流的核心而言,如何解釋XPDL也是關(guān)鍵。
JaWE是目前公認(rèn)的比較好的基于Java編寫的圖形化工作流定義工具,它使用的描述語言正是XPDL。如果你自己想做個簡單的工作
流處理引擎,了解和解釋XPDL是關(guān)鍵的第一步,既然有了JaWE這個這么好的工具,而且它還是開源的,那么為什么不也利用它的
函數(shù)庫來解釋XPDL呢?
JaWE是一個開源的項(xiàng)目,最新的版本可以在http://jawe.objectweb.org下載。
如果你只是利用它作為XPDL的解釋器的話,只需要以下的Java庫文件:
jawexpdl.jar
它同時需要幾個運(yùn)行庫:
xercesImpl.jar
xml-apis.jar
jawelan.jar (如果不涉及中文的描述,可以不要)
另外如果想直接用JaWE的一些現(xiàn)成的圖形化工具庫,則需要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中都定義成了對象,可直接使用,十分方便。
posted on 2008-03-24 19:43 hijackwust 閱讀(1414) 評論(0) 編輯 收藏