求教了,这个问题我已经折腾了两个星期了,网上各种资料也找过了,实在是解决不了了,请大家赐教具体问题是,我的Webservice的传入参数与返回值都是复杂的对象或对象数组,然而我用网上的代码做了以后,可以实现发送对象及对象数组,但是却无法用比较简单的办法解析返回对象,我要解析的对象已经实现了KvmSerializable接口了,可是还是无法通过强制转换的方式转成我自定义的对象,我实在不愿意用遍历SoapObject的方式生成对象啊,请各位高手不吝赐教。自定义的对象testObject1public class testObject1 implements KvmSerializable {
public String testName1; @Override
public Object getProperty(int arg0) {
// TODO Auto-generated method stub
return testName1;
} @Override
public int getPropertyCount() {
// TODO Auto-generated method stub
return 1;
} @Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
// TODO Auto-generated method stub
arg2.name = "testName1";
arg2.type = PropertyInfo.STRING_CLASS;
} @Override
public void setProperty(int arg0, Object arg1) {
// TODO Auto-generated method stub
testName1 = arg1.toString();
}}调用代码,调用的Webservice没有入参,直接返回一个testObject1对象         SoapObject soapObject = new SoapObject(NAMESPACE, METHOD);
        
     SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);     soapEnvelope.dotNet = true;
     soapEnvelope.bodyOut = soapObject;
     soapEnvelope.setOutputSoapObject(soapObject);
     soapEnvelope.addMapping(NAMESPACE, "testObject1", testObject1.class);
    
     HttpTransportSE httpTransportSE = new HttpTransportSE(WEBSERVICEURL);
     httpTransportSE.debug = true;
     try {
    
     httpTransportSE.call(SOAPACTION, soapEnvelope);
     testObject1 soapResponse = (testObject1) soapEnvelope.bodyIn;//在这一句提示java.lang.ClassCastException: org.ksoap2.serialization.SoapObject
    
     } catch (Exception e) {
     e.printStackTrace();
     }
Webservice方法        public testObject1 HelloWorld()
        {
            testObject1 obj = new testObject1();
            obj.testName1 = "return";
            return obj;
        }
Webservice返回的soap xml
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <HelloWorldResponse xmlns="http://tempuri.org/">
      <HelloWorldResult>
        <testName1>string</testName1>
      </HelloWorldResult>
    </HelloWorldResponse>
  </soap:Body>
</soap:Envelope>

解决方案 »

  1.   

    因为我没有办法触及Webservice代码,所以序列化对象的方法就别给了
      

  2.   

    Webservice一定要返回json类型的文本数据。
      

  3.   

    结论是没有办法直接从SoapObject强制转换成返回对象必须自己写一个通用的转换方法来把SoapObject转换成自身所需的返回对象,可以用反射
      

  4.   

    这句testObject1 soapResponse = (testObject1) soapEnvelope.bodyIn;
    改成testObject1 soapResponse = (testObject1) soapEnvelope.getResponse();
    就行了