




已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
CXF框架實現(xiàn)webservice教程1 使用CXF實現(xiàn)一個簡單的WEB SERVICE首先介紹如何用CXF實現(xiàn)一個基本的hello world首先到apache官網(wǎng)去下載CXF的開發(fā)jar包/cxf/2.4.3/apache-cxf-2.4.3.zip創(chuàng)建cxf webservice服務器端普通java項目,叫做HelloCxfServer,把必須用到的jar文件通過構建路徑引入,為了省事,可以直接把所有的jar引入此處注意:如果是jdk1.6啟動服務器會發(fā)生如下錯誤JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/E:/javaLib/cxf_all_jar/jaxb-impl-.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader.這是由于jdk1.6的jar包和cxf的jar包沖突造成的,需要把cxf lib中的endorsed目錄拷入到D:Program FilesJavajdk1.6.0jrelib目錄下創(chuàng)建一個接口HelloWorld和一個實現(xiàn)類HelloWorldImpl,只提供一個成員方法,叫做sayHello,給接口和實現(xiàn)類添加注解WebService,這是最基本的注解/test/HellWorld.java源碼package test;import javax.jws.WebService;WebServicepublic interface HelloWorld String sayHello(String name);/test/HelloWorldImpl.java源碼package test;import javax.jws.WebService;WebServicepublic class HelloWorldImpl implements HelloWorld Overridepublic String sayHello(String name) System.out.println(sayHello方法被調(diào)用.);return hello, + name;CXF自帶了一個Web Service容器Jetty,這是一個WEB容器,類似于tomcat,能夠直接發(fā)布web service,下面創(chuàng)建一個發(fā)布服務類MainServer,執(zhí)行這個類就會運行服務器,看到控制臺輸出日志信息,表示啟動服務成功/test/MainServier.java源碼package test;import org.apache.cxf.endpoint.Server;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;public class MainServer public static void main(String args) /創(chuàng)建一個JaxWs服務器工廠JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();/設置發(fā)布類factory.setServiceClass(HelloWorldImpl.class);/設置服務發(fā)布的地址factory.setAddress(http:/localhost:6666/MyCxfService);/根據(jù)設置創(chuàng)建一個服務器Server server = factory.create();/啟動服務器server.start(); 發(fā)布成功以后,可以通過瀏覽器去查看生成的WSDL,在瀏覽器地址欄輸入http:/localhost:6666/MyCxfService?wsdl,效果如下:下面創(chuàng)建訪問WebService的客戶端,可以重新創(chuàng)建一個項目,也可以就在這個項目里實現(xiàn),我下面在同一個項目中創(chuàng)建一個類HelloWorldCient/test/HelloWorldClient.java源碼package test;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean;public class HelloWorldClient public static void main(String args) /創(chuàng)建一個JaxWs的代理工廠JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();/設置訪問地址factory.setAddress(http:/localhost:6666/MyCxfService);/設置接口類型factory.setServiceClass(HelloWorld.class);/獲得代理類實例HelloWorld helloWorld = (HelloWorld) factory.create();/調(diào)用方法String str = helloWorld.sayHello(張三);System.out.println(str);運行客戶端,會看到控制臺,輸出:hello,張三2 WSDL結構分析主要通過上一章生成的WSDL,來對WSDL語言的標簽進行解釋Web Services Description Language的縮寫,是一個用來描述Web服務和說明如何與Web服務通信的XML語言。為用戶提供詳細的接口說明書。查看剛才生成的WSDL,可以分析出以下的知識點:wsdl:definitions:根標簽屬性name=HelloWorldImplService:服務名稱設置,HelloWorldImplService系統(tǒng)自動按照類名生成的,當然這個名字可以通過注解設置進行自定義屬性targetNamespace=http:/test/ :名稱空間設置,默認會用反寫包名作為名稱空間,例如,包名是com.icss.test,那么名稱空間就是/,通過注解設置也可以自定義wsdl:types元素: 使用某種語法(如 XML 模式)的數(shù)據(jù)類型定義(string、int),描述了接口中方法的參數(shù)(輸入?yún)?shù))和返回值(輸出參數(shù))名稱和類型可以通過注解來給輸入?yún)?shù)的名字和輸出參數(shù)的名字進行自定義,默認是輸出參數(shù)是return和第一個輸入?yún)?shù)是arg0,被修改為sayHelloResult和nameWebServicepublic interface HelloWorld WebResult(name=sayHelloResult)String sayHello(WebParam(name=name)String name);wsdl:message元素:描述要傳遞的數(shù)據(jù),web service是把請求和響應都包裝成一個message來傳遞,客戶端把請求封裝成message傳遞給服務器,而服務器把響應封裝成message發(fā)送回客戶端part元素:消息參數(shù)wsdl:portType/ Interface元素:一個或多個端點支持的操作的抽象集。此名稱已更改,因此可能會遇到兩者中的任何一個。這個元素其實就是對應我們的接口。接口中的每一個方法被映射為一個Operation元素wsdl:binding元素:特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范,設置協(xié)議,一般都是soap協(xié)議wsdl:service元素:一個接口就是一個portType,如果我們有很多接口,那么就組成一個service,包含很多訪問地址3 WebService工作原理以及SOAP簡介Webservice工作原理大致流程:客戶端向服務器端發(fā)出一個GET請求,然后響應的就是WSDL,告訴客戶端有哪些暴露的接口功能可以調(diào)用。Webservice提供一個工具類,叫做WSDL2Java,可以根據(jù)WSDL生成一系列的代理類。當客戶端得到WSDL之后,就會向服務器端發(fā)出一個SOAP請求,這個SOAP請求就是一段XML,然后服務器端接收到SOAP請求,再對這個請求進行解析,然后再把請求的結果返回客戶端??蛻舳朔掌鞫薌ET請求WSDLSOAP請求SOAP響應在服務器端代碼加入兩個日志攔截器,可以看到每次請求和響應的日志信息,代碼如下/設置服務發(fā)布的地址factory.setAddress(http:/localhost:6666/MyCxfService);/加入一個接收請求日志攔截器factory.getInInterceptors().add(new LoggingInInterceptor();/加入一個返回響應日志攔截器factory.getOutInterceptors().add(new LoggingOutInterceptor();/根據(jù)設置創(chuàng)建一個服務器Server server = factory.create();4 JAX-WSJAX-WS規(guī)范是一組SUN公司提供的XML web services的標準JAVA API,主要提供兩個包的類,分別是javax.jws和javax.jws.soap,例如WebService就是這兩個包中的注解通過CXF下載包中bin目錄中的wadl2java命令可以把一個wsdl文檔轉(zhuǎn)換為對應的java文件,這個就不掩飾了5 JAXBJAXB(Java Architecture for XML Binding) 是一個業(yè)界的標準,是一項可以根據(jù)XML Schema產(chǎn)生Java類的技術。該過程中,JAXB也提供了將XML實例文檔反向生成Java對象樹的方法,并能將Java對象樹的內(nèi)容重新寫到XML實例文檔。從另一方面來講,JAXB提供了快速而簡便的方法將XML模式綁定到Java表示,從而使得Java開發(fā)者在Java應用程序中能方便地結合XML數(shù)據(jù)和處理函數(shù)。主要功能就是把一個java對象映射成一段XML,也可以反向把一段XML映射為一個java文件通過JAXB的一些注解可以對把一個java bean類轉(zhuǎn)換為XML進行具體設置,例如哪些屬性不轉(zhuǎn)換啦,哪些方法做轉(zhuǎn)換啦,等等6 Spring和CXF整合可用通過Spring來發(fā)布CXF的web serivce,但是這樣就需要用到tomcat服務器,這樣也會出現(xiàn)jar包沖突異常。解決辦法就是通過執(zhí)行system.out.println(System.getProperty(java.endorsed.dirs);找到相應位置,將jaxb-api-2.1.jar和jaxb-impl-2.1.12.jar放到對應目錄下即可。沒有endorsed目錄,自己建一個。 我的WEB項目中,打印出來的路徑是:D:Tomcat 6.0/common/endorsed,我直接把CXF包中的lib目錄中的endorsed目錄拷貝到D:Tomcat 6.0/common中就好用了,沒有common目錄自己創(chuàng)建一個具體搭配環(huán)境步驟:1、 創(chuàng)建項目CxfSpring,通過myeclipse引入Spring核心jar包和cxf的jar包2、 創(chuàng)建包中的接口和類,分別加上WebService注解com.cwj.test.Ihelloworld.java源碼package com.cwj.test;import javax.jws.WebService;WebServicepublic interface IHelloWorld String sayHello(String name);com.cwj.test.HelloWorldImpl.java源碼package com.cwj.test;import javax.jws.WebService;WebServicepublic class HelloWorldImpl implements IHelloWorld Overridepublic String sayHello(String name) System.out.println(sayHello方法被調(diào)用.);return 你好, + name;3、 在WEB-INF目錄下(或者是在src下)創(chuàng)建一個beans.xml配置文件,在這個配置文件中配置端點beans文件名其實是自定義的,源碼如下:!- -如果是用配置端點方式2,那么就需要在的spring配置文件中定義bean類,其實這兩個配置文件可以寫成一個,也可以寫成多個,不管幾個文件反正都需要在web.xm文件中引用applicationContext.xml配置文件源碼 4、 在web.xml文件中配置初始化spring容器和cxf的核心servletweb.xml源碼contextConfigLocationclasspath:applicationContext.xml,WEB-INF/beans.xmlorg.springframework.web.context.ContextLoaderListenerCXFServletorg.apache.cxf.transport.servlet.CXFServlet1CXFServlet/service/*index.jsp這時候打開瀏覽器輸入http:/localhost:7777/CxfSpring/service,訪問service根目錄,可以看到service信息列表點擊service鏈接,可以看到service的wsdl下面創(chuàng)建一個客戶端項目CxfSpringClient,引入spring核心jar包和cxf所有jar包,利用spring去訪問webservice1、 創(chuàng)建com.c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年加拿大移民英語考試(CELPIP)生活與工作場景真題模擬試卷(日常對話篇)
- 2025年消防安全應急處置員應急疏散考試試題
- 醫(yī)學生心理健康教育課件
- 2025年人力資源管理師一級專業(yè)技能方案設計實戰(zhàn)案例與模擬試題
- 財務成本管理復習checklist試題及答案
- 安徽省六安市第一中學2017-2018學年高二政治上學期第二次階段性考試試題(含解析)
- IGCSE英語語言2024-2025年模擬試卷文學分析閱讀與寫作技巧
- 高中生物必修二模塊生態(tài)學專題測試卷2025版
- 2025證券分析師研究報告業(yè)務沖刺卷(含財報分析)真題解析
- Delphi異常類型與處理試題及答案
- 安全培訓管理體系
- 古詩教案模板范文
- 屠宰場安全培訓
- 光伏電站運維課件
- 廠區(qū)綠化環(huán)境提升方案
- 南京工業(yè)大學《化工廢水處理》2022-2023學年第一學期期末試卷
- 高三第二輪復習之文言翻譯(李麗君)省公開課獲獎課件市賽課比賽一等獎課件
- 科研機構科技創(chuàng)新激勵制度
- 教輔資料進校園審批制度
- 產(chǎn)品代理合同協(xié)議書2024年
- 九年級你準備好了嗎崔喜利公開課獲獎課件百校聯(lián)賽一等獎課件
評論
0/150
提交評論