<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

    現在,簡單解釋一下《使用Axis發布簡單的Web服務》中發布的Web服務所對應WSDL文檔的內容和結構。請注意,同樣的Java類在不同的Web服務開發包中得到的WSDL文檔不一定完全相同,這里還是以使用Axis的情況作為例子。

    雖然比較長,但為了方便起見還是把完整的WSDL貼在下面,然后進行說明。由于我對Web服務的認識還很不夠,所以幾乎可以肯定會存在一些誤解,僅作參考。

    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions targetNamespace="http://localhost:8080/bookstore/services/BookSvc" 
      xmlns
    ="http://schemas.xmlsoap.org/wsdl/" 
      xmlns:apachesoap
    ="http://xml.apache.org/xml-soap" 
      xmlns:impl
    ="http://localhost:8080/bookstore/services/BookSvc" 
      xmlns:intf
    ="http://localhost:8080/bookstore/services/BookSvc" 
      xmlns:soapenc
    ="http://schemas.xmlsoap.org/soap/encoding/" 
      xmlns:tns1
    ="http://model.bookstore.com" 
      xmlns:wsdl
    ="http://schemas.xmlsoap.org/wsdl/" 
      xmlns:wsdlsoap
    ="http://schemas.xmlsoap.org/wsdl/soap/" 
      xmlns:xsd
    ="http://www.w3.org/2001/XMLSchema">
      
    <wsdl:types>
        
    <schema targetNamespace="http://model.bookstore.com" xmlns="http://www.w3.org/2001/XMLSchema">
          
    <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
          
    <complexType name="Book">
            
    <sequence>
              
    <element name="ISDN" nillable="true" type="xsd:string"/>
              
    <element name="name" nillable="true" type="xsd:string"/>
              
    <element name="page" type="xsd:int"/>
            
    </sequence>
          
    </complexType>
        
    </Schema>
      
    </wsdl:types>
      
    <wsdl:message name="addBookResponse">
      
    </wsdl:message>
      
    <wsdl:message name="addBookRequest">
        
    <wsdl:part name="book" type="tns1:Book"/>
      
    </wsdl:message>
      
    <wsdl:portType name="BookSvc">
        
    <wsdl:operation name="addBook" parameterOrder="book">
          
    <wsdl:input message="intf:addBookRequest" name="addBookRequest"/>
          
    <wsdl:output message="intf:addBookResponse" name="addBookResponse"/>
        
    </wsdl:operation>
      
    </wsdl:portType>
      
    <wsdl:binding name="BookSvcSoapBinding" type="intf:BookSvc">
        
    <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        
    <wsdl:operation name="addBook">
          
    <wsdlsoap:operation soapAction=""/>
          
    <wsdl:input name="addBookRequest">
            
    <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://bookstore.com" use="encoded"/>
          
    </wsdl:input>
          
    <wsdl:output name="addBookResponse">
            
    <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/bookstore/services/BookSvc" use="encoded"/>
          
    </wsdl:output>
        
    </wsdl:operation>
      
    </wsdl:binding>
      
    <wsdl:service name="BookSvcService">
        
    <wsdl:port binding="intf:BookSvcSoapBinding" name="BookSvc">
          
    <wsdlsoap:address location="http://localhost:8080/bookstore/services/BookSvc"/>
        
    </wsdl:port>
      
    </wsdl:service>
    </wsdl:definitions>

    每個WSDL的根元素都是<definitions>,一般都在這里定義文檔中的各種名稱空間。對于上面的WSDL,定義了不少名稱空間,現在來說說它們的作用。

    我們都知道,WSDL應該是格式正確的XML文檔。進一步,還應該把它看作一個Schema,因此,<definitions>元素中可以定義targetNamespace屬性,表示在這個元素下的所有元素都屬于這個目標名稱空間。

    xmlns表示缺省的名稱空間,請注意在上面的文檔中,這個缺省名稱空間的值和xmlns:wsdl的值是相同的(都是http://schemas.xmlsoap.org/wsdl/)。因此,在這個WSDL中的很多<wsdl:XXX>元素,例如<wsdl:types>、<wsdl:portType>等等,實際上省略掉前面的“wsdl:”效果也是一樣的。

    名稱空間xmlns:apachesoap在文檔中并沒有使用到,這個應該是Axis為某些情況預留的名稱空間,或者是為了兼容以前的版本使用,因為Axis的前身是Apache Soap項目。

    名稱空間xmlns:intf和xmlns:impl分別代表接口(interface)和實現(implement),可以看出它們的值也是相同的,并且和<definitions>的targetNamespace一致。這是為了在文檔中引用已定義的屬于該目標名稱空間的元素使用的,例如“<wsdl:binding name="BookSvcSoapBinding" type="intf:BookSvc">”,其中的BookSvc一定是在前面某個元素中定義的,并且屬于<definitions>中指定的目標名稱空間。Axis把intf和impl分開是有道理的,因為在很多情況下,一個WSDL會引用另外一個WSDL,后者可能只定義了數據類型、消息和端口類型這些抽象元素,而前者中定義綁定和服務端口等和實現有關的內容。這里先不做討論。

    名稱空間xmlns:soapenc在這個文檔里也沒有用到,所以先不解釋了。

    名稱空間xmlns:tns1,在很多WSDL里這個名字都叫tns的,沒有后面的數字1,不知道Axis為什么起這樣的名字。不過沒有關系,名稱空間的名字本來就沒有實際的意義,只是一個代號而已。tns是This NameSpace的縮寫,用來對當前WSDL進行引用。由于一個WSDL映射一個包(package),所以Axis為我們生成的WSDL里,tns1的值(http://model.bookstore.com)包含java包(com.bookstore.model)的信息就是順理成章的了。請注意,tns1的值和<wsdl:types>里的<schema>元素的targetNamespace值是相同的。

    名稱空間xmlns:wsdlsoap是在與soap綁定時使用的,例如<wsdlsoap:binding>、<wsdlsoap:operation>等元素會用到。

    名稱空間xmlns:xsd是對XML Schema中各種數據類型的引用,例如string、boolean等等。想知道XML Schema中一共都定義了哪些數據類型,只要查看該名稱空間的值(http://www.w3.org/2000/10/XMLSchema)即可。

    沒想到只是名稱空間就寫了這么多,而WSDL的結構還有不少內容,所以還是分為兩部分吧,下一篇說說這個WSDL中的各個元素的作用。

    參考資料:

    posted on 2007-11-24 23:42 禮物 閱讀(672) 評論(0)  編輯  收藏 所屬分類: webservice
    主站蜘蛛池模板: 午夜高清免费在线观看| 免费一级e一片在线播放| 亚洲国产精品激情在线观看| 久久亚洲精品成人| 亚洲夂夂婷婷色拍WW47| 国产成人1024精品免费| 国产99视频精品免费观看7| 亚洲国产成人五月综合网| 中文字幕亚洲色图| 免费夜色污私人影院网站| 91网站免费观看| 亚洲最大激情中文字幕| 亚洲熟妇无码一区二区三区导航| 91在线视频免费观看| 日本牲交大片免费观看| 91精品国产亚洲爽啪在线观看| 边摸边吃奶边做爽免费视频网站| 在线观看永久免费| 国产成人亚洲精品狼色在线| 亚洲久热无码av中文字幕| 久久国产色AV免费观看| 亚洲国产精品一区二区第四页| 亚洲一卡2卡3卡4卡国产网站| 在线免费观看h片| 免费大香伊蕉在人线国产| 亚洲国产美女精品久久| 99久久婷婷免费国产综合精品| 国产精品免费视频一区| 亚洲AV无码乱码麻豆精品国产| 很黄很污的网站免费| 亚洲日韩在线观看| 亚洲av永久中文无码精品综合| 69式互添免费视频| 久久精品亚洲综合一品| jizz日本免费| 免费观看午夜在线欧差毛片 | 亚洲色无码专区一区| 99久久99热精品免费观看国产| 国产性爱在线观看亚洲黄色一级片 | 亚洲色欲色欱wwW在线| 中文字幕在线观看免费视频 |