Android webservice ksoap2 - byte[] inside pojo Error

96 views
Skip to first unread message

Karthik

unread,
Aug 28, 2012, 5:09:25 AM8/28/12
to android...@googlegroups.com
I am invoking java soap webservices from my android application using kvm serialization. my pojo classes and code is given below,

DataSet.java

    public class DataSet implements KvmSerializable{

    public String client = null;
    public Photo[] images;
    public String userId = null;
   
    @Override
    public Object getProperty(int arg0) {
        switch (arg0){
        case 0:
            return client;       
        case 1:
            return images;
        case 2:
            return userId;
         default:
             return null;
        }
    }

    @Override
    public int getPropertyCount() {
        // TODO Auto-generated method stub
        return 3;
    }

    @Override
    public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo info) {
        switch(index)
        {
        case 0:
            info.type = PropertyInfo.STRING_CLASS;
            info.name = "client";
            break;       
        case 1:
            info.type = Photo.class;
            info.name = "images";
        case 2:
            info.type = PropertyInfo.STRING_CLASS;
            info.name = "userId";
        default:
            break;
        }
       
    }

    @Override
    public void setProperty(int index, Object value) {
        switch(index)
        {
        case 0:
            client = value.toString();
            break;
        case 1:
            images = (Photo[]) value;
            break;
        case 2:
            userId = value.toString();
            break;
        default:
            break;
        }
       
    }

}

and Photo.java

    public class Photo implements KvmSerializable{

    public byte[] data;
    public String name;
   
    @Override
    public Object getProperty(int arg0) {
        switch (arg0){
        case 0:
            return data;       
        case 1:
            return name;       
         default:
             return null;
        }
    }

    @Override
    public int getPropertyCount() {
        // TODO Auto-generated method stub
        return 2;
    }

    @Override
    public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo info) {
        switch(index)
        {
        case 0:
            info.type = new byte [0].getClass();
            info.name = "data";
            break;       
        case 1:
            info.type = PropertyInfo.STRING_CLASS;
            info.name = "name";
        default:
            break;
        }
       
    }

    @Override
    public void setProperty(int index, Object value) {
        switch(index)
        {
        case 0:
            data = (byte[])value;
            break;
        case 1:
            name = value.toString();
            break;
        default:
            break;
        }
       
    }

 In this I stored the images and name into the Photo.java POJO and then set into the DataSet POJO as,

    public class Sample implements Runnable {
        ...
        ...
        Photo[] photoArr = new Photo[3];
        int count = 0;

    public void run() {
      while (count < 3) {
        ....
        ....
        ....
        byte[] byteArray = stream.toByteArray();
        Photo photo = new Photo();
        photo.data = byteArray;
        photo.name = "img"+count;
        photoArr[count] = photo;
        count++;
     }
           if(count == 2)
             {
                SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                new MarshalBase64().register(envelope);   //serialization
                envelope.encodingStyle = SoapEnvelope.ENC;

                           
                PropertyInfo pi = new PropertyInfo();
                DataSet dataSet = new DataSet();
                dataSet.client = "1";
                dataSet.userId = "1";
                dataSet.images = photoArr;
   
                pi.setName("dataSet");
                pi.setValue(dataSet);
                pi.setType(dataSet.getClass());
                request.addProperty(pi);
   
                envelope.setOutputSoapObject(request);
                envelope.addMapping(NAMESPACE, "dataSet", DataSet.class);
                envelope.addMapping(NAMESPACE, "images", Photo.class);
                               
                AndroidHttpTransport httpTransport = new AndroidHttpTransport(URL);
                httpTransport.debug = true;                           
                httpTransport.call(SOAP_ACTION, envelope);
                               
                SoapObject result = (SoapObject) envelope.bodyIn;
               Log.d("Result: ", result.toString());
             }
}

But I am getting the following error **Cannot serialize: [Lcom.common.Photo;@41221270**.

What is wrong im my code. I have searched about this issue. But I did't get correct answer.
 Can anyone help me to fix this?
Reply all
Reply to author
Forward
0 new messages