SOAP消息的非递归先序解析算法研究
2009-02-01万洪莉
万洪莉
摘要:本文介绍了通过将DOM树转换成二叉树,对二叉树进行非递归先序遍历的方法,提高解析SOAP消息的效率。并得出了“将二叉树的非递归先序解析方法应用到SOAP消息的解析过程,可以优化对web service的访问”的结论。
关键词:SOAP;XML;解析算法
1 引言
Web service是SOA架构中开发业务组件的重要技术。SOAP是访问web service的重要协议。目前已有一些研究基于SOAP协议构建松耦合的web应用[1,2],但对SOAP消息的解析算法还有待深入研究。本文利用二叉树的非递归先序遍历算法,对SOAP消息进行解析,从而提高对web service的访问效率。
2 SOAP消息类型
SOAP的全称是简单对象访问协议,在现有的研究文献中,研究者在分析基于SOAP的Web服务结构以及SOAP消息构成后,利用XML的名称空间给SOAP添加了数字签名,从而对web服务进行了安全扩展[3]。在文献[4]中,还提出了一种基于SOAP的DoS攻击防范方案。
一组基本的SOAP请求消息sp是一个二元组,sp=(sh,sb),其中,
(1)sh是SOAP消息头部分,用于向SOAP消息中以可扩展方式添加信息。
(2)sb是SOAP消息的body部分,sb={m1,m2,……,mn},是该SOAP消息中所请求的方法的集合。
m是一个三元组,m=(n,ipm,opm),其中:
(1)n是SOAP消息请求方法的名称。
(2)ipm是请求方法的输入参数集合,ipm={ip1,ip2,……ipn}。
(3)opm是请求方法的输出结果集合,opm={op1,op2,……opn}。
下列代码是一组典型的SOAP请求消息:
xml version="1.0" encoding="utf-8" ?
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
在这组SOAP请求消息中,SOAP 请求的详细信息包含在
元素中。上面的示例请求了GetCustomerInfo方法。在本文的第3节中,以这段SOAP消息代码为例,利用DOM对SOAP进行文档对象解析的原理。
3 文档对象模型原理
目前对XML文档的解析基于两个原理:基于事件流的解析(SAX)[5]和基于对象树的解析(DOM)[6]。使用DOM的相关类和接口可以将SOAP消息转换成DOM树。这种转换后的DOM树是一种分层对象模型,具有唯一的根节点和若干子节点。第2节中的SOAP请求消息经过DOM转换,可以得到唯一的DOM树,结构如图1:
4 SOAP消息的二叉树转换
通过第3节的分析研究可知,DOM树符合数据结构中对树的定义,但非二叉树。为应用算法提高对SOAP消息的访问效率,需要将SOAP消息对应的DOM树转换成二叉树。算法是:
Input:sp
Output:spBTree
1. spBTree=null;
2. for all(n∈sp.sb){
if(n.hasSiblingNodes){
n.LastChildNodes=sp.nextSiblingNodes;
}
}
3. for all(n∈sp.sb){
if(!sb.firstChildNodes){
sb.ChildNode=null;
}
}
4.return spBTree
5 利用非递归先序算法解析SOAP消息
二叉树先序遍历的递归算法通常效率很低,而且有的程序设计语言不支持递归[7]。这时,可以利用堆栈保存操作过程中指针所指向的结点位置,使得遍历完左子树的叶子结点时能够返回到上一层,然后再访问其右子树。文献[7]中阐述了二叉树的非递归先序遍历算法,经验证,可以应用到由DOM树转换成的二叉树上,完成对SOAP消息的解析过程。
6 结论
SOAP协议是SOA体系中的重要协议。访问web service必须遵守此协议。由于二叉树的简便特性,许多算法都是基于二叉树。本文成功的进行了DOM树到二叉树的转换。使得针对二叉树的非递归先序遍历算法能够在解析SOAP协议时的到应用,提高了访问web service,处理SOAP消息的效率。
参考文献
[1]杨磊,王建斌,马光思,程永阳.基于SOAP协议和Ajax技术构建Web应用[J].计算机技术与发展.2008,18(1).
[2]翟峰,郝克刚,葛玮.基于SOAP构建Axis上的Web Services[J].计算机应用与软件.2008(1).
[3]樊佑磊,张亚珍.基于SOAP安全扩展的Web服务研究[J].网络通讯及安全.2008(1).
[4]邓凯,裴浩.基于SOAP的DoS攻击防范方案[J].计算机工程与设计.2008,29(3).
[5]王芳,李正凡.用SAX解析XML文档的实现方法[J].华东交通大学学报.2004,21(1).
[6]王建.基于DOM的XML数据访问技术[J].计算机与数字工程.2008,36(2).
[7]盛魁.二叉树的遍历探究与应用.电脑知识与技术[J].2008,3(5).