亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

php學習之道:WSDL詳解(一)

2020-03-22 17:34:39
字體:
來源:轉載
供稿:網友
  • WSDL文檔使用web服務描述語言來定義服務。

    文檔包括邏輯(抽象)部分和具體部分。

    抽象部分用于定義獨立于實現的數據類型和消息,具體部分定義一個endpoint如何實現一個可以與外界進行交互的服務。

    通常建議在寫代碼前定義WSDL文檔和XML schema,但是這就要求對WSDL非常熟悉。

    邏輯部分:

    包括types,message以及portType元素。types元素中,xml schema用來定義組成消息的數據的結構。一定數量的消息元素用來定義服務所用消息的格式。portType元素包括一個或多個operation元素,用來定義被operation發送的消息。

    具體部分:

    包括binding和service元素。binding元素描述message元素描述的那些數據單元如何映射到一個具體的數據格式。Service元素包括一個或多個port元素,這些port元素用于定義endpoint。

    總體上來說,一個WSDL文檔有以下元素組成:

    definitions--WSDL文檔的根元素,該元素的屬性指明了wsdl文檔的名稱,文檔的目標名字空間,以及WSDL文檔應用的名字空間的速記定義。types--數據單元的xml樣式定義,形成了服務所用消息的構建塊。portType---描述服務邏輯接口的operation元素的集合。operation--一個服務包含的操作的描述,當操作被調用時,操作被定義為兩個endpoint之間的消息傳遞。binding---一個endpoint的實際數據格式說明,一個binding元素定義如何將一個抽象消息映射到一個具體數據格式。該元素指明諸如參數順序,返回值等信息。service---相關port元素的集合,這些元素被庫藏,用戶組織endpoint定義。port--通過binding和物理地址定義的endpoint,這個元素將所有抽象定義聚集在一起。

    設計一個WSDL的步驟:

    1.定義服務用到的data types

    2.定義服務用到的消息

    3.定義服務接口

    4.定義消息與接口之間的bindings和線上數據的具體呈現方式

    5.定義每個服務的傳輸細節。

    下面根據每步展開論述:

    1.定義邏輯數據單元

    定義一個服務時,第一件事情,你必須考慮的是作為暴露到外部的參數所用到的數據,將怎樣呈現。與那些是選用固定數據結構編碼的程序不同,服務必須定義出他們的數據以邏輯單元的形式,這包括兩步:

    1.1將數據拆分成邏輯單元,這些單元能被映射為數據類型,并被服務的物理實現所引用。

    如果你定義了一個服務接口,并且該接口已經實現,你必須將實現操作的數據類型轉換成xml元素,用于組裝成消息。如果你從頭開始,你必須定義你的消息構建時用到的構建塊,這樣的話,他們從實施角度看才有意義。

    注1:定義服務數據單元可用的類型體系:根據WSDL規范,你可以使用任何類型體系。然而在W3C規范中定義的XML schema是首選的規范的類型體系。因此,XML架構是在Apache CXF的內在類型系統。

    注2:xml schema:xml schema被用來定義一個xml文檔如何構建,用于定義一個文檔由哪些元素組成。這些元素可以使用xml schema類型,比如xsd:int的或者他可以使用用戶定義的類型,用戶定義類型也是使用xml元素的組合來構建的餓,或者他們是用嚴格的已存在類型構建。通過結合類型定義和元素定義,你可以創建復雜的XML文檔可以包含復雜的數據。當定義服務使用的數據單元時,你可以定義他們作為類型,這些類型指明消息組成部分的結構,你也能夠定義你的消息單元作為組成消息結構的元素。

    注3:生成數據單元的考慮:你可以考慮簡單地生成邏輯數據單元,這些單元直接映射你在服務中使用的數據類型。當以這個方式工作時,必須緊密遵循構建RPC類型html' target='_blank'>應用程序的構建模型,這不是構建面向服務架構程序必須的策略。webservice組織提供了一定數量的手冊來定義數據單元,另外W3C也提供了下main的手冊來教你如何使用xml schema展現數據類型。

    1.2將數據單元(data units)添加到文檔

    依賴于你如何選擇去生成WSDL文檔,生成新的數據定義要求有大量的知識,CXF GUI工具提供一定數量的幫助來描述數據類型。其他的xml編輯器提供不同級別的幫助。不論你選擇哪種編輯器,擁有一些與文檔相關的知識是很重要的。

    定義WSDL中用到的數據,需以下步驟:

    a.確定接口要用到的所有數據單元

    b.在文檔中生成一個types元素。

    c.創建一個schema元素,作為types元素的子元素

    d.complex類型是元素的集合,使用complexType元素來定義數據類型

    e.對于每個數組來說,定義他的數據類型也使用complexType元素

    f.對于每個復雜類型來說,都可以從簡單類型衍生出來,定義數據局類型可以通過simpleType元素。

    g.對于每個枚舉類型,定義數據類型使用simpleType元素。

    h.對于每個元素來說,定義他們使用element元素。

    1.3 xml Schema simple types:

    如果一個消息組件是簡單類型的話,那么就不需要給他定義一個類型。接口使用的復雜類型也是通過簡單類型定義的。

    注1:輸入簡單類型:xml簡單類型是主要的放置元素,在element元素中。簡單類型也被使用在restriction元素和extension元素的base屬性中。簡單類型總是使用xsd作為前綴,例如,為了指明類型int,你將輸入xsd:int在type屬性中。

    <element name="simpleInt" type="xsd:int" />

    CXF支持下列xml schema簡單類型:xsd:string,xsd:normalizedString,xsd:int,xsd:base64Binary等。

    1.4定義復雜數據類型:

    xml schema提供靈活和強大的機制來構建負責數據結構。你可以創建數據結構通過創建一個元素和屬性的序列。你看可以擴展已有類型來創建更復雜的類型。

    另外,為了構建復雜數據結構,你可以描述特定的類型,諸如:枚舉類型。數據類型中的數據有一個特定的取值范圍,或者數據類型的數值必須遵循某種特定的模式,通過擴展或者限制原始類型。

    1.5定義數據結構:

    在xml schema中,數據單元是數據域的集合,這些數據域是通過負責類型元素定義的。指明一個復雜的類型需要三塊信息:

    a.復雜元素的名稱需要被指定。

    b.復雜類型的第一個子元素用來描述該結構的域的行為,當他被放入線上時。

    c.每個結構中的域,都被用element元素定義。

    下面的雷子是一個復雜類型有兩個子元素:

    結構如下:

    struct personalInfo{  string name;  int age;};

    對應的WSDL文檔:

    <complexType name="personalInfo">  <sequence>name="name" type="xsd:string" />    <element    <element  name="age" type="xsd:int" />  </sequence></complexType>

    注1:復雜類型的種類:

    xml schema有三種方式描述當xml文檔被展現并通過線上展示時,其中的域如何被組織。第一個子元素確定哪種復雜類型被引用。下面展示了用來定義復雜類型行為的三種方式:

    sequence:所有的復雜類型域必須被顯示,并且他們必須有一個確定的次序,該次序與類型定義的次序相同。all:所有的復雜類型域都需要有,但是次序無所謂choice:僅僅是元素中一個可以出現在消息中。

    注2:定義結構的部分:

    你定義數據域,這些數據域是由一個結構體組成。每個復雜類型元素應該包括至少一個element元素。每個element元素對應已經定義的數據結構中的一個域。

    為了充分描述數據結構中的域,element必須有兩個屬性:

    name屬性:指明數據域的名稱并且是唯一的

    type屬性:指明該域存儲的數據的類型??梢允呛唵晤愋鸵部梢允菑碗s類型。

    除此而外還有兩個重要屬性:minOccurs和maxOccurs,這個屬性用來設置該域在結構中發生的次數上下限。缺省情況下每個字段值發生一次。使用這些屬性,你可以改變結構體中一個域發生的次數。下面的例子中,previousJobs最少發生一次,最多7次。

    <complexType name="personalInfo>  <all>ment name="name" type="xsd:string"/>    <el    <eleement name="age" type="xsd:int"/>pe="xsd:string:             minOccurs="3" maxOccu    <element name="previousJobs" tyrs="7"/>  </all></complexType>

    注3:定義屬性:在xml文檔中,屬性被包含在element內部的。例如在complexType元素中name就是屬性,它通常跟在<sequence>,<all>等元素的后面。例如:

    <complexType name="personalInfo>  <all>ment name="name" type="xsd:string"/>    <el    <eleement name="previousJobs" type="xsd:string"</all>  <attribute name="age" type="xsd:i             minOccurs="3" maxOccurs="7"/>  nt" use="optional" /></complexType>

    1.6定義數組

    CXF支持兩種方式來定義數組,第一種是定義一個復雜類型,采用簡單元素,他的最大發生屬性是個大于1的值,第二種方式是使用SOAP數組,SOAP數組提供增加的功能,比如ability來簡化定義多為數組并且發送分離后的數組。

    復合類型數組:復合類型數組是特殊的sequence復合類型。你可以簡單定義一個復合類型通過簡單元素,并且制定該元素的最大發生maxOccurs屬性。例如,定義一個數組,擁有二個浮點數字,你可以使用復合類型如下:

    <complexType name="personalInfo>  <element name="averages" type="xsd:float" maxOccurs="20"/></complexType>

    你也可以定義一個最小發生屬性。

    SOAP數組:SOAP數組定義通過SOAP-ENC:Array,該類型基于wsdl:arrayType元素。

    <complexType name="TypeName">  <complexContent>    <restriction base="SOAP-ENC:Array">      <attribute ref="SOAP-ENC:arrayType"                  wsdl:arrayType="ElementType<ArrayBounds>"/>    </restriction>  </complexContent></complexType>

    上述語法中,typename指定新定義的數組名,ElementType指定數組中元素的數據類型。ArrayBounds指定數組的維度及元素數量,單位數組通過[],多維通過[][]。

    <complexType name="SOAPStrings">  <complexContent>se="SOAP-ENC:Array">      <attribute r    <restriction baef="SOAP-ENC:arrayType"ayType="xsd:string[]"/>    </restriction>  </c                 wsdl:arromplexContent></complexType>

    1.7通過extension定義類型

    類似主要的編碼語言,xml schema允許你創建數據類型,這些數據類型集成已有的數據類型,這種機制被稱之為:extension。例如你可以創建一個新類型名叫alienInfo,它集成了PersonalInfo結構,通過鄭家了新的元素planet。

    extension的類型定義包括四個部分:

    a.通過name屬性來定義類型名

    b.通過complexContent元素來指定新類型將擁有多余一個的元素。

    c.被繼承的那個類,被稱之為base類型,通過base屬性來指定。

    d.新類型和屬性被定義在extension元素中。例子如下:

    <complexType name="alienInfo">  <complexContent>="personalInfo">      <sequence>     <extension base       <element name="planet" type="xsd:string"/>nt></complexType      </sequence>    </extension>  </complexConte>

    1.8通過restriction來定義類型

    簡單例子

    <simpleType name="SSN">  <restriction base="xsd:string">    <pattern value="/d{3}-/d{2}-/d{4}"/>  </restriction></simpleType>

    1.9定義枚舉類型:

    <simpleType name="widgetSize">  <restriction base="xsd:string">    <enumeration value="big"/>>    <enumeration value="mungo"    <enumeration value="large"//>  </restriction></simpleType>

    2定義元素:

    在xml schema中的元素體現為一個元素的實例。大多數最基本的元素有簡單元素組成。像element元素,他是由一定數量的復雜類型定義的。它有三個屬性:

    名稱:一個需要的屬性來指明元素的名字type:指明元素的類型,這個類型可以是任何xml schema的原類型或者任何已經命名的復合類型。這個屬性屬性可以被省略,如果類型已經內置定義。nillable:指定是否元素可以從一個文檔中忽略,如果是ture,則元素可以被任何根據該SCHEMA生成數據文件中忽略。

    一個元素可以有一個內置類型定義,內置類型被指明,通過復合類型元素或者簡單類型元素。一旦你說明了是否數據類型是復合或者簡單,你可以定義任何你需要的數據類型。內置類型定義建議不被使用,因為他不支持重用。

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    欧美黑人性生活视频| 韩国三级日本三级少妇99| 国产日韩欧美夫妻视频在线观看| 亚洲老板91色精品久久| 欧美黑人一区二区三区| 亚洲老司机av| 性亚洲最疯狂xxxx高清| 美乳少妇欧美精品| 欧美大全免费观看电视剧大泉洋| 不用播放器成人网| 北条麻妃在线一区二区| 日韩成人激情在线| 久久久久久18| 国产精品视频永久免费播放| 97婷婷大伊香蕉精品视频| 国产一区二区丝袜| 欧美日韩免费观看中文| 欧美xxxx综合视频| 国产精品久久久久久久久久久久| 91豆花精品一区| 日韩精品在线免费观看视频| 欧美午夜片在线免费观看| 亚洲成年人在线播放| 一本一道久久a久久精品逆3p| 欧美乱大交xxxxx另类电影| 97精品国产91久久久久久| 欧美激情啊啊啊| 91视频国产精品| 国产精品网站视频| 亚洲色图激情小说| 丝袜一区二区三区| 91精品在线一区| 欧美日韩高清在线观看| 欧美老女人性视频| 欧美性生交大片免网| 精品高清美女精品国产区| 久久久久久久久网站| 欧美激情2020午夜免费观看| 永久免费看mv网站入口亚洲| 成人黄色影片在线| 中文字幕在线成人| 亚洲欧美激情精品一区二区| 亚洲丝袜在线视频| 久久这里只有精品99| 欧美另类99xxxxx| 全球成人中文在线| 国产亚洲视频中文字幕视频| 亚洲专区中文字幕| 成人av电影天堂| 91精品视频网站| 亚洲一区二区三区sesese| 亚洲精品久久久久| 国产日产欧美a一级在线| 欧美日韩国产激情| 大桥未久av一区二区三区| 欧美午夜激情小视频| 57pao国产成人免费| 久久亚洲精品毛片| 三级精品视频久久久久| 蜜臀久久99精品久久久久久宅男| 国产精品久久中文| 久久中文字幕一区| 欧美精品久久久久久久久| 精品国产成人在线| 91亚洲午夜在线| 国产日韩欧美中文| 91精品中文在线| 日韩精品一二三四区| 91香蕉嫩草神马影院在线观看| 91av在线免费观看| 狠狠躁夜夜躁人人爽超碰91| 国产成人免费av| 日韩高清电影好看的电视剧电影| 国产精品私拍pans大尺度在线| 国产精品久久久久久久久久久不卡| 欧美日韩激情小视频| 综合国产在线观看| 日韩高清电影好看的电视剧电影| 国产精品揄拍一区二区| 欧美疯狂性受xxxxx另类| 国产一区二区激情| 国产精品一二区| 精品亚洲国产视频| 成人xvideos免费视频| 成人黄色av免费在线观看| 日韩在线观看免费全| 日韩第一页在线| 在线看欧美日韩| 一区二区三区黄色| 亚洲深夜福利视频| 亚洲2020天天堂在线观看| 欧美性xxxx极品hd满灌| 亚洲成人a级网| 成人日韩av在线| 欧美俄罗斯性视频| 97视频人免费观看| 欧美色视频日本版| 成人激情av在线| 亚洲精品国产精品国自产观看浪潮| 亚洲а∨天堂久久精品9966| 国产精自产拍久久久久久蜜| 日韩视频中文字幕| 欧美日韩中国免费专区在线看| xvideos成人免费中文版| 国产成人精品在线视频| 国产91精品久久久久| 国语自产精品视频在线看| 综合网日日天干夜夜久久| 欧美成人黑人xx视频免费观看| 久久伊人精品一区二区三区| 亚洲专区国产精品| 精品久久久久久久久久| 久久久精品国产一区二区| 亚洲天堂网站在线观看视频| 亚洲欧洲国产伦综合| 人人澡人人澡人人看欧美| 国产美女精彩久久| 最近2019中文字幕第三页视频| 亚洲网在线观看| 69久久夜色精品国产7777| 亚洲国产精品久久久久| 精品人伦一区二区三区蜜桃免费| 国产午夜精品久久久| 欧美性在线视频| 国产精品日韩在线| 亚洲在线观看视频网站| 国内精品久久久久久中文字幕| 欧美美女15p| 欧美成人精品xxx| 亚洲女人天堂视频| 国产69精品99久久久久久宅男| 91成人天堂久久成人| 国产精品一区电影| 午夜精品一区二区三区在线播放| 久久视频中文字幕| 国产精品网站视频| 国产精品9999| 91精品国产综合久久香蕉的用户体验| 国产99视频精品免视看7| 日韩中文字幕在线播放| 国产成人鲁鲁免费视频a| 色妞一区二区三区| 97视频在线观看网址| 欧美在线视频观看免费网站| 国产精品久久久久999| 在线播放国产一区二区三区| 日韩在线观看你懂的| 69久久夜色精品国产69乱青草| 亚洲人成在线观看| 日韩欧美亚洲范冰冰与中字| 国产精品h片在线播放| 亚洲欧美成人精品| 久久影院中文字幕| 国产精品小说在线| 国内精品免费午夜毛片| 在线精品视频视频中文字幕| 伊人久久久久久久久久| 亚洲电影免费在线观看| 国产精品黄色影片导航在线观看| 国产精品久久久久高潮| 日韩欧美一区二区三区| 日韩免费不卡av| 欧美洲成人男女午夜视频| 国产精品久久久久免费a∨|