webservice培訓文檔_第1頁
webservice培訓文檔_第2頁
webservice培訓文檔_第3頁
webservice培訓文檔_第4頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、接口開發(fā)目錄接口開發(fā)培訓文檔.11.Webservice 接口開發(fā) .21.1WebService 簡介 .21.2WebService 優(yōu)越性 .21.3AxisAxis2 簡介 .21.3.2Axis2 服務端發(fā)布 .31.3.3Axis2 客戶端 .91.4Jdk1.6+自帶 webservice .101.4.1簡介 .101.4.2服務端開發(fā)與發(fā)布 .101.4.3客戶端開發(fā) .131.5CXF.141.5.1CXF簡介 .141.5.2CXF下載 .141.5.3CXF服務端 .151.5.4CXF客戶端 .162.FTP接口開發(fā).182.1創(chuàng)建 FtpClient

2、 實例 .182.2獲取 ftp 服務器連接、登錄、切換遠程路徑.182.3FTP上傳 .192.4FTP下載 .192.5關(guān)閉 FtpClient 實例 .203.Socket 接口開發(fā) .203.1客戶端 / 服務端工作模式 .203.2TCP 協(xié)議和 UDP 協(xié)議 .203.3Socket 概況 .213.4服務端創(chuàng)建 .213.5客戶端創(chuàng)建 .221.Webservice接口開發(fā)1.1 WebService 簡介Web Service是一種新的Web應用程序分支,他們是自包含、自描述、模塊化的應用,可以發(fā)布、定位、通過Web調(diào)用。 WebService可以執(zhí)行從簡單的請求到復雜商務處理

3、的任何功能。一旦部署以后,其他Web Service應用程序可以發(fā)現(xiàn)并調(diào)用它部署的服務。WebService是一種應用程序,它運用了Web網(wǎng)絡技術(shù)和基于組件開發(fā)的精華成分??梢允褂脴藴实幕ヂ?lián)網(wǎng)協(xié)議,像超文本傳輸協(xié)議(HTTP) 和 XML,將功能綱領(lǐng)性地體現(xiàn)在互聯(lián)網(wǎng)和企業(yè)內(nèi)部網(wǎng)上。像DCOM、 RMI、 IIOP 等基于組件的對象模型已經(jīng)流行了較長一段時間了。然而這些模型都是依賴于一個特定的對象模型協(xié)議。WebService擴展了這些模型,使之可以和簡單對象訪問協(xié)議(Simple Object Access Protocol, SOAP)以及 XML通信以根除特定對象模型協(xié)議帶來的障礙??蓪

4、ebService 視作 Web上的組件編程。簡單來說,Webservice就是一個應用程序,它向外界暴露出一個能夠通過Web進行調(diào)用的接口。目前常用的webService框架有AXIS、 XFIRE、 CXF1.2 WebService 優(yōu)越性WebService 有以下的優(yōu)越性:1 平臺無關(guān)。不管你使用什么平臺,都可以使用Web service。2 編程語言無關(guān)。只要遵守相關(guān)協(xié)議,就可以使用任意編程語言,向其他網(wǎng)站要求Webservice。這大大增加了web service的適用性,降低了對程序員的要求。3 對于Web service提供者來說,部署、升級和維護Web service都非常

5、單純,不需要考慮客戶端兼容問題,而且一次性就能完成。4 對于Web service使用者來說,可以輕易實現(xiàn)多種數(shù)據(jù)、多種服務的聚合(mashup)1.3 Axis21.3.1 Axis2簡介Axis2 是目前比較流行的 WebService 引擎。 WebService 被應用在很多不同的場景。例如,可以使用 WebService 來發(fā)布服務端 Java 類的方法,以便使用不同的客戶端進行調(diào)用。這樣可以有效地集成多種不同的技術(shù)來完成應用系統(tǒng)。WebService 還經(jīng)常被使用在SOA中,用于SOA各個部分交換數(shù)據(jù)。1.3.2 Axis2服務端發(fā)布 項目集成 Axis2要在自己項目

6、中使用Axis2 進行 webservice 接口的開發(fā),首先需要將axis2 與項目工程進行集成,這樣便于之后的接口服務端的開發(fā)與發(fā)布。1 開發(fā)環(huán)境: apache tomcat6.0+ 、 jdk1.6+ 、 axis2-1.6+, tomcat6.0以上版本與axis2-1.5版本不兼容。2 下載 axis2-1.6.2-war.zip,地址: /axis2/java/core/download.cgi3 將下載后的zip 包解壓縮,進一步講里面的axis2.war 解壓縮,將兩個目錄copy 到項目工程的根目錄下,將WEB-INF 下的四個目錄

7、copy 到項目工程的WEB-INF下4 如果想使用無配置文件的方式進行服務的發(fā)布的話,接下來需要將的 class 文件 (包含 class 的包路徑, org/ apache/axis2.)打成 jarWEB-INF/ classes 下包添加到項目功能的lib下,5 項目工程web.xml 文件中配置如下:<!-Axis2 config start-><servlet><servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport

8、.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup></servlet><!如果需要使用無配置文件的方式進行服務的發(fā)布,則需要配置該servlet -><servlet><servlet-name>AxisAdminServlet</servlet-name><display-name>Apache-Axis AxisAdmin Servlet (Web Admin)</display-name

9、><servlet-class>org.apache.axis2.webapp.AxisAdminServlet</servlet-class></servlet><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisA

