WebService_CXF-κ_第1頁
WebService_CXF-κ_第2頁
WebService_CXF-κ_第3頁
WebService_CXF-κ_第4頁
WebService_CXF-κ_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、WebService CXF學(xué)習(xí)(入門篇1):CXF由來WebService介紹    WebService讓一個(gè)程序可以透明地調(diào)用互聯(lián)網(wǎng)程序,不用管具體的實(shí)現(xiàn)細(xì)節(jié)。只要WebService公開了服務(wù)接口,遠(yuǎn)程客戶端就可以調(diào)用服務(wù)。WebService是基于http協(xié)議的組件服務(wù),WebService是分散式應(yīng)用程序的發(fā)展趨勢。 WebService的開源實(shí)現(xiàn)    WebService更多是一種標(biāo)準(zhǔn),而不是一種具體的技術(shù)。不同的平臺(tái),不同的語言大都提供WebService的開發(fā)實(shí)現(xiàn)。在JAVA領(lǐng)域,WebService的框架很多,例如:AXIS,XFi

2、re,CXF等。AXIS,XFire相對(duì)比較成熟,資料相對(duì)較多。在這里我們只對(duì)CXF進(jìn)行講解,其他大家想學(xué)習(xí)到互聯(lián)網(wǎng)找相關(guān)資料學(xué)習(xí)。 CXF框架由來    ApacheCXF項(xiàng)目是由ObjectWeb Celtix和CodeHaus XFire合并成立。ObjectWeb Celtix是由IONA公司贊助,于2005年成立的開源Java ESB產(chǎn)品,XFire則是業(yè)界知名的SOAP堆棧。合并后的ApacheCXF融合該兩個(gè)開源項(xiàng)目的功能精華,提供了實(shí)現(xiàn)SOA所需要的核心ESB功能框架,包括SOA服務(wù)創(chuàng)建,服務(wù)路由,及一系列企業(yè)級(jí)QoS功能。 ApacheCXF架框的目標(biāo) &

3、#160;  1.概述    <>高性能    <>可擴(kuò)展    <>直觀易用    2.支持標(biāo)準(zhǔn)     <> JAX-WS, JSR-181, SAAJ, JAX-RS     <> SOAP 1.1, 1.2, WS-I BasicProfile, WS-Security, WS-Addressing, WS-RM, WS-Policy     <

4、;> WSDL 1.1     <> MTOM    3.傳輸方式,綁定,數(shù)據(jù)綁定,傳送數(shù)據(jù)格式     <> 綁定: SOAP, REST/HTTP     <> 數(shù)據(jù)綁定: JAXB 2.x, Aegis, XMLBeans, SDO     <> 傳送數(shù)據(jù)格式: XML, JSON, FastInfoset     <> 傳輸方式: HTTP, Servl

5、et, JMS    4.部署靈活     <> 輕量級(jí): 可以將服務(wù)部署到 Tomcat或其支持Spring的容器中     <> JBI整合: 部署一個(gè)服務(wù)引擎到JBI容器,例如: ServiceMix, OpenESB or Petals     <> J2EE集成: 可以將服務(wù)部署到J2EE應(yīng)用服務(wù)器上,例如:Geronimo, JOnAS, JBoss, WebLogic, 及WebSphere     <

6、;> Java 客戶端/服務(wù)端可以獨(dú)立性    5.支持多種編程語言     <> 完全支持 JAX-WS 2.x 客戶端/服務(wù)端模式     <> JAX-WS 2.x synchronous, asynchronous and one-way API's     <> JAX-WS 2.x Dynamic Invocation Interface (DII) API     <> 支持 wr

7、apped and non-wrapped 數(shù)據(jù)格式     <> XML messaging API     <> 支持JavaScript 和 ECMAScript 4 XML (E4X)     <> 支持CORBA     <> 支持JBI及ServiceMix    6.可編程環(huán)境     <> Java to WSDL    

