webservice培訓(xùn)文檔_第1頁
webservice培訓(xùn)文檔_第2頁
webservice培訓(xùn)文檔_第3頁
webservice培訓(xùn)文檔_第4頁
免費預(yù)覽已結(jié)束,剩余21頁可下載查看

下載本文檔

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

文檔簡介

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

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

3、的任何功能。一旦部署以后,其他Web Service應(yīng)用程序可以發(fā)現(xiàn)并調(diào)用它部署的服務(wù)。WebService是一種應(yīng)用程序,它運用了Web網(wǎng)絡(luò)技術(shù)和基于組件開發(fā)的精華成分??梢允褂脴?biāo)準(zhǔn)的互聯(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就是一個應(yīng)用程序,它向外界暴露出一個能夠通過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ù)、多種服務(wù)的聚合(mashup)1.3 Axis21.3.1 Axis2簡介Axis2 是目前比較流行的 WebService 引擎。 WebService 被應(yīng)用在很多不同的場景。例如,可以使用 WebService 來發(fā)布服務(wù)端 Java 類的方法,以便使用不同的客戶端進行調(diào)用。這樣可以有效地集成多種不同的技術(shù)來完成應(yīng)用系統(tǒng)。WebService 還經(jīng)常被使用在SOA中,用于SOA各個部分交換數(shù)據(jù)。1.3.2 Axis2服務(wù)端發(fā)布 項目集成 Axis2要在自己項目

6、中使用Axis2 進行 webservice 接口的開發(fā),首先需要將axis2 與項目工程進行集成,這樣便于之后的接口服務(wù)端的開發(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 如果想使用無配置文件的方式進行服務(wù)的發(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><!如果需要使用無配置文件的方式進行服務(wù)的發(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 編寫服務(wù)端程序代碼,舉例如下 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 服務(wù)器,訪問http:/ip:port/projectName/services/Asix2Service?wsdl4 使用該方式進行服務(wù)的發(fā)布,需要進行服務(wù)器的重啟才能生效。 無需配置發(fā)布1 下載 eclipse 插件,地址: /axis2/java/core/tools/index.html下載后將插件安裝到eclipse2 編寫服務(wù)端程序代碼,舉例如下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 選擇你當(dāng)前的工程的classes目錄點擊 Next沒有 WSDL,選擇第一項,點擊Next ,然后再Next 一次不用設(shè)置 service.xml,直接 Next最關(guān)鍵一

17、步,填寫WebService 的 Name,設(shè)置 class路徑點擊Load 就能看到當(dāng)前class的方法勾中的方法表示將會被暴露到客戶端可以調(diào)用的方法,然后點擊Next設(shè)置 aar 文件的名稱和保持的目錄點擊 Finish你可以看到提示successfully的提示。刷新當(dāng)前工程可以看到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。/當(dāng)方法沒有參數(shù)時,invokeBlocking 方法的第二個參數(shù)值不能是null ,而要使用 newObject/如果被調(diào)用的WebService 方法沒有返回值,

22、應(yīng)使用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接口時非常方便,不需要引入第三方j(luò)ar包。1.4.2 服務(wù)端開發(fā)與發(fā)布1.服務(wù)端程序代碼舉例如下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ā)布服務(wù)Endpoint.publish("17:8888/jdk16Service", new JdkServi

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

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

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

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

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

30、 return 。對于 DOCUMENT/BARE綁定,缺省值為方法名 +Response。(字符串)-targetNamespace指定返回值的XML名稱空間。僅當(dāng)操作類型為RPC或者操作是文檔類型并且參數(shù)類型為BARE時才使用此參數(shù)。 (字符串)-header指定頭中是否附帶結(jié)果。缺省值為false 。(布爾值)-partName指定 RPC或 DOCUMENT/BARE操作的結(jié)果的部件名稱。缺省值為WebR。(字符串)5. SOAPBinding注釋指定 WebService 與 SOAP消息協(xié)議之間的映射。注釋目標(biāo):類型或方法屬性:-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ù)上面舉例的服務(wù)端生成的客戶端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 包導(dǎo)入到項目工程中,至少包含以下 jar 包:1.5.3 CXF服務(wù)端接口程序編寫與jdk自帶 webservice服務(wù)端編寫相同,同樣采用注解的方式,程序代碼舉例如下: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ā)布服務(wù)IHelloWorld helloWorld = new HelloWorldImpl();/ 創(chuàng)建 WebService 服務(wù)工廠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);/ 響應(yīng)超時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 到相應(yīng)的磁盤目錄下,如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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論