程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Fire Workflow源碼分析——(基本組成)(5)

Fire Workflow源碼分析——(基本組成)(5)

編輯:關於JAVA

最近一大堆亂七八糟的事情,今天把 org.fireflow.model.io這個包給介紹完,那麼Fire Workflow的 Model項目算是完成了。

主要分兩大塊:序列化和解析。

FPDLNames:這個類定義了FPDL的元素和規范。包括命名空間裡面的基本元素,本類決定流程文件的格 式和規范,由於元素太多,這裡不一一展示了。FPDL基本是對XPDL的擴展,詳細內容可以參見 http://www.fireflow.org/viewthread.php?tid=68&extra=page%3D1。

IFPDLSerializer: FPDL序列化器。將WorkflowProcess對象序列化到一個輸出流。

Dom4JFPDLSerializer: 實現IFPDLSerializer接口。用Dom4J實現。

DEFAULT_XPDL_VERSION和DEFAULT_VENDOR分別表示默認版本和提供者,目前發現沒有什麼用……

對於實現的Serializer(),源代碼如下:

1public void serialize(WorkflowProcess workflowProcess, OutputStream out)
  2            throws IOException, FPDLSerializerException {
  3//首先調用workflowProcessToDom()方法。此方法將流程文件解析,並返回一個Dom文檔。
  4        Document document = workflowProcessToDom(workflowProcess);
  5
  6        OutputFormat format = new OutputFormat("    ", true);
  7        format.setEncoding("UTF-8");
  8//調用XMLWriter()方法,將文檔寫入到輸入流
  9        XMLWriter writer = new XMLWriter(out, format);
10
11        writer.write(document);
12        out.flush();
13    }
14

workflowProcessToXMLString():將流程文件輸出到一個String。

其他的Write方法都是在XMLWriter()中使用的,分別處理FPDL流程文件中的不同元素。

JAXP_FPDL_Serializer: 實現IFPDLSerializer接口。用JAXP實現,功能和前者完全一致。

IFPDLParser: FPDL解析器,將一個xml格式的fpdl流程定義文件解析成WorkflowProcess對象。

Dom4JFPDLParser: 實現IFPDLParser接口,用Dom4J實現。

parse()的代碼如下:

1public WorkflowProcess parse(InputStream in) throws IOException,
  2            FPDLParserException {
  3        try {
  4            SAXReader reader = new SAXReader(new DocumentFactory ());
  5            reader.setEntityResolver(new EntityResolver() {
  6//實現EntityResolver()接口
  7                String emptyDtd = "";
  8                ByteArrayInputStream bytels = new  ByteArrayInputStream(emptyDtd.getBytes());
  9
10                public InputSource resolveEntity(String publicId,
11                        String systemId) throws SAXException,  IOException {
12                    return new InputSource(bytels);
13                }
14            });
15    //讀入流程文件
16            Document document = reader.read(in);
17    //調用parse(Document)方法進行解析,裡面是一堆xml文件解析,不再詳述,其中//調用 了各種load方法,而load方法中又調用了各自的create方法。
18            WorkflowProcess wp = parse(document);//解析
19            return wp;
20        } catch (DocumentException e) {
21            e.printStackTrace();
22            throw new FPDLParserException("Error parsing document.",  e);
23        } finally {
24        }
25    }
26

JAXP_FPDL_Parser: 實現IFPDLParser接口,用JAXP實現。不詳述。

DateUtilities: 關於識別各種日期格式的類。

dateUtilities:這裡用了單件模式,調用getInstance()來獲得對象實例。

formats:存儲各種日期格式,格式有:

"yyyy-MM-dd'T'HH:mm:ss'Z'"
     "yyyy-MM-dd'T'HH:mm:ssZ"
     "yyyy-MM-dd'T'HH:mm:ssz"
// XPDL examples format
    "MM/dd/yyyy HH:mm:ss a"
     // alternative formats
"yyyy-MM-dd HH:mm:ss"

構造函數DateUtilities()調用了resetFormats()來重置formats。

parse()方法將字符串轉化為日期格式。

MySigleton4DocumentFactory: 是對org.dom4j.util.SingletonStrategy接口的簡單實現,返回一個 DocumentFactory,配合單件用的。

FPDLSerializerException: 繼承了Exception類,四個重載的構造函數調用的都是父類的方法。

FPDLParserException: 同FPDLSerializerException。

Util4Serializer: 為序列化流程提供基本的元素操作。用Dom4J實現。

Util4JAXPSerializer: 同Util4Serializer,用JAXP實現。

Util4Parser: 為流程文件的解析提供基本的元素操作,用Dom4J實現。

Util4JAXPParser: 同Util4Parser,用JAXP實現。

下次開始講Fire Workflow的另一個項目文件FireflowEngine。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved