CXF WEB service 框架學習筆記_第1頁
CXF WEB service 框架學習筆記_第2頁
CXF WEB service 框架學習筆記_第3頁
CXF WEB service 框架學習筆記_第4頁
CXF WEB service 框架學習筆記_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、/docs/index.html/注意,在非java-project中,例如在web-project中可能出現(xiàn)(activation.jar和mail.jar)與工程中的j2ee.jar以及myeclipse中d:myeclipse 5.5.1 gamyeclipseeclipsepluginscom.genuitec.eclipse.j2eedt.core_5.5.1datalibrarysetee_5的javaee.jar里面的同名包發(fā)生沖突,建議把j2ee.jar和javaee.jar中的同名包刪除,或者直接

2、使用j2ee.jar把eclipse自帶的javaee.jar從工程中去除并加入相應的包1. wsdl2java生成客戶端代碼2. jaxb3. jax-ws4. ws-addressing5. ws-policy6. ws-security7. webservice 注釋8. 攔截器wsdl2java生成客戶端代碼cxf支持代碼生成1)java to wsdl 、2)wsdl to java 、3)xsd to wsdl 、4)wsdl to xml 5)wsdl to soap 、6)wsdl to service 如下:d:apache-cxf-2.2.5binwsdl2java -d

3、d:/cxf-client -p example1.client :8080/ws/helloworld?wsdljaxbcxf默認的數(shù)據(jù)綁定使用的jaxb,xfire使用aegis替代數(shù)據(jù)綁定就是把java對象轉化為xml和把xml文件轉化為java對象不管使用任何的xml解析代碼庫(dom4j等),對于xml只是一個解析工作而已,不能馬上綁定到java 對象。對于對象,每次都需要set 或者get相應的屬性,當然也可以使用map 來保存xml配置。 于是,一種新的處理方式用于對象和xml之間的映射就變得非常需要,還好sun提供了jaxb,一種很方便的方式來處理

4、java對象和xml內容其中的xjc po.xsd能把xsd中定義的java結構轉換為java類,這有點像xmlbeans的scompjax-wshttps:/jax-jax-ws規(guī)范是一組xml web services的java api (官方:jax-rpc 2.0 renamed to jax-ws 2.0)在 jax-ws中,一個遠程調用可以轉換為一個基于xml的協(xié)議例如soap。在使用jax-ws過程中,開發(fā)者不需要編寫任何生成和處理soap消息的代碼。jax-ws的運行時實現(xiàn)會將這些api的調用轉換成為對于soap消息。在服務器端,用戶只需要通過java語言定義遠程調用所需要實現(xiàn)

5、的接口sei (service endpoint interface),并提供相關的實現(xiàn),通過調用jax-ws的服務發(fā)布接口就可以將其發(fā)布為webservice接口。在客戶端,用戶可以通過jax-ws的api創(chuàng)建一個代理(用本地對象來替代遠程的服務)來實現(xiàn)對于遠程服務器端的調用。通過web service所提供的互操作環(huán)境,我們可以用jax-ws輕松實現(xiàn)java平臺與其他編程環(huán)境(.net等)的互操作。jax-ws與jax-rpc之間的關系sun最開始的web services的實現(xiàn)是jax-rpc 1.1 (jsr 101)。這個實現(xiàn)是基于java的rpc,并不完全支持schema規(guī)范,同時

6、沒有對binding和parsing定義標準的實現(xiàn)。jax-ws2.0 (jsr 224)是sun新的web services協(xié)議棧,是一個完全基于標準的實現(xiàn)。在binding層(xml2java對象),使用的是the java architecture for xml binding (jaxb, jsr 222),在parsing層,使用的是the streaming api for xml (stax, jsr 173),同時它還完全支持schema規(guī)范。1客戶端開發(fā)者通過url得到wsdl文件(通過http訪問可以得到http:/?wsdl)2客戶端根據(jù)wsdl的描述,生成相關clie

7、nt接口代理方法,通過http post發(fā)送soap消息給服務器端。3服務器端listener接受到soap請求消息,對java來說,通常是一個servlet或者ejb。listener把消息轉發(fā)給 dispatcher,有時候listener和dispatcher也可能是同一個類。dispatcher會把請求消息交給webservice的運行終端。4,這時候,服務器端會將http request轉成服務器端的消息類型,形成javax.xml.ws.handler.messagecontext,并處理soap消息的頭信息,如mustunderstand。5,如果在服務器端配置了handler,

8、會調用handler的handlemessage方法,通常用handler來承儲消息,解密或者保證消息到達的順序。handler通過在handlerchain標注配置,handlers.xml文件內容為:handler-chains xmlns= wssoaphandler com.cxf.test.wssoaphandler wshandler com.cxf.test.wshandler 6,soap消息被反序列化為java對象,傳到真正的實現(xiàn)業(yè)務的類。7,調用真正的業(yè)務方法,執(zhí)行后利用jaxb注解序列化成soap返回消息。8,如果配置了handler,會調用handler的handlem

