返回首页
当前位置: 主页 > 航空资料 > 计算机 >

XML高级编程上(151)

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin 点击:
  
的记录集,该函数涉及到支持文档,篇幅很长。这里只展示该例程的一部分。
被传送的参数是将要加入的节点,包括新节点的名字和将转换成节点的实际条目。如果节
点名字为空,那么使用被传送的条目类型作为元素名字:
程序清单11 - 111
下面是创建包含数据的节点。注意如果我们有一个变量数组,那么我们A r r a y o f语法:
程序清单11 - 11 2
依照数据类型,正确设置新的元素:
程序清单11 - 11 3
将一个记录集作为一个参数的能力使之成为一个功能较强的函数。注意对于每一个领域都
第11章服服务器到服务器使用485 下载
递归调用a d d C h i l d(),于是得到了条目的正确数据类型。它的另一项功能是,通过它也能处理
嵌套的记录集:
程序清单11 - 11 4
最后,不匹配的只有参数数组,或不可识别的形式。如果是一个数组,我们将把它看作成
一个变量数组:
程序清单11 - 11 5
有效载荷功能的最后部分是低层次的例程,它对一个特定数据类型设置了一个节点:
程序清单11 - 11 6
486使用XML 高级编程
下载
为了运用Microsoft XML DOM中的X M L - D M工具,我在n o d e Ty p e d Va l u e属性内放了一个值,
同时也设置了x s d : t y p e值作为X M L模式第二部分的请求。我猜想,当M i c r o s o f t发布下一个X M L
D O M版本时,d t : d t语法将被x s d : t y p e语法所取代。在这种语法里,函数的第一行可以不要。
(8) 有效载荷的提交
已经阐明了如何建立一个有效载荷,现在回到所关注的远程调用上来。为了不用来回翻看,
现把代码写在下面:
程序清单11 - 11 7
如果成功调用了有效载荷,那现在将把有效载荷发送到远程服务器上。记住我们在S O A P
的增强功能叙述里讨论过,必须在进行M - P O S T之前先试一个P O S T。下面是代码的开始部
分:
程序清单11 - 11 8
如果你正在写自己的S O A P模块,那么记住S O A P标准列出了一些必须被处理的H T T P返回代
码。例如,重定向代码3 0 2必须被实现。处理H T T P请求的一些组件将为你做这些工作,但是对
它进行一下检查是有必要的。
在执行了一个P O S T后(或M - P O S T),可以检查返回值。如果收到2 0 0,那么至少知道H T T P
处理了调用—尽管在S O A P的层次上仍可能有一些错误。除了2 0 0外的任何值都表示出错,最
有可能的错误代码是5 0 1—没有执行或者5 1 0—没有扩展:
第11章服服务器到服务器使用487 下载
程序清单11 - 11 9
实现P O S T或M - P O S T的函数如下:
程序清单11 - 1 2 0
如果被实现的P O S T类型是强制性的—一个M - P O S T—那么要保证出现所有的报头。
需要去做的任务仅剩下检查返回的数据,这是在S O A P函数的顶层。C h e c k P a y l o a d()函数
用于检查一个有效载荷,来确定在报头和有效载荷中的方法名是否一致,并确定命名空间是正
确的等等。这个函数在客户端也用于检查从一个调用返回的有效载荷,而在服务器端用于检查
激活一个调用的有效载荷。该函数返回在S O A P里的重要节点,或者在D O M参数里的一个错误
结构:
程序清单11 - 1 2 1
注意,选择开始于根节点,这是因为在这里要处理两种情况:一是当实际的根节点是一个
488使用XML 高级编程
下载
< S O A P : F a u l t >元素,如果远程服务器返回一个< S O A P : F a u l t >和C h e c k P a y l o a d(),就是这种情形。
二是如果在返回的有效载荷里有错误,在这处情况下,将从C h e c k P a y l o a d()得到一个错误的
有效载荷。此时,根元素将是< S O A P : E n v e l o p e >。如果发现了一个< S O A P : F a u l t >元素,那么将
找出错误代码和另外的信息,并把它显示出来:
程序清单11 - 1 2 2
如果一切O K,那么将使用X M LTo Va l u e()把返回的X M L转变成普通变量—a d d C h i l d()
函数的反转功能是很有效的:
程序清单11 - 1 2 3
(9) 服务器模块
现在我们开始构建服务器端。第一个要做是创建一个XML DOM对象,并用提交已给我们发
送的数据来装载它:
程序清单11 - 1 2 4
下一个得到的是调用者使用的方法。如果它是一个M - P O S T,那么我们需要得到M a n报头,
它包含了命名空间用以区别强制性报头,如果在命名空间两边有引用的话,那么要把它们删除:
程序清单11 - 1 2 5
我们将检查命名空间是否与在S O A P标准里的定义相同,但在此时,什么也没有做:
第11章服服务器到服务器使用489 下载
程序清单11 - 1 2 6
实际的命名空间标识符—与X M L里的前缀相似—以“n s =”打头,一旦其被重新得到,
就能创建报头名字,进而我们能够得到方法的名字:
程序清单11 - 1 2 7
有了方法的名字,我们需要将命名空间分开;因为需要将它与有效载荷的命名空间值核对:
程序清单11 - 1 2 8
下面这个片断并不是S O A P标准的一部分,但是用于检测目的的有用的代码片断。当方法是
E C H O()并且命名空间是S O A P时,它所做的就是返给用户一个实际传送的内容:
程序清单11 - 1 2 9
在确定执行需要的函数之前,需要检查有效载荷的一致性:
程序清单11 - 1 3 0
490使用XML 高级编程
下载
如果有效载荷O K,在传送它们到回调例程之前, o X M L将包含参数节点,并把它们转换成
变量:
程序清单11 - 1 3 1
如果调用成功执行,那么将创建一个响应有效载荷,并且它将被返回到调用者。另一方面,
如果有错误,那么创建一个错误有效包:
程序清单11 - 1 3 2
最后将被执行的是一系列的实际的例程。回忆一下我们已经创建的调用:
程序清单11 - 1 3 3
现在,需要创建m y S e r v e r. a s p模块, S O A P服务器模块需要包含进来以使我们有权使用所有
 
中国航空网 www.aero.cn
民航翻译 www.aviation.cn
本文链接地址:XML高级编程上(151)
 
------分隔线----------------------------