[转] XPDL parser

[转] XPDL parser

转自: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中都定义成了对象,可直接使用,十分方便。

你可能感兴趣的:([转] XPDL parser)