




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、WebService大講堂之Axis2(2):復(fù)合類型數(shù)據(jù)的傳遞在實(shí)際的應(yīng)用中,不僅需要使用WebService來傳遞簡單類型的數(shù)據(jù),有時(shí)也需要傳遞更復(fù)雜的數(shù)據(jù),這些數(shù)據(jù)可以被稱為復(fù)合類型的數(shù)據(jù)。數(shù)組與類(接口)是比較常用的復(fù)合類型。在Axis2中可以直接使用將WebService方法的參數(shù)或返回值類型聲明成數(shù)組或類(接口)。但要注意,在定義數(shù)組類型時(shí)只能使用一維數(shù)組,如果想傳遞多維數(shù)組,可以使用分隔符進(jìn)行分隔,如下面的代碼所示:String strArray = new String "自行車,飛機(jī),火箭","中國,美國,德國", "超人,蜘
2、蛛俠,鋼鐵俠" ; 上面的代碼可以看作是一個(gè)3*3的二維數(shù)組。 在傳遞類的對象實(shí)例時(shí),除了直接將數(shù)組類型聲明成相應(yīng)的類或接口,也可以將對象實(shí)例進(jìn)行序列化,也就是說,將一個(gè)對象實(shí)例轉(zhuǎn)換成字節(jié)數(shù)組進(jìn)行傳遞,然后接收方再進(jìn)行反序列化,還原這個(gè)對象實(shí)例。 下面的示例代碼演示了如何傳遞數(shù)組與類(接口)類型的數(shù)據(jù),并演示如何使用字節(jié)數(shù)組上傳圖像。本示例的客戶端代碼使用Java和C#編寫。要完成這個(gè)例子需要如下幾步:一、實(shí)現(xiàn)服務(wù)端代碼 ComplexTyp
3、eService是一個(gè)WebService類,該類的代碼如下:import java.io.FileOutputStream;import data.DataForm;public class ComplexTypeService / 上傳圖像,imageByte參數(shù)表示上傳圖像文件的字節(jié), / length參數(shù)表示圖像文件的字節(jié)長度(該參數(shù)值可能小于imageByte的數(shù)組長度)
4、160;public boolean uploadImageWithByte(byte imageByte, int length) FileOutputStream fos = null; try &
5、#160; / 將上傳的圖像保存在D盤的test1.jpg文件中 fos = new FileOutputStream("d:test1.jpg");
6、; / 開始寫入圖像文件的字節(jié) fos.write(imageByte, 0, length); fos.close();
7、; catch (Exception e) return false;
8、 finally if (fos != null)
9、0; try fos.close(); &
10、#160; catch (Exception e)
11、160; return true;
12、60; / 返回一維字符串?dāng)?shù)組 public String getArray() String strArray = new String "自行車", "飛機(jī)", "火箭"
13、0; return strArray; / 返回二維字符串?dāng)?shù)組 public String getMDArray() String strArray = new Str
14、ing "自行車,飛機(jī),火箭","中國,美國,德國", "超人,蜘蛛俠,鋼鐵俠" return strArray; / 返回DataForm類的對象實(shí)例 public DataForm getDataForm(
15、) return new DataForm(); / 將DataForm類的對象實(shí)例序列化,并返回序列化后的字節(jié)數(shù)組 public byte getDataFormBytes() throws Exception
16、 java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(baos);
17、60; oos.writeObject(new DataForm(); return baos.toByteArray(); 二、實(shí)現(xiàn)DataForm類 DataF
18、orm是要返回的對象實(shí)例所對應(yīng)的類,該類的實(shí)現(xiàn)代碼如下: package data;public class DataForm implements java.io.Serializable private String name = "bill" private int age = 20; public
19、60;String getName() return name; public void setName(String name) =
20、0;name; public int getAge() return age; public void setAge(int age)
21、160; this.age = age; 三、發(fā)布WebService 由于本示例的WebService類使用了一個(gè)Java類(DataForm類),因此,在發(fā)布WebService之前,需要先將DataForm.class文件復(fù)制到<Tomcat安裝目錄>webappsaxis2WEB-INFclassesdata目錄中,然后將ComplexTypeService.class文件復(fù)制到<Tomcat安裝目錄>w
22、ebappsaxis2WEB-INFpojo目錄中,最后啟動(dòng)Tomcat(如果Tomcat已經(jīng)啟動(dòng),由于增加了一個(gè)DataForm類,因此,需要重新啟動(dòng)Tomcat)。四、使用Java編寫調(diào)用WebService的客戶端代碼 在客戶端仍然使用了RPC的調(diào)用方式,代碼如下:package client;import space.QName;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.c
23、lient.Options;import org.apache.axis2.rpc.client.RPCServiceClient;public class ComplexTypeRPCClient public static void main(String args) throws Exception RPCServ
24、iceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReference targetEPR = new EndpointReference(
25、60; "http:/localhost:8080/axis2/services/ComplexTypeService"); options.setTo(targetEPR); / 下面的代碼調(diào)用uplo
26、adImageWithByte方法上傳圖像文件 / / 打開圖像文件,確定圖像文件的大小 java.io.File file = new java.io.File("f:images.jpg");
27、160; java.io.FileInputStream fis = new java.io.FileInputStream("f:images.jpg"); / 創(chuàng)建保存要上傳的圖像文件內(nèi)容的字節(jié)數(shù)組 byte buffer = new byte(int)
28、;file.length(); / 將圖像文件的內(nèi)容讀取buffer數(shù)組中 int n = fis.read(buffer); System.out.println("文件長度:" + file.length();
29、 Object opAddEntryArgs = new Object buffer, n Class classes = new Class Boolean.class QName opAddEn
30、try = new QName("/axis2","uploadImageWithByte"); fis.close(); / 開始上傳圖像文件,并輸出uploadImageWithByte方法的返回傳
31、0;System.out.println(serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)0); / / 下面的代碼調(diào)用了getArray方法,并返回一維String數(shù)組
32、; / opAddEntry = new QName("/axis2", "getArray"); String strArray = (String) serviceClient.i
33、nvokeBlocking(opAddEntry, new Object, new ClassString.class )0; for
34、60;(String s : strArray) System.out.print(s + " "); System.out.println(); /
35、160; / 下面的代碼調(diào)用了getMDArray方法,并返回一維String數(shù)組 / opAddEntry = new QName("http:/ws.apache.or
36、g/axis2", "getMDArray"); strArray = (String) serviceClient.invokeBlocking(opAddEntry, new Object, &
37、#160; new ClassString.class)0; &
38、#160;for (String s : strArray) String array = s.split(","); for(S
39、tring ss: array) System.out.print("<" + ss + "> "); System.out.println();
40、 System.out.println(); / / 下面的代碼調(diào)用了getDataForm方法,并返回DataForm對象實(shí)例
41、 / opAddEntry = new QName("/axis2", "getDataForm"); data.DataForm df = (data.DataForm) serviceClient.inv
42、okeBlocking(opAddEntry, new Object, new Classdata.DataF
43、orm.class)0; System.out.println(df.getAge(); / / 下面的代碼調(diào)用了getDataFormBytes方法,并返回字節(jié)數(shù)組,最后將返回的字節(jié)數(shù)組反序列化后,轉(zhuǎn)換成Dat
44、aForm對象實(shí)例 / opAddEntry = new QName("/axis2", "getDataFormBytes");
45、0; buffer = (byte) serviceClient.invokeBlocking(opAddEntry, new Object, new Classbyte.class)0; java.io.ObjectInputStream ois = new java.io.ObjectInputStream(
46、 new java.io.ByteArrayInputStream(buffer); df = (data.DataForm) ois.readObject(); System.out.println(df.getNa
47、me(); / 運(yùn)行上面的程序,將輸出如下的內(nèi)容:文件長度:3617true自行車 飛機(jī) 火箭 <自行車> <飛機(jī)> <火箭><中國> <美國> <德國><超人> <蜘蛛俠> <鋼鐵俠>20bill五、使用C#編寫調(diào)用Web
48、Service的客戶端代碼 在Visual Studio中使用WebService就簡單得多。假設(shè)引用WebService時(shí)的引用名為complexType,則下面的代碼調(diào)用了uploadImageWithByte方法來上傳圖像文件。在Visual Studio引用WebService時(shí),uploadImageWithByte方法多了兩個(gè)out參數(shù),在使用時(shí)要注意。complexType.ComplexTypeService cts = new WSC.complexType.ComplexTypeService();
49、System.IO.FileStream fs = new System.IO.FileStream("f:images.jpg", System.IO.FileMode.Open);byte buffer = new bytefs.Length;fs.Read(buffer, 0, (int)fs.Length);bool r;bool rs;cts.uploadImageWithByte( buffer, (int)fs.Length, true, out r, out rs); 在獲得二維數(shù)組時(shí),可以將數(shù)據(jù)加載到DataGridView或其他類似的控件中,代碼如下:String str
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 航天信息財(cái)務(wù)培訓(xùn)
- 綜合實(shí)踐課:水與健康
- 舞蹈培訓(xùn)匯報(bào)演出
- TTT培訓(xùn)師成長特訓(xùn)營
- 腫瘤放化療科出科培訓(xùn)大綱
- 客車操作培訓(xùn)課件
- 女士正裝培訓(xùn)
- 培訓(xùn)銷售流程
- 腫瘤患者飲食營養(yǎng)護(hù)理
- 酒店前廳服務(wù)流程標(biāo)準(zhǔn)化管理
- 2024年度中國資管行業(yè)ESG投資發(fā)展研究報(bào)告
- 顯示設(shè)備健康護(hù)眼技術(shù)研究-洞察分析
- 乙肝免疫標(biāo)志物檢測及其實(shí)驗(yàn)結(jié)果解讀
- 軟件定義網(wǎng)絡(luò)SDN
- 血糖管理課件
- 2024年浙江省普通高中學(xué)業(yè)水平適應(yīng)性考試歷史試題(解析版)
- 410th循環(huán)流化床鍋爐本體化學(xué)清洗方案(HCL)
- DB34∕T 1555-2011 存量房交易計(jì)稅價(jià)格評估技術(shù)規(guī)范
- 青少年無人機(jī)課程:第一課-馬上起飛
- 桂科版八年級下冊信息技術(shù) 1.1規(guī)劃網(wǎng)站 教學(xué)設(shè)計(jì)
- 民辦學(xué)校托管合同范本
評論
0/150
提交評論