期望嵌套的XML结构但接收SOAP结构

时间:2012-06-15 09:52:54

标签: android xml soap xml-serialization ksoap2

我正在制作一个从Web服务请求数据的应用程序(实现Soap)。

正在观看此请求的人在评论中表示怀疑......我没有得到任何回答问题请问我是否有任何疑问,我真的需要帮助,我被卡住了! < / p>

因此,为了提出请求,我必须使用kso​​ap库.. 编码Web服务以返回XML类型的响应。在浏览器上测试Web服务本身时,它会显示如下结果:

?xml version="1.0" encoding="utf-8" ?> 
- <SOBKeyList>
- <Key>
  <value>12686</value> 
  </Key>
- <Key>
  <value>16238</value> 
  </Key>
- <Key>
  <value>26978</value> 
  </Key>
  </SOBKeyList>

显然是 XML 文件......

However当我使用代码获取结果时:

    public String getXmlFromUrl(String url) {
    // TODO Auto-generated method stub
    String xml = null;
    SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
    PropertyInfo pi = new PropertyInfo();

    pi.setName("fkey");
    pi.setValue(0);
    pi.setType(Integer.class);
    request.addProperty(pi);

    pi = new PropertyInfo();

    pi.setName("tkey");
    pi.setValue(999999);
    pi.setType(Integer.class);
    request.addProperty(pi);


    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    HttpTransportSE httpTransport = new HttpTransportSE(url);
    Object response = null; 

    try {
        httpTransport.call(SOAP_ACTION, envelope);
        response = envelope.getResponse();
        xml = response.toString();
        Log.d("xml:", xml);
    } catch (SoapFault e) {
        // TODO Auto-generated catch block
        Log.d("Soap Fault", e.toString());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        Log.d("IOexception", e.toString());
    } catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
        Log.d("XmlPullParserException", e.toString());
    }

    return xml;
}

它返回一个嵌套的SOAP结构 确认由我创建的日志条目(Log.d("xml:", xml);) 相应的LogCat条目是:(我已将其格式化为使其成为SOAP结构的层次结构......)

anyType{
      SOBKeyList=anyType{
                          Key=anyType{value=12686 ; };
                          Key=anyType{value=16238 ; };
                          Key=anyType{value=26978 ; };
                         };
          }

我之所以需要XML的原因是因为后来我解析字符串以获得 DOM 元素,当传递上述字符串时,它返回以下内容:

org.xml.sax.SAXParseException:意外的标记(位置:TEXT anyType {SOBKeyLi ... java.io.StringReader@40ec9c68中的@ 1:119)

从那时起我的整个代码依赖于响应是 XML 的事实。

解释我期望XML的原因: 现在你可能会问我为什么在没有测试Web服务时编写我的应用程序期望XML的原因是:Web服务编码我的第三方谁向我保证XML响应,现在我没有足够的时间来改变我的剩余用于利用SOAP结构的代码!! -_- 我正在修理。请帮忙!

1 个答案:

答案 0 :(得分:1)

试试这个:

String responseXML = httpTransport.responseDump;
  • HttpTransportSE.responseDump以XML格式为您提供回复。
  • HttpTransportSE.requestDump以XML格式提供请求。

但是,为了能够更改和检索任何这些值,您必须将debug的{​​{1}}字段设置为HttpTransportSE 所以你的代码看起来应该......

true

您也可以解析您的回复,如下所示:

    HttpTransportSE httpTransport = new HttpTransportSE(url);
    httpTransport.debug =true;      
    try {
        httpTransport.call(SOAP_ACTION, envelope);          
        xml = httpTransport.responseDump;
        Log.d("xml:", "is:" + xml);     
    }