kSoap2 serialisation error

不羁岁月 提交于 2019-12-25 01:14:16

问题


I'm using kSoap2 to connect to a WCF service from an android device but I get an serialisation error:

Cannot serialize: CompositeType : StringValue = Test, BoolValue = true

Here is the code for the webservice call:

public void call() {
    try {

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

        CompositeType comp = new CompositeType();
        comp.setProperty(CompositeType.STRING_VALUE, "Test");
        comp.setProperty(CompositeType.BOOLEAN_VALUE, true);
        PropertyInfo pi = new PropertyInfo();
        pi.setName("CompositeType");
        pi.setValue(comp);
        pi.setType(comp.getClass());
        request.addProperty("composite", pi);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        envelope.addMapping(NAMESPACE, "CompositeType", (new CompositeType()).getClass());

        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        androidHttpTransport.debug = true;
        androidHttpTransport.call(SOAP_ACTION, envelope);
        SoapObject result = (SoapObject) envelope.getResponse();

        comp.setProperty(CompositeType.BOOLEAN_VALUE, Boolean.parseBoolean(result.getProperty(0).toString()));
        comp.setProperty(CompositeType.STRING_VALUE, result.getProperty(1).toString());

        sb.append(comp.toString());
    } catch (Exception e) {
        e.printStackTrace();
        sb.append("Error:\n" + e.getMessage() + "\n");
    }

}

And this is my code for the CompositeType class:

public class CompositeType implements KvmSerializable{

public static final int STRING_VALUE = 1;
public static final int BOOLEAN_VALUE = 0;

public String StringValue;
public Boolean BoolValue;

public CompositeType() {
}

@Override
public String toString() {
    return "StringValue = " + StringValue + ", BoolValue = " + BoolValue.toString();
}

@Override
public Object getProperty(int arg0) {
    switch(arg0)
    {
    case STRING_VALUE:
        return StringValue;
    case BOOLEAN_VALUE:
        return BoolValue;
    }

    return null;
}

@Override
public int getPropertyCount() {
    return 2;
}

@Override
public void getPropertyInfo(int index, @SuppressWarnings("rawtypes") Hashtable arg1, PropertyInfo info) {
    switch(index)
    {
    case STRING_VALUE:
        info.type = PropertyInfo.STRING_CLASS;
        info.name = "StringValue";
        break;
    case BOOLEAN_VALUE:
        info.type = PropertyInfo.BOOLEAN_CLASS;
        info.name = "BoolValue";
        break;
    default:break;
    }
}

@Override
public void setProperty(int index, Object value) {
    switch(index)
    {
    case STRING_VALUE:
        StringValue = value.toString();
        break;
    case BOOLEAN_VALUE:
        BoolValue = Boolean.parseBoolean(value.toString());
        break;
    default:
        break;
    }
}


}

I thought objects that implement KvmSerializable can be serialized ... Does anyone know how to get it working?


回答1:


This reply might be too little and too late, but I have noticed a problem with boolean params.

I just changed the booleans to ints and my services worked fine! you will also need to set the web service params / objects to use int's and then convert to bools if you like!



来源:https://stackoverflow.com/questions/6326035/ksoap2-serialisation-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!