Parsing KSOAP复杂响应解析

Parsing KSOAP复杂响应解析,parsing,ksoap2,android-ksoap2,Parsing,Ksoap2,Android Ksoap2,我目前正在为我的项目使用KSOAP2,该项目链接到SOAP Web服务。到目前为止,我已经得到了一个结果,但现在我想把这个结果解析成一个POJO。我已经通过使用addMapping(名称空间、节点、类) 我可以将结果放入该对象中,但我不知道代码中的问题在哪里。 所以我的问题是:如何将KSOAP响应解析到我的自定义对象中 wsdl: 我的XML响应 <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmln

我目前正在为我的项目使用KSOAP2,该项目链接到SOAP Web服务。到目前为止,我已经得到了一个结果,但现在我想把这个结果解析成一个POJO。我已经通过使用
addMapping(名称空间、节点、类)
我可以将结果放入该对象中,但我不知道代码中的问题在哪里。 所以我的问题是:如何将KSOAP响应解析到我的自定义对象中

wsdl:

我的XML响应

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <GetGeoIPResponse xmlns="http://www.webservicex.net/">
         <GetGeoIPResult>
            <ReturnCode>1</ReturnCode>
            <IP>127.0.0.1</IP>
            <ReturnCodeDetails>Success</ReturnCodeDetails>
            <CountryName>Reserved</CountryName>
            <CountryCode>ZZZ</CountryCode>
         </GetGeoIPResult>
      </GetGeoIPResponse>
   </soap:Body>
</soap:Envelope>
GetGeoResponse.java

public class GetGeoIPResponse implements KvmSerializable{

    GetGeoIPResult getGeoIPResult = new GetGeoIPResult();

    @Override
    public Object getProperty(int index) {
        if( index == 0 ){
            return this.getGeoIPResult;
        }
        return null;
    }

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

    @Override
    public void setProperty(int index, Object value) {
        if( index == 0){
            this.getGeoIPResult =(GetGeoIPResult) value;
        }
    }

    @Override
    public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) {

        if(index == 0){
            info.name = "GetGeoIPResult";
            info.type = GetGeoIPResult.class;
        }
    }
}
public class GetGeoIPResponse implements KvmSerializable {

    private GetGeoIPResult getGeoIPResult;

    @Override
    public Object getProperty(int index) {
        switch (index){
            case 0:
                return getGeoIPResult;
            default: return null;
        }
    }

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

    @Override
    public void setProperty(int index, Object value) {
        switch (index){
            case 0:
                getGeoIPResult = (GetGeoIPResult) value;
                break;
        }

    }

    @Override
    public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) {
        switch (index){
            case 0:
                info.name = "GetGeoIPResult";
                info.type = GetGeoIPResult.class;
                break;
        }

    }
}
GetGeoIPResult.java

public class GetGeoIPResult implements KvmSerializable {

    private Integer returnCode;
    private String IP;
    private String returnCodeDetails;
    private String countryName;
    private String countryCode;

    @Override
    public Object getProperty(int index) {
        switch (index){
            case 0: return returnCode;
            case 1: return IP;
            case 2: return returnCodeDetails;
            case 3: return countryName;
            case 4: return countryCode;
            default: return null;
        }
    }

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

    @Override
    public void setProperty(int index, Object value) {
        switch (index){
            case 0:
                returnCode = Integer.parseInt(value.toString());
                break;
            case 1:
                IP = value.toString();
                break;
            case 2:
                returnCodeDetails = value.toString();
                break;
            case 3:
                countryName = value.toString();
                break;
            case 4:
                countryCode = value.toString();
                break;
            default:
                break;
        }

    }

