1. 程式人生 > >WebService大講堂之Axis2(2):複合型別資料的傳遞

WebService大講堂之Axis2(2):複合型別資料的傳遞

package client;

import javax.xml.namespace.QName;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public class ComplexTypeRPCClient
{

    public static void main(String[] args) throws Exception
    {
        RPCServiceClient serviceClient = new
 RPCServiceClient();
        Options options = serviceClient.getOptions();
        EndpointReference targetEPR = new EndpointReference(
                "http://localhost:8080/axis2/services/ComplexTypeService");
        options.setTo(targetEPR);
        // 下面的程式碼呼叫uploadImageWithByte方法上傳影象檔案        /////////////////////////////////////////
        
// 開啟影象檔案,確定影象檔案的大小        java.io.File file = new java.io.File("f:\\images.jpg");
        java.io.FileInputStream fis = new java.io.FileInputStream("f:\\images.jpg");
        // 建立儲存要上傳的影象檔案內容的位元組陣列        byte[] buffer = new byte[(int) file.length()];
        // 將影象檔案的內容讀取buffer陣列中        int n = fis.read(buffer);
        System.out.println("檔案長度:" + file.length());
        Object[] opAddEntryArgs = new
 Object[]{ buffer, n };
        Class[] classes = new Class[]{ Boolean.class };
        QName opAddEntry = new QName("http://ws.apache.org/axis2","uploadImageWithByte");
        fis.close();
        // 開始上傳影象檔案,並輸出uploadImageWithByte方法的返回傳        System.out.println(serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)[0]);
        /////////////////////////////////////////
        
        
// 下面的程式碼呼叫了getArray方法,並返回一維String陣列        /////////////////////////////////////////          opAddEntry = new QName("http://ws.apache.org/axis2", "getArray");
        String[] strArray = (String[]) serviceClient.invokeBlocking(opAddEntry, 
                            new
 Object[]{}, new Class[]{String[].class })[0];
        for (String s : strArray)
            System.out.print(s + "  ");
        System.out.println();
        ////////////////////////////////////////
        

        
// 下面的程式碼呼叫了getMDArray方法,並返回一維String陣列        /////////////////////////////////////////          opAddEntry = new QName("http://ws.apache.org/axis2", "getMDArray");
        strArray = (String[]) serviceClient.invokeBlocking(opAddEntry, new Object[]{}, 
                                                          new
 Class[]{String[].class})[0];
        for (String s : strArray)
        {
            String[] array = s.split(",");
            for(String ss: array)
                System.out.print("<" + ss + "> ");
            System.out.println();
        }
        System.out.println();
        ////////////////////////////////////////

        
// 下面的程式碼呼叫了getDataForm方法,並返回DataForm物件例項        /////////////////////////////////////////          opAddEntry = new QName("http://ws.apache.org/axis2", "getDataForm");
        data.DataForm df = (data.DataForm) serviceClient.invokeBlocking(opAddEntry, new Object[]{},
                                                                  new Class[]{data.DataForm.class})[0];
        System.out.println(df.getAge());
        /////////////////////////////////////////
        
        
// 下面的程式碼呼叫了getDataFormBytes方法,並返回位元組陣列,最後將返回的位元組陣列反序列化後,轉換成DataForm物件例項        /////////////////////////////////////////                  opAddEntry = new QName("http://ws.apache.org/axis2", "getDataFormBytes");
        buffer = (byte[]) serviceClient.invokeBlocking(opAddEntry, new Object[]{}, new Class[]{byte[].class})[0];
        java.io.ObjectInputStream ois = new java.io.ObjectInputStream(
                new java.io.ByteArrayInputStream(buffer));
        df = (data.DataForm) ois.readObject();
        System.out.println(df.getName());
        //////////////////////////////////////////
    }
}