APP下载

SOAP消息的非递归先序解析算法研究

2009-02-01万洪莉

软件工程 2009年11期

万洪莉

摘要:本文介绍了通过将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">

102009

merry

market

在这组SOAP请求消息中,SOAP 请求的详细信息包含在元素中。上面的示例请求了GetCustomerInfo方法。元素的子元素表示这个被请求方法需要的参数名。是方法返回值。在这个web service的SOAP请求中,不需要输出参数。

在本文的第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).