9、essage方法。如果業(yè)務方法有異常拋出,把異常轉為soap fault 消息。9,listener通過http把response返回給客戶端。jax-ws的客戶端調用分為proxy方式以及dispatch方式url wsdlurl = new url(file:/d:/ wsdl/prjcxfweb.wsdl);qname serviceqname = new qname( wscxfproviderservice);qname portqname = new qname( wscxfproviderport);service service = service.create(wsdlurl

10、, serviceqname);wscxfprovider port = (wscxfprovider) service.getport(portqname, wscxfprovider.class);try system.out.println(port.testws(message);catch(soapfaultexception e) system.out.println(e.getfault().getfaultcode(); system.out.println(e.getfault().getfaultstring();1,用工具通過wsdl文件產(chǎn)生一個sei(service e

11、ndpoint interface),一個java的interface,能夠對應該web service提供的功能。這個interface的類名會對應到wsdl的porttype名稱,方法會和operation對應,方法的參數(shù)會和message以及types對應。cxf和axis都提供這樣的工具:wsdl2java?!旧厦娴膚scxfprovider就是sei】2,初始化service,指定wsdl url和service的qname,service的qname的前一部分是命名空間,后一部分是名稱,與wsdl文件中的部分對應。然后通過getport得到一個實現(xiàn)了sei的實例,這個實例被叫做pr

12、oxy。它的qname與 wsdl文件中的wsdl:port name=wscxfproviderport部分對應。3,通過sei調用web service,傳給sei的參數(shù)是加上jaxb annotation的java類(簡單類型和string不用標記)。4,傳入的參數(shù)被序列化為soap消息的payload(body部分的xml),這是因為service.getport是通過proxy機制創(chuàng)建的,調用這個proxy的方法時,和它關聯(lián)的invocationhandler的invoke方法也會執(zhí)行,invoke方法會通過jaxb把java參數(shù)序列化為xml。然后會把soap request發(fā)到服

13、務器端。5,返回response是后與4類似,invocationhandler負責把xml利用jaxb反序列化為java對象。上面是proxyws-addressing具體而言,ws-addressing為同步和/或異步傳輸?shù)膕oap消息提供了一套統(tǒng)一的尋址方式,而且,它還提供了一些尋址特性來幫助web服務的開發(fā)人員圍繞多樣性的消息交換模式不僅僅只是請求/響應的簡單交換模式來構建新的應用ws-policy(ws-policy) 規(guī)范為服務請求者和服務提供者定義了語法和語義來描述他們的需求、首選項和性能如:安全、隱私 、應用程序優(yōu)先權 、用戶帳戶優(yōu)先權 、傳輸控制ws-security構建安全

14、的 web 服務以實現(xiàn)完整性和機密性時使用,它被設計成用來構建多種安全性模型(包括 pki、kerberos 和 ssl)的基礎。ws-security 特別為多安全性令牌、多信任域、多簽名格式和多加密技術提供支持。本規(guī)范提供了三種主要的機制:安全性令牌傳播、消息完整性和消息機密性。這些機制本身并不提供完整的安全性解決方案。相反,ws-security 是一種構件,它可以與其它 web 服務擴展和更高級的特定于應用程序的協(xié)議聯(lián)合使用,以適應多種安全性模型和加密技術。這些機制可以獨立使用(例如傳送安全性令牌),或以緊密集成的方式使用(例如,對消息簽名和加密,并提供與用于簽名和加密的密鑰相關的安全

15、性令牌層次結構)。javax.jws包webservice注釋webservicepublic interface webservicesample string say(string hello); webresult(name = user)string sayusername(webparam(name = user) userdto user); webresult(name = req) respbean action(webparam(name = req)reqbean req);1)webservice,將接口中的所有方法輸出為web service,說明類繼承了a web s

16、ervice,或者說明該接口為web service 接口endpointinterface 屬性,一般都作用于接口的實現(xiàn)類上,且其值就是該實現(xiàn)類的接口的全路徑。name 屬性用來指定 webservice的name,對應于的name屬性2)webresult自定義返回值將其mapping到wsdl和xml-wsdl:part3)webparam自定義返回值將其mapping到message part和xml-wsdl:messagewebparam注解ws服務的行為的參數(shù)信息header=true表示信息是否添加到soap的header中4)webmethodonewayonly an in

17、put message and no output攔截器參考:jax-ws中的javax.xml.ws.handler.handler是個消息攔截器,能夠在你的webserver前后進行處理handler分為logicalmessage:其方法getpayload(),以 xml 源的形式獲取消息負載,可以在相同的 logicalmessage 實例上多次調用,總是返回可以用來檢索整個消息負載的新的 source1. interceptor一個處理消息 handlemessage, 一個是處理錯誤 handlefault,提醒注意的是,在實行具體的interceptor的這兩個方法中,千萬別調

18、用interceptor內部的成員變量。這是由于interceptor是面向消息來進行處理的,每個interceptor都有可能運行在不同的線程中,如果調用了interceptor中的內部成員變量,就有在interceptor中造成臨界資源的訪問的情況,而這時的interceptor也就不是線程安全的interceptor了。2. interceptorchain單個的interceptor功能有限,cxf要實現(xiàn)一個soap消息處理,需要將許許多多的interceptor組合在一起使用。因此設計了 interceptorchain,在我看了interceptorchain就像是一個interceptor的小隊長有調配安置interceptor的權力(add,remove),控制消息處理的權力(dointerceptor,pause,resume,reset,abort),有交付錯誤處理的權力( get|setfaultobserver)。更有意思的是為靈活控制interceptor的處理消息順序(dointerceptstartingat,dointerceptorstartingafter),這也是interceptorchai

溫馨提示

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

評論

0/150

提交評論