8、 <> WSDL to Java     <> XSD to WSDL     <> WSDL to XML     <> WSDL to SOAP     <> WSDL to serviceWebService CXF學(xué)習(xí)(入門篇2):HelloWorld理論聯(lián)系實(shí)際,單單只講理論那就成了紙上談兵,用一個(gè)HelloWorld Demo可來說明事更加直觀。那下面咱們就開始進(jìn)行講解:    首先到

9、apache官方網(wǎng)下載apache-cxf-2.2.2,地址:/    新建一個(gè)Java Project,導(dǎo)入cxf常用.jar包 Java代碼 1. commons-logging-1.1.1.jar   2. geronimo-activation_1.1_spec-1.0.2.jar (or Sun's Activation jar)   3. geronimo-annotation_1.0_spec-1.1.1.jar (JSR&

10、#160;250)   4. geronimo-javamail_1.4_spec-1.6.jar (or Sun's JavaMail jar)   5. geronimo-servlet_2.5_spec-1.2.jar (or Sun's Servlet jar)   6. geronimo-ws-metadata_2.0_spec-1.1.2.jar (JSR 181)   7. geroni

11、mo-jaxws_2.1_spec-1.0.jar (or Sun's jaxws-api-2.1.jar)   8. geronimo-stax-api_1.0_spec-1.0.1.jar (or other stax-api jar)   9. jaxb-api-2.1.jar   10. jaxb-impl-2.1.12.jar   11. jetty-6.1.21.jar   12. jetty-util-6

12、.1.21.jar   13. neethi-2.0.4.jar   14. saaj-api-1.3.jar   15. saaj-impl-1.3.2.jar   16. wsdl4j-1.6.2.jar   17. wstx-asl-3.2.8.jar   18. XmlSchema-1.4.5.jar   19. xml-resolver-1.2.jar   20. cxf-2.2.2.jar   commo

13、ns-logging-1.1.1.jar geronimo-activation_1.1_spec-1.0.2.jar (or Sun's Activation jar) geronimo-annotation_1.0_spec-1.1.1.jar (JSR 250) geronimo-javamail_1.4_spec-1.6.jar (or Sun's JavaMail jar) geronimo-servlet_2.5_spec-1.2.jar (or Sun's Servlet jar) geronimo-ws-metadata_2.0_spec-1.1.2.j

14、ar (JSR 181) geronimo-jaxws_2.1_spec-1.0.jar (or Sun's jaxws-api-2.1.jar) geronimo-stax-api_1.0_spec-1.0.1.jar (or other stax-api jar) jaxb-api-2.1.jar jaxb-impl-2.1.12.jar jetty-6.1.21.jar jetty-util-6.1.21.jar neethi-2.0.4.jar saaj-api-1.3.jar saaj-impl-1.3.2.jar wsdl4j-1.6.2.jar wstx-asl-3.2.

15、8.jar XmlSchema-1.4.5.jar xml-resolver-1.2.jar cxf-2.2.2.jar   接下就是HelloWorld Demo開發(fā)了    第一步:新建一個(gè)webservice接口 Java代碼 1. WebService  2. public interface IHelloWorld    3.     /WebParam給參數(shù)命名,提高可代碼可讀性。此項(xiàng)可選   4. blic

16、60;String sayHi(WebParam(name="text") String text);   5.    WebService public interface IHelloWorld /WebParam給參數(shù)命名,提高可代碼可讀性。此項(xiàng)可選public String sayHi(WebParam(name="text") String text);    通過注解WebService申明為webservice接口    第二步,實(shí)

17、現(xiàn)WebService接口 Java代碼 1.   WebService  2.   public class HelloWorldImpl implements IHelloWorld    3.   4. public String sayHi(String name)    5.     System.out.println("sa

18、yHello is called by " + name);   6.     return "Hello " + name;   7.   8.   9.       WebService public class HelloWorldImpl implements IHelloWorld pub

19、lic String sayHi(String name) System.out.println("sayHello is called by " + name);return "Hello " + name;    第三步,創(chuàng)建服務(wù)端 Java代碼 1.   public class Server    2.   3. private Server()   4.     IH

20、elloWorld helloWorld = new HelloWorldImpl();   5.     /創(chuàng)建WebService服務(wù)工廠   6.     JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();   7.     /注冊(cè)WebService接口 &

21、#160; 8.     factory.setServiceClass(IHelloWorld.class);   9.     /發(fā)布接口   10.     factory.setAddress("http:/localhost:9000/HelloWorld");   11.     factory.setServiceBean(hello

22、World);   12.     /創(chuàng)建WebService   13.     factory.create();   14. ;   15.   16. public static void main(String args) throws InterruptedException   17.    &

23、#160;   /啟動(dòng)服務(wù)端   18.               new Server();   19.     System.out.println("Server ready.");   20.     /休眠一分鐘,便于測試  &

24、#160;21.                Thread.sleep(1000*60);   22.     System.out.println("Server exit.");   23.     System.exit(0);   24.   25.

25、       public class Server private Server()IHelloWorld helloWorld = new HelloWorldImpl();/創(chuàng)建WebService服務(wù)工廠JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();/注冊(cè)WebService接口factory.setServiceClass(IHelloWorld.class);/發(fā)布接口factory.setAddress("http:/localhost:900

26、0/HelloWorld");factory.setServiceBean(helloWorld);/創(chuàng)建WebServicefactory.create();public static void main(String args) throws InterruptedException /啟動(dòng)服務(wù)端 new Server();System.out.println("Server ready.");/休眠一分鐘,便于測試 Thread.sleep(1000*60);System.out.println("Server exit.");Syste

27、m.exit(0);     第四步,創(chuàng)建客戶端    Java代碼 1.    public class Client    2.   3. private Client();   4.   5. public static void main(String args)   6.     /創(chuàng)建W

28、ebService客戶端代理工廠   7.     JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();   8.     /注冊(cè)WebService接口   9.     factory.setServiceClass(HelloWorld.class);   10.  

29、0;  /設(shè)置WebService地址   11.     factory.setAddress("http:/localhost:9000/HelloWorld");        12.     IHelloWorld iHelloWorld = (IHelloWorld)factory.create();   13.  &

30、#160;  System.out.println("invoke webservice.");   14.     System.out.println("message context is:"+iHelloWorld.sayHi("     15.             

31、     Josen");   16.     System.exit(0);   17.   18.       19.      public class Client private Client();public static void main(String args)/創(chuàng)建WebService客戶端代理工廠JaxWsProxyFacto

32、ryBean factory = new JaxWsProxyFactoryBean();/注冊(cè)WebService接口factory.setServiceClass(HelloWorld.class);/設(shè)置WebService地址factory.setAddress("http:/localhost:9000/HelloWorld");IHelloWorld iHelloWorld = (IHelloWorld)factory.create();System.out.println("invoke webservice.");System.out.p

33、rintln("message context is:"+iHelloWorld.sayHi(" Josen");System.exit(0);     最后是萬事俱備,只欠測試了     首先,運(yùn)行服務(wù)端程序     其次,打開瀏覽器,在地址欄中輸入http:/localhost:9000/HelloWorld?wsdl(因?yàn)閏xf自帶了一個(gè)jetty服務(wù)器),查看接口是否發(fā)布成功,如里瀏覽器頁面顯示下面內(nèi)容,證明接口發(fā)布成功 Java代碼 1.  &#

34、160; <wsdl:definitions name="IHelloWorldService" targetNamespace="   2. <wsdl:types>   3. <xsd:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="  

35、0;4. <xsd:element name="sayHi" type="tns:sayHi"/>   5. <xsd:complexType name="sayHi">   6. <xsd:sequence>   7. <xsd:element minOccurs="0" name="text" type="xsd:stri

36、ng"/>   8. </xsd:sequence>   9. </xsd:complexType>   10. <xsd:element name="sayHiResponse" type="tns:sayHiResponse"/>   11. <xsd:complexType name="sayHiResponse">   12. <

37、xsd:sequence>   13. <xsd:element minOccurs="0" name="return" type="xsd:string"/>   14. </xsd:sequence>   15. </xsd:complexType>   16. </xsd:schema>   17. </wsdl:types> 

38、0; 18. <wsdl:message name="sayHi">   19. <wsdl:part element="tns:sayHi" name="parameters">   20.     </wsdl:part>   21. </wsdl:message>   22. <wsdl:message na

39、me="sayHiResponse">   23. <wsdl:part element="tns:sayHiResponse" name="parameters">   24.     </wsdl:part>   25. </wsdl:message>   26. <wsdl:portType name="IHelloWorl

40、d">   27. <wsdl:operation name="sayHi">   28. <wsdl:input message="tns:sayHi" name="sayHi">   29.     </wsdl:input>   30. <wsdl:output message="tns:sayHiRes

41、ponse" name="sayHiResponse">   31.     </wsdl:output>   32. </wsdl:operation>   33. </wsdl:portType>   34. <wsdl:binding name="IHelloWorldServiceSoapBinding" type="tns:IHe

42、lloWorld">   35. <soap:binding style="document" transport="/soap/http"/>   36. <wsdl:operation name="sayHi">   37. <soap:operation soapAction="" style="

43、document"/>   38. <wsdl:input name="sayHi">   39. <soap:body use="literal"/>   40. </wsdl:input>   41. <wsdl:output name="sayHiResponse">   42. <soap:body use="

44、literal"/>   43. </wsdl:output>   44. </wsdl:operation>   45. </wsdl:binding>   46. <wsdl:service name="IHelloWorldService">   47. <wsdl:port binding="tns:IHelloWorldServiceSoapBinding"

45、 name="IHelloWorldPort">   48. <soap:address location="http:/localhost:9000/HelloWorld"/>   49. </wsdl:port>   50. </wsdl:service>   51. </wsdl:definitions>   <wsdl:definitions name="IH

46、elloWorldService" targetNamespace="<wsdl:types><xsd:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="<xsd:element name="sayHi" type="tns:sayHi"/><xsd:complexType name="sayHi"

47、><xsd:sequence><xsd:element minOccurs="0" name="text" type="xsd:string"/></xsd:sequence></xsd:complexType><xsd:element name="sayHiResponse" type="tns:sayHiResponse"/><xsd:complexType name="sayHiResponse"&

48、gt;<xsd:sequence><xsd:element minOccurs="0" name="return" type="xsd:string"/></xsd:sequence></xsd:complexType></xsd:schema></wsdl:types><wsdl:message name="sayHi"><wsdl:part element="tns:sayHi" name="

49、parameters"> </wsdl:part></wsdl:message><wsdl:message name="sayHiResponse"><wsdl:part element="tns:sayHiResponse" name="parameters"> </wsdl:part></wsdl:message><wsdl:portType name="IHelloWorld"><wsdl:operati

50、on name="sayHi"><wsdl:input message="tns:sayHi" name="sayHi"> </wsdl:input><wsdl:output message="tns:sayHiResponse" name="sayHiResponse"> </wsdl:output></wsdl:operation></wsdl:portType><wsdl:binding name=&quo

51、t;IHelloWorldServiceSoapBinding" type="tns:IHelloWorld"><soap:binding style="document" transport="/soap/http"/><wsdl:operation name="sayHi"><soap:operation soapAction="" style="document"/>&

52、lt;wsdl:input name="sayHi"><soap:body use="literal"/></wsdl:input><wsdl:output name="sayHiResponse"><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="IHelloWorldServ

53、ice"><wsdl:port binding="tns:IHelloWorldServiceSoapBinding" name="IHelloWorldPort"><soap:address location="http:/localhost:9000/HelloWorld"/></wsdl:port></wsdl:service></wsdl:definitions>    最后,運(yùn)行客戶端程序,看看效果如果。  &

54、#160;  這一節(jié)就講到此為止,下節(jié)對(duì)WSDL定義進(jìn)行講解,便于對(duì)上面這個(gè)Demo進(jìn)行很好的消化,同時(shí)對(duì)后面章節(jié)啟個(gè)輔塾作用。WebService CXF學(xué)習(xí)(入門篇3):WSDL描述由于網(wǎng)上有很多相關(guān)這方面的資料,在這里我就轉(zhuǎn)載     本文初步介紹了Web Service 'stack'中對(duì)于Web服務(wù)即時(shí)裝配,自動(dòng)集成起著關(guān)鍵作用的WSDL規(guī)范,首先介紹了WSDL的作用和意義,其次對(duì)WSDL文檔的結(jié)構(gòu)作出概要地介紹,對(duì)每個(gè)元素的作用作了探討,分析了其開放和復(fù)用的體系設(shè)計(jì)的思想,最后通過一個(gè)實(shí)例詳細(xì)說明了WSDL的工作模式。 

55、60;   本文所引用的資源主要包括兩類,一類是Web服務(wù)的技術(shù)資源網(wǎng)站,包含了大量Web服務(wù)的技術(shù)信息,另一類是Web服務(wù)“stack"系列技術(shù)規(guī)范,他們是一個(gè)整體的技術(shù)體系,包括UDDI、SOAP、WSDL、XML等。本文的最后給出了這些資源的鏈接,有興趣的讀者可以通過這些資源鏈接找到所需的內(nèi)容。 Web Service "Stack"     在我的先前的文章中,我已經(jīng)介紹過Web服務(wù)的整個(gè)技術(shù)體系Web Service "stack",如下圖: Figure 1. Web Service

56、 "stack" 其中,綠色部分是先前已經(jīng)定義好的并且廣泛使用的傳輸層和網(wǎng)絡(luò)層的標(biāo)準(zhǔn):IP、HTTP、SMTP等。而藍(lán)色部分是目前開發(fā)的Web服務(wù)的相關(guān)標(biāo)準(zhǔn)協(xié)議,包括服務(wù)調(diào)用協(xié)議SOAP、服務(wù)描述協(xié)議WSDL和服務(wù)發(fā)現(xiàn)/集成協(xié)議UDDI,以及服務(wù)工作流描述語言WSFL。而橙色部分描述的是更高層的待開發(fā)的關(guān)于路由、可靠性以及事務(wù)等方面的協(xié)議。黃色部分是各個(gè)協(xié)議層的公用機(jī)制,這些機(jī)制一般由外部的正交機(jī)制來完成。 其中,一個(gè)可以使用的Web服務(wù)應(yīng)當(dāng)按照需要選用若干層次的功能,而無需所有的特性。但是無論如何為了實(shí)現(xiàn)一個(gè)一般意義上的Web服務(wù),具備Web服務(wù)的基礎(chǔ)特性:跨平臺(tái)調(diào)用和接

57、口可機(jī)器識(shí)別,那么必需使用WSDL和SOAP。SOAP是用來最終完成Web服務(wù)調(diào)用的,而WSDL則是用于描述如何使用 SOAP來調(diào)用Web服務(wù)的。     WSDL 是一種XML Application,他將Web服務(wù)描述定義為一組服務(wù)訪問點(diǎn),客戶端可以通過這些服務(wù)訪問點(diǎn)對(duì)包含面向文檔信息或面向過程調(diào)用的服務(wù)進(jìn)行訪問(類似遠(yuǎn)程過程調(diào)用)。WSDL首先對(duì)訪問的操作和訪問時(shí)使用的請(qǐng)求/響應(yīng)消息進(jìn)行抽象描述,然后將其綁定到具體的傳輸協(xié)議和消息格式上以最終定義具體部署的服務(wù)訪問點(diǎn)。相關(guān)的具體部署的服務(wù)訪問點(diǎn)通過組合就成為抽象的Web服務(wù)。   

58、0; 在具體使用中,我們可以對(duì) WSDL 進(jìn)行擴(kuò)展(類似SOAP的可擴(kuò)展性),這樣無論通信時(shí)使用何種消息格式或網(wǎng)絡(luò)協(xié)議,都可以對(duì)服務(wù)訪問點(diǎn)及其使用的消息格式進(jìn)行描述。在WSDL的框架中,可以使用任意的消息格式和網(wǎng)絡(luò)協(xié)議,如同SOAP中可以使用任意的網(wǎng)絡(luò)協(xié)議一樣。在WSDL規(guī)范中,定義了如何使用SOAP消息格式、HTTP GET/POST消息格式以及MIME格式來完成Web服務(wù)交互的規(guī)范。 WSDL概述     由于通信協(xié)議和消息格式在 Web 技術(shù)圈子里已經(jīng)達(dá)到了標(biāo)準(zhǔn)化,我們知道在通常的開發(fā)過程中,對(duì)于對(duì)象的Interface一定具備相應(yīng)的SDK描述文檔,Web服

59、務(wù)也是一種對(duì)象,只不過它是被部署在Web上而已。很自然的,我們也完全需要有對(duì)Web服務(wù)這個(gè)對(duì)象的界面的SDK描述文檔。然而這兩者又不盡相同,一來目前在Web上的應(yīng)用已經(jīng)完全接受了XML這個(gè)基本的標(biāo)準(zhǔn),基本上所有新出臺(tái)的技術(shù)都是基于XML標(biāo)準(zhǔn)的,二來Web服務(wù)的目標(biāo)是即時(shí)裝配,松散耦合以及自動(dòng)集成的,這意味著 SDK描述文檔應(yīng)當(dāng)是具備被機(jī)器識(shí)別的能力的。     也就是說,對(duì)于使用標(biāo)準(zhǔn)化的消息格式/通信協(xié)議的Web服務(wù),它需要以某種結(jié)構(gòu)化的方式(即XML)對(duì)Web服務(wù)的調(diào)用/通信加以描述,而且實(shí)現(xiàn)這一點(diǎn)也顯得非常重要,這是Web服務(wù)即時(shí)裝配的基本保證。WSDL正是這

60、樣一種描述語言,WSDL 定義了一套基于 XML的語法,將Web服務(wù)描述為能夠進(jìn)行消息交換的服務(wù)訪問點(diǎn)的集合,從而滿足了這種需求。WSDL 服務(wù)定義為分布式系統(tǒng)提供了可機(jī)器識(shí)別的SDK文檔,并且可用于描述自動(dòng)執(zhí)行應(yīng)用程序通信中所涉及的細(xì)節(jié)。     WSDL 文檔將Web服務(wù)定義為服務(wù)訪問點(diǎn)或端口的集合。在 WSDL 中,由于服務(wù)訪問點(diǎn)和消息的抽象定義已從具體的服務(wù)部署或數(shù)據(jù)格式綁定中分離出來,因此可以對(duì)抽象定義進(jìn)行再次使用:消息,指對(duì)交換數(shù)據(jù)的抽象描述;而端口類型,指操作的抽象集合。用于特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范構(gòu)成了可以再次使用的綁定。將Web訪問地

61、址與可再次使用的綁定相關(guān)聯(lián),可以定義一個(gè)端口,而端口的集合則定義為服務(wù)。因此,WSDL 文檔在Web服務(wù)的定義中使用下列元素:     * Types - 數(shù)據(jù)類型定義的容器,它使用某種類型系統(tǒng)(一般地使用XML Schema中的類型系統(tǒng))。     * Message - 通信消息的數(shù)據(jù)結(jié)構(gòu)的抽象類型化定義。使用Types所定義的類型來定義整個(gè)消息的數(shù)據(jù)結(jié)構(gòu)。     * Operation - 對(duì)服務(wù)中所支持的操作的抽象描述,一般單個(gè)Operation描述了一個(gè)訪問入口的請(qǐng)求/響應(yīng)消息對(duì)。  

62、;   * PortType - 對(duì)于某個(gè)訪問入口點(diǎn)類型所支持的操作的抽象集合,這些操作可以由一個(gè)或多個(gè)服務(wù)訪問點(diǎn)來支持。     * Binding - 特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范的綁定。     * Port - 定義為協(xié)議/數(shù)據(jù)格式綁定與具體Web訪問地址組合的單個(gè)服務(wù)訪問點(diǎn)。     * Service - 相關(guān)服務(wù)訪問點(diǎn)的集合。 大家可以參考下圖,來理解一下WSDL文檔的結(jié)構(gòu)組織: Figure 2. WSDL元素的對(duì)象結(jié)構(gòu)示意圖    

63、; 其中,Types是一個(gè)數(shù)據(jù)類型定義的容器,包含了所有在消息定義中需要的XML元素的類型定義,我將在今后的文章中結(jié)合XML Schema來詳細(xì)說明如何進(jìn)行類型定義。     Message具體定義了在通信中使用的消息的數(shù)據(jù)結(jié)構(gòu),Message元素包含了一組Part元素,每個(gè)Part元素都是最終消息的一個(gè)組成部分,每個(gè) Part都會(huì)引用一個(gè)DataType來表示它的結(jié)構(gòu)。Part元素不支持嵌套(可以使用DataType來完成這方面的需要),都是并列出現(xiàn)。     PortType具體定義了一種服務(wù)訪問入口的類型,何謂訪問入口的類型呢?

64、就是傳入/傳出消息的模式及其格式。一個(gè)PortType可以包含若干個(gè) Operation,而一個(gè)Operation則是指訪問入口支持的一種類型的調(diào)用。在WSDL里面支持四種訪問入口調(diào)用的模式:    1. 單請(qǐng)求;    2. 單響應(yīng);    3. 請(qǐng)求/響應(yīng);    4. 響應(yīng)/請(qǐng)求。     在這里請(qǐng)求指的是從客戶端到Web服務(wù)端,而響應(yīng)指的是從Web服務(wù)端到客戶端。PortType的定義中會(huì)引用消息定義部分的一個(gè)到兩個(gè)消息,作為請(qǐng)求或響應(yīng)消息的格式。比如,一個(gè)股票查詢的訪問入口可

65、能就會(huì)支持兩種請(qǐng)求消息,一種請(qǐng)求消息中指明股票代碼,而另一種請(qǐng)求消息中則會(huì)指明股票的名稱,響應(yīng)消息可能都是股票的價(jià)格等等。     以上三種結(jié)構(gòu)描述了調(diào)用Web服務(wù)的抽象定義,這三部分與具體Web服務(wù)部署細(xì)節(jié)無關(guān),是可復(fù)用的描述(每個(gè)層次都可以復(fù)用)。如果與一般的對(duì)象語言做比較的話,這部分可以堪稱是IDL描述的對(duì)象,描述了對(duì)象的接口標(biāo)準(zhǔn),但是到底對(duì)象是用哪種語言實(shí)現(xiàn),遵從哪種平臺(tái)的細(xì)節(jié)規(guī)范,被部署在哪臺(tái)機(jī)器上則是后面的元素所描述的。     Service描述的是一個(gè)具體的被部署的Web服務(wù)所提供的所有訪問入口的部署細(xì)節(jié),一個(gè)Serv

66、ice往往會(huì)包含多個(gè)服務(wù)訪問入口,而每個(gè)訪問入口都會(huì)使用一個(gè)Port元素來描述。     Port描述的是一個(gè)服務(wù)訪問入口的部署細(xì)節(jié),包括通過哪個(gè)Web地址(URL)來訪問,應(yīng)當(dāng)使用怎樣的消息調(diào)用模式來訪問等。其中消息調(diào)用模式則是使用Binding結(jié)構(gòu)來表示。     Binding結(jié)構(gòu)定義了某個(gè)PortType與某一種具體的網(wǎng)絡(luò)傳輸協(xié)議或消息傳輸協(xié)議相綁定,從這一層次開始,描述的內(nèi)容就與具體服務(wù)的部署相關(guān)了。比如可以將PortType與SOAP/HTTP綁定,也可以將PortType與MIME/SMTP相綁定等。  

67、60;  在介紹了WSDL的主要元素之后,大家會(huì)發(fā)現(xiàn),WSDL的設(shè)計(jì)理念完全繼承了以XML為基礎(chǔ)的當(dāng)代Web技術(shù)標(biāo)準(zhǔn)的一貫設(shè)計(jì)理念:開放。WSDL允許通過擴(kuò)展使用其他的類型定義語言(不光是XML Schema),允許使用多種網(wǎng)絡(luò)傳輸協(xié)議和消息格式(不光是在規(guī)范中定義的這些:SOAP/HTTP,HTTP-GET/POST以及MIME等)。同時(shí)WSDL也應(yīng)用了當(dāng)代軟件工程中的復(fù)用理念,分離了抽象定義層和具體部署層,使得抽象定義層的復(fù)用性大大增加。比如我們可以先使用抽象定義層為一類 Web服務(wù)進(jìn)行抽象定義(比如UDDI Registry,抽象定義肯定是完全一致的遵循了UDDI規(guī)范),而不同

68、的運(yùn)營公司可以采用不同的具體部署層的描述結(jié)合抽象定義完成其自身的Web服務(wù)的描述。 WSDL文檔示例     下例是一個(gè)提供股票報(bào)價(jià)的簡單Web服務(wù)的 WSDL 定義。該服務(wù)支持名為 GetLastTradePrice 的單一操作,這個(gè)操作是通過在 HTTP 上運(yùn)行 SOAP 1.1 協(xié)議來實(shí)現(xiàn)的。該請(qǐng)求接受一個(gè)類型為字符串的 tickerSymbol,并返回類型為浮點(diǎn)數(shù)的價(jià)格。 Java代碼 1. <?xml version="1.0"?>   2. <definitions name

69、="StockQuote"    3.              targetNamespace="4.              xmlns:tns="5.          &

70、#160;   xmlns:xsd1="6.              xmlns:soap="/wsdl/soap/"  7.              xmlns="http:/schemas.x

71、/wsdl/">   8.                 9.     10.   <types>   11.     <schema targetNamespace="12.      

72、60;      xmlns="/1999/XMLSchema">   13.       <element name="TradePriceRequest">   14.         <complexType>   15.

73、           <all>   16.             <element name="tickerSymbol" type="string"/>   17.        

74、   </all>   18.         </complexType>   19.       </element>   20.       <element name="TradePriceResult">  &#

75、160;21.         <complexType>   22.           <all>   23.             <element name="price" typ

76、e="float"/>   24.           </all>   25.         </complexType>   26.       </element>   27.   

77、0; </schema>   28.   </types>  <?xml version="1.0"?><definitions name="StockQuote" targetNamespace=" xmlns:tns=" xmlns:xsd1=" xmlns:soap="/wsdl/soap/" xmlns="http:/schem

78、/wsdl/"> <types> <schema targetNamespace=" xmlns="/1999/XMLSchema"> <element name="TradePriceRequest"> <complexType> <all> <element name="tickerSymbol" type="string"/> </all>

79、</complexType> </element> <element name="TradePriceResult"> <complexType> <all> <element name="price" type="float"/> </all> </complexType> </element> </schema> </types>    上面這部分是數(shù)據(jù)類型的定義,其中為

80、定義了兩個(gè)元素的結(jié)構(gòu):     * TradePriceRequest(交易價(jià)格請(qǐng)求): 將該元素定義為包含一個(gè)字符串元素(tickerSymbol)的復(fù)合類型元素。     * TradePriceResult(交易價(jià)格): 將該元素定義為一個(gè)包含一個(gè)浮點(diǎn)數(shù)元素(price)的復(fù)合類型元素。 Java代碼 1. <message name="GetLastTradePriceInput">   2.     <part

81、0;name="body" element="xsd1:TradePriceRequest"/>   3.   </message>   4.     5.   <message name="GetLastTradePriceOutput">   6.     <part name="body

82、" element="xsd1:TradePriceResult"/>   7.   </message>  <message name="GetLastTradePriceInput"> <part name="body" element="xsd1:TradePriceRequest"/> </message> <message name="GetLastTradePriceOutput"> <part name="body" element="xsd1:TradePriceResult"/> </message>    這部分是消息格式的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論