• 热门标签

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

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

创建一个调用有效载荷的函数如下:
程序清单11 - 1 0 3
第11章服服务器到服务器使用481 下载
调用响应函数只需要调用该调用有效载荷函数,使用被改动的方法名字:
程序清单11 - 1 0 4
一个调用的有效载荷相继拥有所有的参数。addChild( )过程在通用模块S O A P. a s p中,用于将
节点加到输出上。addChild( )的第二个参数一般是将被给出节点的名字,但是在本例中,我们把
它空起来以表明我们想用数据类型的名字作为节点名字( a d dChild( )函数将在后面讨论)。
注意我们使每一个参数“匿名”便于使用,在标准里并不需要这样做。下面这个从标准规
范里得来的例子展示了将调用编码的另一种方法,这次使用了被命名的参数:
程序清单11 - 1 0 5
但是,使用一个简单的A S P实现,例如我们正在建造的,比起编码参数名称和其值要麻烦得
多(定义和命名接口的系统正向前发展,下面将要讨论)。因此使用数据类型来命名参数是简洁
明了的。在我们的系统里,如果有一个包含三个元素的数组,并且有与刚才给出的例子里相同
的值将得到:
程序清单11 - 1 0 6
(5) 方法参数
在S O A P规范叙述了参数可以“输入”和“输入/输出”,这就意味着它们能够赋值,并做
为信息被传送到一个一般过程,该值也可以用于保存函数的结果。但是,在S O A P里没有把一个
函数定义成这样的模式—哪些参数用于输入,哪些参数还能返回数据。
这意味着对于一个客户实现,没有办法发现在一个调用过程中哪些参数是需要的,对于服
482使用XML 高级编程
下载
务器来说也没有办法在执行方法前检查传送的参数。当然,你能够在自己的每个函数里检查发
现是否接收到了所期望的参数。但是理想化的S O A P服务器层应该把这些对你隐藏起来。
尽管这种检查是非常有用的,但这并不是S O A P一个部分。原因有二,其一是它将使X M L -
R P C爱好者们感到苦恼,你将不再能够快速地将客户或服务器模块发布到任何平台,现在将不
得不检查参数的名字和那些参数的数据类型。但是如果客户和服务器模块均在你的控制之下,
那么就可不必如此费心,而可以保证这些参数是正确的。
第二个理由是已经有一些初始化的工作存在指定了一个函数的“足迹”。它们中的一些来自
于软件设计领域。那里,对象和它们的方法可以自动地被多种工具所定义。另外一些是新的,
专用于如S O A P和X M L - P R C的以X M L为基础的协议。一个这样的初始化工作是C o m p o n e n t
Description Language ( 组件描述语言: C D L), 它来自于D e v e l o p M e n t o r, 在h t t p:
/ / w w w. d e v e l o p . c o m / s o a p / c d l . h t m,它允许指定参数的类型以及函数的返回值。
(6) 出错响应
最后的有效载荷类型是针对错误的。如果S O A P层能够检查出错误,那么一个出错响应就被
返回。在各种层次上都有可能发生错误,可能是一个消息包的错误,或者传送的X M L的错误,
或者在有效载荷里方法的名字可能与报头里的不匹配。S O A P本身并不能总是检查出错误,例如,
如果一个错误存在于被传送的X M L中,或者M - P O S T在没有强制性的参数被传送的情况下被使
用,那么直到这个消息包被S O A P处理,错误才被发现;另一方面,如果错误的命名空间被用于
特定的S O A P元素,那么S O A P将能够识别该错误,并进行处理。
S O A P对它能够识别的错误的返回指示如下所示:
程序清单11 - 1 0 7
这个例子来自于S O A P规范本身,仅有的不同在于在< f a u l t c o d e >、< f a u l t s t r i n g >和< r u n c o d e >
开始于一个简单的命名空间前缀。该标准只要插入子元素,往往就省略名字前缀——这里是
< S O A P : F a u l t >—但是使用S O A P前缀并与S O A P有关的一些代码除外。
< f a u l t >结构中几个部分的含义如下:
• <faultcode>错误代码号,如1 0 0代表调用使用了不被支持的S O A P版本。
• <faultstring>是错误的字符串表示,对错误1 0 0它显示“Version Mismatch”(版本不匹配)。
• < r u n c o d e >被用于指示是否—尽管错误被报告—函数被送到了应用程序,值的范围是0、
1和2,分别说明“可能”、“没有”和“有”。
这三个元素是必须的,但是也可能有第四个元素—< d e t a i l >—它包含该应用程序想返回
的任何内容,例如关于为什么调用失败的详细描述。例如,如果被调用的应用程序失败,那么
第11章服服务器到服务器使用483 下载
它将返回S O A P错误4 0 0(错误代码),但是并没有告诉调用者更多;该应用程序就能通过使用这
个参数提供更多的信息:
程序清单11 - 1 0 8
一个出错的有效载荷在如下函数中得到准备:
程序清单11 - 1 0 9
该函数仅需要一个错误代码和一个描述串来创建一个< F a u l t >结构,出错串从代码中创建,
并且运行代码取决于一个全局变量。注意描述串仅在它确实被设置后才能被返回。
当使用所有的有效载荷函数时, a d d C h i l d()被用于在树中创建节点,我们现在转到这个函
数上来。
(7) addChild()
在前面的部分里简要地对a d d c h i l d()进行了说明,在此我们将更加详细地对它进行探讨,
因为它正是S O A P系统的核心。a d d C h i l d()的目的是向一个X M L树加入节点,节点的使用遵守
S O A P标准的数据规则,例如,如果有一个值为7的整数,可能创建如下代码:
484使用XML 高级编程
下载
程序清单11 - 11 0
或:
这个函数是非常灵活的,可进行处理数组等工作,又因为它是递归的,因此它能够处理数
组之间的嵌套和其他的复杂结构,它也能将某些V B对象转化成X M L,例如作为数据库查询结果
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(150)