Как сериализовать xml-объект в массив строк в Java с помощью KSOAP? - PullRequest
0 голосов
/ 11 октября 2011

У меня есть ответ от сервера (WSDL SOAP) со следующим кодом:

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?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>
    <GetChanelResponse xmlns="http://tempuri.org/">
      <GetChanelResult>
        <string>string</string>
        <string>string</string>
      </GetChanelResult>
    </GetChanelResponse>
  </soap:Body>
</soap:Envelope>

Я пытаюсь использовать этот код для получения строкового массива:

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Vector;

import org.ksoap2.serialization.KvmSerializable;
import org.ksoap2.serialization.PropertyInfo;


public class XMLRez extends Vector implements KvmSerializable{

    private static final long serialVersionUID = -1166006770093411055L;

    @Override
    public Object getProperty(int arg0) {
        // TODO Auto-generated method stub
        return this.get(arg0);
    }

    @Override
    public int getPropertyCount() {
        // TODO Auto-generated method stub
        return this.size();

    }

    @Override
    public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
        // TODO Auto-generated method stub
        arg2.name = "string";
        arg2.type = PropertyInfo.STRING_CLASS;

    }

    @Override
    public void setProperty(int arg0, Object arg1) {
        // TODO Auto-generated method stub
        this.add(arg1.toString());
    }
}

Этот класс используется дляхранение данных.

public class Main {

    public static String SOAP_ACTION="http://tempuri.org/GetChanel";
    public static String METHOD_NAME="GetChanel";
    public static String NAMESPACE="http://tempuri.org/";
    public static String URL="http://www.mcds.co.il/YouTube/ChanelApi.asmx";

    /**
     * @param args
     */
    public static void main(String[] args) {

        XMLRez documentIdVector=new XMLRez();


        PropertyInfo documentIdsPropertyInfo = new PropertyInfo();
        documentIdsPropertyInfo.setName("GetChanelResult");
        documentIdsPropertyInfo.setValue(documentIdVector);
        documentIdsPropertyInfo.setType(documentIdVector.getClass());

        // TODO Auto-generated method stub
        SoapObject request=new SoapObject(NAMESPACE, METHOD_NAME);
        request.addProperty(documentIdsPropertyInfo);
        //request.addProperty("Celsius", "5");

        SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);

        envelope.dotNet=true;      
        envelope.setOutputSoapObject(request);
        envelope.addMapping(NAMESPACE, "GetChanelResult", new XMLRez().getClass());

        //AndroidHttpTransport aht=new AndroidHttpTransport(URL);
        HttpTransportSE aht =new HttpTransportSE(URL);

        try {
            aht.call(SOAP_ACTION, envelope);
            XMLRez prim=(XMLRez)envelope.bodyIn;
        } catch (Exception e) {
            //Log.e("exp", e.getMessage());
            System.out.println(e.getMessage());
        }
    }

}  

Этот класс я использую для получения данных из сервиса.Но я всегда получаю исключение «org.ksoap2.serialization.SoapObject не может быть приведен к XMLRez».Где я могу ошибиться?

1 Ответ

0 голосов
/ 13 октября 2011

Используйте getResponse, а не bodyIn. Вы получите объект SoapObject, который затем сможете проанализировать в своем pojo.

...