zoukankan      html  css  js  c++  java
  • SOAP协议初级指南(6)

     

     SOAP数据类型

      在SOAP消息中,每个元素可能是一个SOAP结构元素,一个根元素,一个存取元素或一个独立的元素。在SOAP中,soap:Envelope, soap:Body和 soap:Header 是唯一的三个结构元素。它们的基本关系由下列XML Schema所描述:

    <schema

    targetNamespace=‘urn:schemas-xmlsoap-org:soap.v1‘>

    <element name=‘Envelope‘>

    <type>

    <element name=‘Header‘ type=‘Header‘

    minOccurs=‘0‘ />

    <element name=‘Body‘ type=‘Body‘

    minOccurs=‘1‘ />

    </type>

    </element>

    </schema>

      在SOAP元素的四种类型中,除了结构元素外都被用作表达类型的实例或对一个类型实例的引用。

      根元素是显著的元素,它是soap:Body 或是 soap:Header的直接的子元素。其中soap: Body只有一个根元素,它表达调用、响应或错误对象。这个根元素必须是soap:Body的第一个子元素,它的标记名和域名URI必须与HTTP SOAPMethodName头或在错误消息情况下的soap:Fault相对应。而soap:Header元素有多个根元素,与消息相联系的每个头扩展对应一个。这些根元素必须是soap:Header的直接子元素,它们的标记名和名域URI表示当前存在扩展数据的类型。

      存取元素被用作表达类型的域、属性或数据成员。一个给定类型的域在它的SOAP表达将只有一个存取元素。存取元素的标记名对应于类型的域名。考虑下列Java 类定义:

    package com.bofsoap.IBank;

    public class adjustment {

    public int account ;

    public float amount ;

    }

      在一个SOAP消息中被序列化的实例如下所示:

    <t:adjustment

    xmlns:t=‘urn:develop-com:java:com.bofsoap.IBank‘>

    <account>3514</account>

    <amount>100.0</amount>

    </t:adjustment>

      在这个例子中,存取元素account和amount被称着简单存取元素,因为它们访问对应于在W3C XML Schema规范 (见 http://www.w3.org/TR/XMLSchema-2) 的Part 2中定义的原始数据类型的值。这个规范指定了字符串,数值,日期等数据类型的名字和表达方式以及使用一个新的模式定义中的<datatype>结构来定义新的原始类型的机制。

      对引用简单类型的存取元素,元素值被简单地编码为直接在存取元素下的字符数据,如上所示。对引用组合类型的存取元素(就是那些自身用子存取元素来构造的存取元素),有两个技术来对存取元素进行编码。最简单的方法是把被结构化的值直接嵌入在存取元素下。考虑下面的Java类定义:

    package com.bofsoap.IBank;

    public class transfer {

    public adjustment from;

    public adjustment to;

    }

      如果用嵌入值编码存取元素,在SOAP中一个序列化的transfer对象如下所示:

    <t:transfer

    xmlns:t=‘urn:develop-com:java:com.bofsoap.IBank‘

    <from>

    <account>3514</account>

    <amount>-100.0</amount>

    </from>

    <to>

    <account>3518</account>

    <amount>100.0</amount>

    </to>

    </t:transfer>

      在这种情况下,adjustment对象的值被直接编码在它们的存取元素下。

      在考虑组合存取元素时,需要说明几个问题。先考虑上面的transfer类。类的from和to的域是对象引用,它可能为空。SOAP用XML Schemas的null属性来表示空值或引用。下面例子表示一个序列化的transfer对象,它的from域是空的:

    <t:transfer

    xmlns:t=‘urn:develop-com:java:com.bofsoap.IBank‘

    xmlns:xsd=‘http://www.w3.org/1999/XMLSchema/instance

    <from xsd:null=‘true‘ />

    <to>

    <account>3518</account>

    <amount>100.0</amount>

    </to>

    </t:transfer>

      在不存在的情况下, xsd:null属性的隐含值是false。给定元素的能否为空的属性是由XML Schema定义来控制的。例如下列XML Schema将只允许from存取元素为空:

    <type name=‘transfer‘ >

    <element

    name=‘from‘

    type=‘adjustment‘

    nullable=‘true‘

    />

    <element

    name=‘to‘

    type=‘adjustment‘

    nullable=‘false‘ <!— false is the default —>

    />

    </type>

      在一个元素的Schema声明中如果没有nullable属性,就意味着在一个XML文档中的元素是不能为空的。Null存取元素的精确格式当前还在修订中�要了解用更多信息参考最新版本的SOAP规范。

  • 相关阅读:
    Python 模块chardet安装 setup.py
    Windows下Python安装lxml
    intellij idea 如何更改比编辑器文本字体和大小
    [转]C#设计模式(8)-Builder Pattern
    [转]C#设计模式(4)-Simple Factory Pattern
    [转]C#委托的异步调用
    [转]浅谈C#中常见的委托
    C# 线程池
    [转]C#中的委托和事件(续)
    C#(.net)中的DllImport
  • 原文地址:https://www.cnblogs.com/alaricblog/p/3278255.html
Copyright © 2011-2022 走看看