@H_403_1@WSDL文档使用web服务描述语言来定义服务。
@H_403_1@文档包括逻辑(抽象)部分和具体部分。
@H_403_1@抽象部分用于定义独立于实现的数据类型和消息,具体部分定义一个endpoint如何实现一个可以与外界进行交互的服务。
@H_403_1@通常建议在写代码前定义WSDL文档和XML schema,但是这就要求对WSDL非常熟悉。
@H_403_1@逻辑部分:
@H_403_1@包括types,message以及portType元素。types元素中,xml schema用来定义组成消息的数据的结构。一定数量的消息元素用来定义服务所用消息的格式。portType元素包括一个或多个operation元素,用来定义被operation发送的消息。
@H_403_1@具体部分:
@H_403_1@包括binding和service元素。binding元素描述message元素描述的那些数据单元如何映射到一个具体的数据格式。Service元素包括一个或多个port元素,这些port元素用于定义endpoint。
@H_403_1@总体上来说,一个WSDL文档有以下元素组成:
@H_403_1@注1:复杂类型的种类:
@H_403_1@ xml schema有三种方式描述当xml文档被展现并通过线上展示时,其中的域如何被组织。第一个子元素确定哪种复杂类型被引用。下面展示了用来定义复杂类型行为的三种方式:
@H_403_1@ CXF支持两种方式来定义数组,第一种是定义一个复杂类型,采用简单元素,他的最大发生属性是个大于1的值,第二种方式是使用SOAP数组,SOAP数组提供增加的功能,比如ability来简化定义多为数组并且发送分离后的数组。 @H_403_1@ 复合类型数组:复合类型数组是特殊的sequence复合类型。你可以简单定义一个复合类型通过简单元素,并且制定该元素的最大发生maxOccurs属性。例如,定义一个数组,拥有二个浮点数字,你可以使用复合类型如下:
@H_403_1@SOAP数组:SOAP数组定义通过SOAP-ENC:Array,该类型基于wsdl:arrayType元素。
@H_403_1@1.7通过extension定义类型
@H_403_1@ 类似主要的编码语言,xml schema允许你创建数据类型,这些数据类型集成已有的数据类型,这种机制被称之为:extension。例如你可以创建一个新类型名叫alienInfo,它集成了PersonalInfo结构,通过郑家了新的元素planet。
@H_403_1@ extension的类型定义包括四个部分:
@H_403_1@a.通过name属性来定义类型名
@H_403_1@b.通过complexContent元素来指定新类型将拥有多余一个的元素。
@H_403_1@c.被继承的那个类,被称之为base类型,通过base属性来指定。
@H_403_1@d.新类型和属性被定义在extension元素中。例子如下:
@H_403_1@1.8通过restriction来定义类型
@H_403_1@简单例子
@H_403_1@1.9定义枚举类型:
@H_403_1@2定义元素:
@H_403_1@在xml schema中的元素体现为一个元素的实例。大多数最基本的元素有简单元素组成。像element元素,他是由一定数量的复杂类型定义的。它有三个属性:
- definitions--WSDL文档的根元素,该元素的属性指明了wsdl文档的名称,文档的目标名字空间,以及WSDL文档应用的名字空间的速记定义。
- types--数据单元的xml样式定义,形成了服务所用消息的构建块。
- portType---描述服务逻辑接口的operation元素的集合。
- operation--一个服务包含的操作的描述,当操作被调用时,操作被定义为两个endpoint之间的消息传递。
- binding---一个endpoint的实际数据格式说明,一个binding元素定义如何将一个抽象消息映射到一个具体数据格式。该元素指明诸如参数顺序,返回值等信息。
- service---相关port元素的集合,这些元素被库藏,用户组织endpoint定义。
- port--通过binding和物理地址定义的endpoint,这个元素将所有抽象定义聚集在一起。
struct personalInfo { string name; int age; };@H_403_1@ 对应的WSDL文档:
<complexType name="personalInfo"> <sequence> <element name="name" type="xsd:string" /> <element name="age" type="xsd:int" /> </sequence> </complexType>
- sequence:所有的复杂类型域必须被显示,并且他们必须有一个确定的次序,该次序与类型定义的次序相同。
- all:所有的复杂类型域都需要有,但是次序无所谓
- choice:仅仅是元素中一个可以出现在消息中。
<complexType name="personalInfo> <all> <element name="name" type="xsd:string"/> <element name="age" type="xsd:int"/> <element name="prevIoUsJobs" type="xsd:string: minOccurs="3" maxOccurs="7"/> </all> </complexType>@H_403_1@注3:定义属性:在xml文档中,属性被包含在element内部的。例如在complexType元素中name就是属性,它通常跟在<sequence>,<all>等元素的后面。例如:
<complexType name="personalInfo> <all> <element name="name" type="xsd:string"/> <element name="prevIoUsJobs" type="xsd:string" minOccurs="3" maxOccurs="7"/> </all> <attribute name="age" type="xsd:int" use="optional" /> </complexType>@H_403_1@1.6定义数组
@H_403_1@ CXF支持两种方式来定义数组,第一种是定义一个复杂类型,采用简单元素,他的最大发生属性是个大于1的值,第二种方式是使用SOAP数组,SOAP数组提供增加的功能,比如ability来简化定义多为数组并且发送分离后的数组。 @H_403_1@ 复合类型数组:复合类型数组是特殊的sequence复合类型。你可以简单定义一个复合类型通过简单元素,并且制定该元素的最大发生maxOccurs属性。例如,定义一个数组,拥有二个浮点数字,你可以使用复合类型如下:
<complexType name="personalInfo> <element name="averages" type="xsd:float" maxOccurs="20"/> </complexType>@H_403_1@你也可以定义一个最小发生属性。
@H_403_1@SOAP数组:SOAP数组定义通过SOAP-ENC:Array,该类型基于wsdl:arrayType元素。
<complexType name=""> <complexContent> <restriction base="SOAP-ENC:Array"> <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType=""/> </restriction> </complexContent> </complexType>TypeNameElementType<ArrayBounds>@H_403_1@上述语法中,typename指定新定义的数组名,ElementType指定数组中元素的数据类型。ArrayBounds指定数组的维度及元素数量,单位数组通过[],多维通过[][]。
<complexType name="SOAPStrings"> <complexContent> <restriction base="SOAP-ENC:Array"> <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="xsd:string[]"/> </restriction> </complexContent> </complexType>
<complexType name="alienInfo"> <complexContent> <extension base="personalInfo"> <sequence> <element name="planet" type="xsd:string"/> </sequence> </extension> </complexContent> </complexType>
<simpleType name="SSN"> <restriction base="xsd:string"> <pattern value="\d{3}-\d{2}-\d{4}"/> </restriction> </simpleType>
<simpleType name="widgetSize"> <restriction base="xsd:string"> <enumeration value="big"/> <enumeration value="large"/> <enumeration value="mungo"/> </restriction> </simpleType>
- 名称:一个需要的属性来指明元素的名字
- type:指明元素的类型,这个类型可以是任何xml schema的原类型或者任何已经命名的复合类型。这个属性属性可以被省略,如果类型已经内置定义。
- nillable:指定是否元素可以从一个文档中忽略,如果是ture,则元素可以被任何根据该SCHEMA生成数据文件中忽略。