    @Override
    public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) {
        switch (index){
            case 0:
                info.name = "ReturnCode";
                info.type = PropertyInfo.INTEGER_CLASS;
                break;
            case 1:
                info.name = "IP";
                info.type = PropertyInfo.STRING_CLASS;
                break;
            case 2:
                info.name = "ReturnCodeDetails";
                info.type = PropertyInfo.STRING_CLASS;
                break;
            case 3:
                info.name = "CountryName";
                info.type = PropertyInfo.STRING_CLASS;
                break;
            case 4:
                info.name = "CountryCode";
                info.type = PropertyInfo.STRING_CLASS;
                break;
            default:
                break;
        }

    }
}

我发现我自己这里有一些文件:

请求

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

            request.addProperty("IPAddress","127.0.0.1");

            SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            soapEnvelope.dotNet= true;

            soapEnvelope.setOutputSoapObject(request);

            soapEnvelope.addMapping(NAMESPACE,"GetGeoIPResponse", GetGeoIPResponse.class);
            soapEnvelope.addMapping(NAMESPACE,"GetGeoIPResult", GetGeoIPResult.class);

            soapEnvelope.implicitTypes = true;
            HttpTransportSE transport = new HttpTransportSE(URL);
            transport.debug = true;
            transport.call(SOAP_ACTION, soapEnvelope);

            GetGeoIPResponse resultString = (GetGeoIPResponse) soapEnvelope.bodyIn;
GetGeoIPResult.java

    public class GetGeoIPResult implements KvmSerializable {

        private Integer returnCode;
        private String IP;
        private String returnCodeDetails;
        private String countryName;
        private String countryCode;

        @Override
        public Object getProperty(int index) {
            switch (index){
                case 0: return returnCode;
                case 1: return IP;
                case 2: return returnCodeDetails;
                case 3: return countryName;
                case 4: return countryCode;
                default: return null;
            }
        }

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

        @Override
        public void setProperty(int index, Object value) {
            switch (index){
                case 0:
                    returnCode = Integer.parseInt(value.toString());
                    break;
                case 1:
                    IP = value.toString();
                    break;
                case 2:
                    returnCodeDetails = value.toString();
                    break;
                case 3:
                    countryName = value.toString();
                    break;
                case 4:
                    countryCode = value.toString();
                    break;
                default:
                    break;
            }

        }

        @Override
        public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) {
            switch (index){
                case 0:
                    info.name = "ReturnCode";
                    info.type = PropertyInfo.INTEGER_CLASS;
                    break;
                case 1:
                    info.name = "IP";
                    info.type = PropertyInfo.STRING_CLASS;
                    break;
                case 2:
                    info.name = "ReturnCodeDetails";
                    info.type = PropertyInfo.STRING_CLASS;
                    break;
                case 3:
                    info.name = "CountryName";
                    info.type = PropertyInfo.STRING_CLASS;
                    break;
                case 4:
                    info.name = "CountryCode";
                    info.type = PropertyInfo.STRING_CLASS;
                    break;
                default:
                    break;
            }

        }
    }
GetGeoIPResponse.java

public class GetGeoIPResponse implements KvmSerializable{

    GetGeoIPResult getGeoIPResult = new GetGeoIPResult();

    @Override
    public Object getProperty(int index) {
        if( index == 0 ){
            return this.getGeoIPResult;
        }
        return null;
    }

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

    @Override
    public void setProperty(int index, Object value) {
        if( index == 0){
            this.getGeoIPResult =(GetGeoIPResult) value;
        }
    }

    @Override
    public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) {

        if(index == 0){
            info.name = "GetGeoIPResult";
            info.type = GetGeoIPResult.class;
        }
    }
}
public class GetGeoIPResponse implements KvmSerializable {

    private GetGeoIPResult getGeoIPResult;

    @Override
    public Object getProperty(int index) {
        switch (index){
            case 0:
                return getGeoIPResult;
            default: return null;
        }
    }

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

    @Override
    public void setProperty(int index, Object value) {
        switch (index){
            case 0:
                getGeoIPResult = (GetGeoIPResult) value;
                break;
        }

    }

    @Override
    public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) {
        switch (index){
            case 0:
                info.name = "GetGeoIPResult";
                info.type = GetGeoIPResult.class;
                break;
        }

    }
}