快速业务通道

Fire Workflow源码分析——(基本组成)(5) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

Fire Workflow源码分析——(基本组成)(5)

时间:2011-10-28 博客园 Leshem

最近一大堆乱七八糟的事情,今天把 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实现。

Fire Workflow源码分析——(基本组成)(5)(2)

时间:2011-10-28 博客园 Leshem

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实现,功能和前者完全一致。

Fire Workflow源码分析——(基本组成)(5)(3)

时间:2011-10-28 博客园 Leshem

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

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号