WebService大講堂之Axis2(2)復(fù)合類(lèi)型數(shù)據(jù)的傳遞_第1頁(yè)
WebService大講堂之Axis2(2)復(fù)合類(lèi)型數(shù)據(jù)的傳遞_第2頁(yè)
WebService大講堂之Axis2(2)復(fù)合類(lèi)型數(shù)據(jù)的傳遞_第3頁(yè)
WebService大講堂之Axis2(2)復(fù)合類(lèi)型數(shù)據(jù)的傳遞_第4頁(yè)
WebService大講堂之Axis2(2)復(fù)合類(lèi)型數(shù)據(jù)的傳遞_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、WebService大講堂之Axis2(2):復(fù)合類(lèi)型數(shù)據(jù)的傳遞在實(shí)際的應(yīng)用中,不僅需要使用WebService來(lái)傳遞簡(jiǎn)單類(lèi)型的數(shù)據(jù),有時(shí)也需要傳遞更復(fù)雜的數(shù)據(jù),這些數(shù)據(jù)可以被稱(chēng)為復(fù)合類(lèi)型的數(shù)據(jù)。數(shù)組與類(lèi)(接口)是比較常用的復(fù)合類(lèi)型。在Axis2中可以直接使用將WebService方法的參數(shù)或返回值類(lèi)型聲明成數(shù)組或類(lèi)(接口)。但要注意,在定義數(shù)組類(lèi)型時(shí)只能使用一維數(shù)組,如果想傳遞多維數(shù)組,可以使用分隔符進(jìn)行分隔,如下面的代碼所示:String strArray = new String "自行車(chē),飛機(jī),火箭","中國(guó),美國(guó),德國(guó)", "超人,蜘

2、蛛俠,鋼鐵俠" ;    上面的代碼可以看作是一個(gè)3*3的二維數(shù)組。    在傳遞類(lèi)的對(duì)象實(shí)例時(shí),除了直接將數(shù)組類(lèi)型聲明成相應(yīng)的類(lèi)或接口,也可以將對(duì)象實(shí)例進(jìn)行序列化,也就是說(shuō),將一個(gè)對(duì)象實(shí)例轉(zhuǎn)換成字節(jié)數(shù)組進(jìn)行傳遞,然后接收方再進(jìn)行反序列化,還原這個(gè)對(duì)象實(shí)例。    下面的示例代碼演示了如何傳遞數(shù)組與類(lèi)(接口)類(lèi)型的數(shù)據(jù),并演示如何使用字節(jié)數(shù)組上傳圖像。本示例的客戶(hù)端代碼使用Java和C#編寫(xiě)。要完成這個(gè)例子需要如下幾步:一、實(shí)現(xiàn)服務(wù)端代碼    ComplexTyp

3、eService是一個(gè)WebService類(lèi),該類(lèi)的代碼如下:import java.io.FileOutputStream;import data.DataForm;public class ComplexTypeService    /  上傳圖像,imageByte參數(shù)表示上傳圖像文件的字節(jié),    /  length參數(shù)表示圖像文件的字節(jié)長(zhǎng)度(該參數(shù)值可能小于imageByte的數(shù)組長(zhǎng)度)   &#

4、160;public boolean uploadImageWithByte(byte imageByte, int length)            FileOutputStream fos = null;        try       &

5、#160;            /  將上傳的圖像保存在D盤(pán)的test1.jpg文件中            fos = new FileOutputStream("d:test1.jpg");        

6、;    /  開(kāi)始寫(xiě)入圖像文件的字節(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 "自行車(chē)", "飛機(jī)", "火箭"    

13、0;    return strArray;         /  返回二維字符串?dāng)?shù)組    public String getMDArray()            String strArray = new Str

14、ing "自行車(chē),飛機(jī),火箭","中國(guó),美國(guó),德國(guó)", "超人,蜘蛛俠,鋼鐵俠"          return strArray;        /  返回DataForm類(lèi)的對(duì)象實(shí)例    public DataForm getDataForm(

15、)            return new DataForm();        /  將DataForm類(lèi)的對(duì)象實(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類(lèi)    DataF

18、orm是要返回的對(duì)象實(shí)例所對(duì)應(yīng)的類(lèi),該類(lèi)的實(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類(lèi)使用了一個(gè)Java類(lèi)(DataForm類(lèi)),因此,在發(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類(lèi),因此,需要重新啟動(dòng)Tomcat)。四、使用Java編寫(xiě)調(diào)用WebService的客戶(hù)端代碼    在客戶(hù)端仍然使用了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方法上傳圖像文件        /        / 打開(kāi)圖像文件,確定圖像文件的大小        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("文件長(zhǎng)度:" + 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();        / 開(kāi)始上傳圖像文件,并輸出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對(duì)象實(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對(duì)象實(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)容:文件長(zhǎng)度:3617true自行車(chē) 飛機(jī) 火箭 <自行車(chē)> <飛機(jī)> <火箭><中國(guó)> <美國(guó)> <德國(guó)><超人> <蜘蛛俠> <鋼鐵俠>20bill五、使用C#編寫(xiě)調(diào)用Web

48、Service的客戶(hù)端代碼    在Visual Studio中使用WebService就簡(jiǎn)單得多。假設(shè)引用WebService時(shí)的引用名為complexType,則下面的代碼調(diào)用了uploadImageWithByte方法來(lái)上傳圖像文件。在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或其他類(lèi)似的控件中,代碼如下:String str

溫馨提示

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

評(píng)論

0/150

提交評(píng)論