当前位置: 首页 > news >正文

SOAP协议初级指南(八)

   独立元素

  在SOAP中,一个独立元素表示至少被一个多引用存取元素引用的类型的实例。所有的独立元素用soap:id属性作标记,而且这个属性的值在整个SOAP envelope中必须是唯一的。独立的元素被编码就好象是它们被一个存取元素打包,这个存取元素的标记名是实例的名域限制的类型名。在上面的例子中,实例的名域限制的类型名是t:adjustment。

  SOAP限制独立元素能被编码的场所。SOAP定义了一个能适用于任何元素的属性:(soap:Package)。这个属性被用于控制独立元素能在哪里被解码。SOAP序列化规则指出独立元素必须编码为soap:Header元素或soap:Body元素的直接子元素,或者是任何其它标记为soap:Package=‘true’的元素。通过把一个元素注释为包,你能保证编码那个实例的XML元素是完全自包含的,并且在这个包以外没有任何引用到这个元素的多引用存取元素。

  假设transfer 类对应于一个方法请求。如果transfer类型不是一个包,被to和from存取元素引用的独立元素将作为soap:Body元素的直接子元素出现,如图10所示。如果transfer类型是一个合法的SOAP包类型,编码可能象图11所示。注意,因为transfer元素是一个包,所有多引用存取器元素都引用被包含的元素。这使得把transfer元素看成一个能从它的父辈元素中分离出的独立的XML代码段变得更为容易。

  多引用存取元素总是引用独立元素的模型是有一个例外的。SOAP允许包含字符串和二进值数据的存取元素是多引用存取元素的目标。这意味着下面的代码是合法的:

<t:mytype>
<field1 soap:href="#id1" />
<field2 soap:id="id1">Hello, SOAP</field2>
</t:mytype>

  尽管事实是存取元素2有一个soap:id属性,它实际上是一个存取元素而不是独立元素。

   SOAP数组

  数组被编码为组合类型的一个特殊的例子。在SOAP中,一个数组必须有一个秩(维数)和一个容量。一个数组被编码为一个组合类型,其中每一个数组元素被编码为一个子元素,这个子元素的名字是元素的名域限制的类型名。

  假设有下面的COM IDL类型定义:

struct POINTLIST {
long cElems;
[size_is(cElems)] POINT points[];
};
 
  这个类型的实例将被序列化为:

<t:POINTLIST xmlns:t=‘uri for POINTLIST‘>
<cElems>3</cElems>
<points xsd:type=‘t:POINT[3]‘ >
<POINT>lt;x>3</x>lt;y>4</y>lt;/POINT>
<POINT>lt;x>7</x>lt;y>5</y>lt;/POINT>
<POINT>lt;x>1</x>lt;y>9</y>lt;/POINT>
</points>
<t:POINTLIST>

  如果points域被标记为[ptr]属性,这个编码将用一个多引用存取元素,如下所示:
 
<t:POINTLIST xmlns:t=‘uri for POINTLIST‘>
<cElems>3</cElems>
<points soap:href="#x9" />
</t:POINTLIST>
<t:ArrayOfPOINT soap:id=‘x9‘ xsd:type=‘t:POINT[3]‘>
<POINT>lt;x>3</x>lt;y>4</y>lt;/POINT>
<POINT>lt;x>7</x>lt;y>5</y>lt;/POINT>
<POINT>lt;x>1</x>lt;y>9</y>lt;/POINT>
</t:ArrayOfPOINT>

  当把一个数组编码为一个独立元素时,标记名是带前缀ArrayOf的类型名。

  象NDR和CDR一样,SOAP支持部分转换的数组。如果子元素的数量少于所声明的容量,这些元素被假设正从数组的末尾丢失。这能够通过在正包含的数组元素上使用soap:offset属性来被忽略。

<t:ArrayOfPOINT soap:id=‘x9‘ xsd:type=‘t:POINT[5]‘
soap:offset=‘[1]‘>
<POINT>lt;x>1</x>lt;y>9</y>lt;/POINT>
</t:ArrayOfPOINT>

  soap:offset属性表示出现在数组中的第一个元素的索引。在上面的例子中,元素0,2到4都是不被转换的。SOAP也支持稀疏数组,这是通过使用soap:position属性来把每个元素用它的绝对索引来注释而实现的:

<t:ArrayOfPOINT soap:id=‘x9‘ xsd:type=‘t:POINT[9]‘>
<POINT soap:position=‘[3]‘>lt;x>3</x>lt;y>4</y>lt;/POINT>
<POINT soap:position=‘[7]‘>lt;x>4</x>lt;y>5</y>lt;/POINT>
</t:ArrayOfPOINT>

  在这个例子中,元素0到2,4到6,以及8到9都不是被转换的。

  请注意,在SOAP中数组的精确语法在这篇文章写作时还在被重新审查以调整到即将推出的W3C XML Schema规范中。要不断了解SOAP规范的最新版本来获得更多的细节。

相关文章:

  • python 守护程序检测进程是否存在_python定时检查启动某个exe程序(守护进程)
  • SOAP协议初级指南(九)
  • python创建工作簿_使用工作表名称作为键从python中的excel工作簿创建词典
  • 参加developerWorks活动
  • mysql8.0.11 安装失败_mysql8.0.11安装遇到问题及解决方法。
  • ActiveBPEL引擎(4.0)启动步骤分析(ActiveBPEL Engine Startup Steps)
  • 3COM SS3 4400交换机VLAN功能设置
  • python集合的操作符_深入解析Python中的集合类型操作符
  • 一句话解释python的装饰器_如何理解python的描述器和装饰器?
  • 认识COS
  • 康佳lc32es62没声音_康佳LC32ES62有伴音,无图像无字符
  • 解析.Net框架下的XML编程技术
  • java as_Java对象转成AS的VO对象 | 学步园
  • .net2005怎么读string形的xml,不是xml文件。
  • java调用存储过程 oracle_Java调用Oracle存储过程详解
  • 0基础学习移动端适配
  • Android系统模拟器绘制实现概述
  • Java知识点总结(JavaIO-打印流)
  • orm2 中文文档 3.1 模型属性
  • Spring声明式事务管理之一:五大属性分析
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 分享几个不错的工具
  • 聊聊flink的BlobWriter
  • 扑朔迷离的属性和特性【彻底弄清】
  • 前端技术周刊 2019-01-14:客户端存储
  • 微服务入门【系列视频课程】
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 延迟脚本的方式
  • hi-nginx-1.3.4编译安装
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (3)STL算法之搜索
  • (C语言)共用体union的用法举例
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (多级缓存)多级缓存
  • (算法二)滑动窗口
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • ../depcomp: line 571: exec: g++: not found
  • .describe() python_Python-Win32com-Excel
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET框架
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .Net中的设计模式——Factory Method模式
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用