10、dminServlet</servlet-name><url-pattern>/axis2-admin/*</url-pattern></servlet-mapping><!-Axis2end-> 手動配置發(fā)布1 編寫服務端程序代碼,舉例如下 package com.neusoft.axis2; import com.neusoft.model.User; public class Asix2Service public String getName() return "xiaoming"Asix2S

11、ervice.java:public String sayHello(String name) return "hello " + name;public int login(User user) System.out.println(user.getName();return 1;public User getUser(String name, String sex, int age) return new User(name,age,sex);2 在項目工程WEB-INFservices 目錄下創(chuàng)建Asix2ServiceMETA-INFservices.xml 文件,

12、文件內(nèi)容如下:<?xml version="1.0" encoding="UTF-8"?><service name="Asix2Service"><description> Asix2Service Service Example </description><parameter name="ServiceClass"> com.neusoft.axis2.Asix2Service </parameter> <operation nam

13、e="getName"><messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /></operation><operation name="sayHello"><messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation><opera

14、tion name="login"><messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /></operation><operation name="getUser"><messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /></operation></

15、service>3 啟動 tomcat 服務器,訪問http:/ip:port/projectName/services/Asix2Service?wsdl4 使用該方式進行服務的發(fā)布,需要進行服務器的重啟才能生效。 無需配置發(fā)布1 下載 eclipse 插件,地址: /axis2/java/core/tools/index.html下載后將插件安裝到eclipse2 編寫服務端程序代碼,舉例如下Axis2ServiceNoConfig.java:package com.neusoft.axis2;public class Axis

16、2ServiceNoConfig public String doSth(String sth) System.out.println(sth);return sth;3 使用 axis2 的 eclipse 插件 serviceArchiveWizard 工具生成aar 文件點擊工作空間WorkSpace,右鍵 New選擇 Other選擇 Axis2 Service Archiver,點擊 Next然后點擊 Browser 選擇你當前的工程的classes目錄點擊 Next沒有 WSDL,選擇第一項,點擊Next ,然后再Next 一次不用設置 service.xml,直接 Next最關(guān)鍵一

17、步,填寫WebService 的 Name,設置 class路徑點擊Load 就能看到當前class的方法勾中的方法表示將會被暴露到客戶端可以調(diào)用的方法,然后點擊Next設置 aar 文件的名稱和保持的目錄點擊 Finish你可以看到提示successfully的提示。刷新當前工程可以看到Axis2ServiceNoConfig.aar文件了4 在瀏覽器中訪問地址http:/ip:port/projectName/axis2-web/index.jsp點擊 Administration , 可以看到要輸入用戶名和密碼,用戶名和密碼在WEB-INFconf下的 axis2.xml中可以找到<

18、;parameter name="userName">admin</parameter><parameter name="password">axis2</parameter>5 進入管理頁面后,可以看到如下功能6 使用 Upload Service這個工具,然后選擇我們剛才用axis2 的工具生成aar 文件 ,upload上傳。其實這一步我們可以直接將Axis2ServiceNoConfig.aar文件 copy 到 WEB-INFservices這個目錄下。7 然后點擊Available Service就可

19、以看到Axis2ServiceNoConfig這個 Service了1.3.3 Axis2客戶端以下客戶端使用動態(tài)生成客戶端的開發(fā)方式,無需手動使用工具根據(jù)wsdl 生成客戶端代碼,String url = "http:/ip:port/projectName/services/Axis2ServiceNoConfig"String method = "doSth"/ 參數(shù),如果有多個,繼續(xù)往后面增加即可,不用指定參數(shù)的名稱Object args = new Object "hello"String classes = new Cla

20、ss String.class ;RPCServiceClient serviceClient = new RPCServiceClient();Options options = serviceClient.getOptions();EndpointReference targetEPR = new EndpointReference(url);options.setTo(targetEPR);/在創(chuàng)建 QName 對象時, QName 類的構(gòu)造方法的第一個參數(shù)表示W(wǎng)SDL 文件的命名空間名,也就是 <wsdl:definitions> 元素的 targetNamespace 屬

21、性值QName qName = new QName("", method);/返回參數(shù)類型,這個和axis1 有點區(qū)別/ invokeBlocking 方法有三個參數(shù),其中第一個參數(shù)的類型是QName 對象,表示要調(diào)用的方法名;/第二個參數(shù)表示要調(diào)用的WebService 方法的參數(shù)值,參數(shù)類型為Object ;/第三個參數(shù)表示 WebService 方法的返回值類型的 Class對象,參數(shù)類型為 Class。/當方法沒有參數(shù)時,invokeBlocking 方法的第二個參數(shù)值不能是null ,而要使用 newObject/如果被調(diào)用的WebService 方法沒有返回值,

22、應使用RPCServiceClient 類的 invokeRobust方法,/ 該方法只有兩個參數(shù),它們的含義與invokeBlocking 方法的前兩個參數(shù)的含義相同String result = (String) serviceClient.invokeBlocking(qName, args, classes)0;1.4 Jdk1.6+ 自帶 webservice1.4.1 簡介JDK1.6+中自帶了 webservice的功能,因為集成了JAX-WS,在開發(fā) webservice接口時非常方便,不需要引入第三方jar包。1.4.2 服務端開發(fā)與發(fā)布1.服務端程序代碼舉例如下JdkSer

23、viceImpl.java:WebService(name="JdkServic",portName="JdkServicPort",serviceName="JdkServicName",targetNamespace="")SOAPBinding(style = Style.RPC,use = Use.LITERAL)public class JdkServiceImpl implements IJdkService OverrideWebMethod(action="doService",

24、 operationName="doJdkService")WebResult(name="String", partName="result")public String doJdkService(WebParam(name = "paramA") String args)System.out.println(args);return args;2. 發(fā)布服務Endpoint.publish("17:8888/jdk16Service", new JdkServi

25、ceImpl();Jdk 自帶 webservice的功能實現(xiàn)主要通過注解的方式,注解內(nèi)容詳解如下:1. WebService注釋規(guī)則信息注釋目標: class 類屬性:-name 對應 wsdl:portType 的名稱,缺省值為 Java 類或接口的非限定名稱。 (字符串)-targetNamespace 指定從 WebService 生成的 WSDL和 XML元素的 XML名稱空間。缺省值為從包含該 WebService 的包名映射的名稱空間。 (字符串)-serviceName指定 WebService 的服務名稱: wsdl:service。缺省值為 Java 類的簡單名稱+Serv

26、ice 。(字符串)-portName wsdl:portName。缺省值為WebS+Port 。(字符串)-endpointInterface指定用于定義服務的抽象WebService 約定的服務端點接口的限定名。如果指定了此限定名,那么會使用該服務端點接口來確定抽象WSDL約定。(字符串)-wsdlLocation指定用于定義WebService 的 WSDL文檔的 Web地址。 Web地址可以是相對路徑或絕對路徑。 (字符串)2. WebMethod注釋表示作為一項 WebService 操作的方法。僅支持在使用 WebService來注釋的類上使用 WebMeth

27、od。注釋目標:方法屬性:-operationName指定與此方法相匹配的wsdl:operation的名稱,缺省值為Java 方法的名稱。(字符串)-action定義此操作的行為。對于 SOAP綁定, 此值將確定SOAPAction 頭的值。 缺省值為 Java 方法的名稱。(字符串)-exclude指定是否從WebService 中排除某一方法。缺省值為false 。(布爾值)3. WebParam注釋用于定制從單個參數(shù)至 WebService 消息部件和 XML元素的映射。注釋目標:參數(shù)屬性:-name 參數(shù)的名稱。如果操作是遠程過程調(diào)用(RPC)類型并且未指定partName 屬性,那

28、么這是用于表示參數(shù)的 wsdl:part屬性的名稱。 如果操作是文檔類型或者參數(shù)映射至某個頭,那么 -name 是用于表示該參數(shù)的 XML元素的局部名稱。如果操作是文檔類型、參數(shù)類型為 BARE并且方式為 OUT或 INOUT,那么必須指定此屬性。 (字符串)-partName 定義用于表示此參數(shù)的wsdl:part屬性的名稱。 僅當操作類型為 RPC或者操作是文檔類型并且參數(shù)類型為BARE時才使用此參數(shù)。 (字符串)-targetNamespace 指定參數(shù)的XML元素的 XML名稱空間。當屬性映射至XML元素時,僅應用于文檔綁定。缺省值為WebService 的 targetNamespa

29、ce 。(字符串)-mode 此值表示此方法的參數(shù)流的方向。有效值為IN、 INOUT和 OUT。(字符串)-header 指定參數(shù)是在消息頭還是消息體中。缺省值為false 。(布爾值)4. WebResult注釋用于定制從返回值至 WSDL部件或 XML元素的映射。注釋目標:方法屬性:-name 當返回值列示在 WSDL文件中并且在連接上的消息中找到該返回值時,指定該返回值的名稱。 對于 RPC綁定,這是用于表示返回值的 wsdl:part 屬性的名稱。 對于文檔綁定,-name 參數(shù)是用于表示返回值的 XML元素的局部名。 對于 RPC和 DOCUMENT/WRAPPED 綁定,缺省值為

30、 return 。對于 DOCUMENT/BARE綁定,缺省值為方法名 +Response。(字符串)-targetNamespace指定返回值的XML名稱空間。僅當操作類型為RPC或者操作是文檔類型并且參數(shù)類型為BARE時才使用此參數(shù)。 (字符串)-header指定頭中是否附帶結(jié)果。缺省值為false 。(布爾值)-partName指定 RPC或 DOCUMENT/BARE操作的結(jié)果的部件名稱。缺省值為WebR。(字符串)5. SOAPBinding注釋指定 WebService 與 SOAP消息協(xié)議之間的映射。注釋目標:類型或方法屬性:-style 定義發(fā)送至 WebS

31、ervice 和來自 WebService 的消息的編碼樣式。有效值為DOCUMENT和 RPC。缺省值為DOCUMENT。(字符串)-use定義用于發(fā)送至WebService 和來自 WebService 的消息的格式。 缺省值為 LITERAL。ENCODED在 FeaturePackforWebServices中不受支持。(字符串)-parameterStyle確定方法的參數(shù)是否表示整個消息體,或者參數(shù)是否是封裝在執(zhí)行操作之后命名的頂級元素中的元素。有效值為WRAPPED或 BARE。對于 DOCUMENT類型的綁定只能使用BARE值。缺省值為WRAPPED。(字符串)1.4.3 客戶端

32、開發(fā)Jdk 提供了一個wsimport工具,在 jdk/bin目錄下,這個工具可以生成JAVA客戶端的調(diào)用代碼,進入DOS下,執(zhí)行wsimport -s e:/test -keep17:8888/jdk16Service?wsdl命令,便可在 e:/test目錄下生成客戶端代碼,根據(jù)上面舉例的服務端生成的客戶端java文件如下:客戶端代碼如下:JdkServicName jsn = new JdkServicName();jsn.getJdkServicPort().doJdkService("doJdkService." );由上面的例子,可

33、以看出使用 jdk1.6+ 自帶的 webservice 功能,開發(fā)非常方便,代碼也非常簡潔。1.5 CXF1.5.1 CXF簡介Apache CXF = Celtix + XFire, Apache CXF的前身叫Apache CeltiXfire,現(xiàn)在已經(jīng)正式更名為ApacheCXF 了,以下簡稱為CXF 。CXF 繼承了Celtix和 XFire兩大開源項目的精華,提供了對JAX-WS 全面的支持,并且提供了多種Binding、DataBinding、Transport以及各種Format的支持, 并且可以根據(jù)實際項目的需要,采 用 代 碼 優(yōu) 先 ( Code First) 或 者WS

34、DL 優(yōu) 先 ( WSDL First) 來 輕 松 地 實 現(xiàn)WebServices的發(fā)布和使用。Apache CXF 已經(jīng)是一個正式的Apache 頂級項目。1.5.2 CXF下載下載地址:/download.html將下載的 apache-cxf-2.7.0.zip 壓縮包解壓,將 lib 目錄下的 jar 包導入到項目工程中,至少包含以下 jar 包:1.5.3 CXF服務端接口程序編寫與jdk自帶 webservice服務端編寫相同,同樣采用注解的方式,程序代碼舉例如下:1 接口類IHelloWorld.javaWebServicepublic

35、 interface IHelloWorld WebMethodString sayHello(WebParam(name="name") String name);2 實現(xiàn)類HelloWorldImpl.javaWebServicepublic class HelloWorldImpl implements IHelloWorld Overridepublic String sayHello(String name) System.out.println("sayHello is called by " + name);return "hel

36、lo " + name;3 發(fā)布服務IHelloWorld helloWorld = new HelloWorldImpl();/ 創(chuàng)建 WebService 服務工廠JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();/ 注冊 WebService 接口factory.setServiceClass(IHelloWorld.class);/ 發(fā)布接口factory.setAddress("17:8888/HelloWorld");factory.setServi

37、ceBean(helloWorld);/ 創(chuàng)建 WebServicefactory.create();1.5.4 CXF客戶端1. 動態(tài)客戶端該方式主要使用了JaxWsDynamicClientFactory工廠類,代碼開發(fā)比較簡單, 但是性能較低,以下代碼中在createClient操作中, 會動態(tài)生產(chǎn)webservice下所有方法類、 參數(shù)類、 返回值類等等文件,代替了手動使用命令生成客戶端文件的步驟,耗時很大,所以會很慢。String url = "17:8888/HelloWorld?wsdl"/ 創(chuàng)建工廠實例JaxWsDynamicC

38、lientFactory dcf = JaxWsDynamicClientFactory.newInstance ();org.apache.cxf.endpoint.Client client = dcf.createClient(url); HTTPConduit http = (HTTPConduit) client.getConduit(); HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();/ 連接超時httpClientPolicy.setConnectionTimeout(60000);/ 取消塊編碼httpCl

39、ientPolicy.setAllowChunking( false);/ 響應超時httpClientPolicy.setReceiveTimeout(60000);http.setClient(httpClientPolicy);Objectobjects= client.invoke( "sayHello" , "jack" );2. 生成 java 客戶端代碼1) 下載的 apache-cxf-2.7.0.zip包中, bin 目錄下是 cxf 提供的工具,將解壓縮后的apache-cxf-2.7.0目錄 copy 到相應的磁盤目錄下,如D:pr

40、ograms2) 配置 cxf 環(huán)境變量創(chuàng)建一個CXF_HOME變量,值為 CXF框架所在根目錄 (如 D:programsapache-cxf-2.7.0);配置 CLASSPATH: %CXF_HOME%lib; PATH: %CXF_HOME%bin;3) 執(zhí)行命令,生成客戶端代碼進入 DOS模式下,執(zhí)行 wsdl2java -p com.neusoft.cxf -d e:test -client 17:8888/HelloWorld?wsdl將生成的客戶端代碼 copy 到項目工程下,如下圖:編寫客戶端調(diào)用代碼,CxfClien.java文件,代碼如下:IHelloWorldService hs = new IHelloWorldService();String result = hs.getIHelloWorldPort().sayHello( "jack");4) CXF wsdl2java 命令詳解 wsdl2java -p com -d src -all aa.wsdl-p指定其 wsdl 的命名空間,也就是要生成代碼的包名:-d指定要產(chǎn)生代碼所在目錄-client生成客戶端測試web service的代碼-server生成

溫馨提示

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

最新文檔

評論

0/150

提交評論