我正在做一個應用程序,正在從Web服務(實施肥皂)請求數據。期待嵌套的XML結構,但接收SOAP結構
查看此問題的用戶在評論中發佈疑惑...我還沒有對問題做出任何迴應請問我是否有任何疑問,我真的需要幫助,我卡住了!
因此,爲了提出請求,我必須使用ksoap庫.. 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 ... @ 1:119的java.io .StringReader @ 40ec9c68)
也從那裏開始我的整個代碼取決於響應是XML的事實。
爲什麼我預期的XML的原因闡釋: 現在你可能會問,爲什麼我編寫我的應用程序期待XML時,我沒有測試Web服務的原因是:Web服務進行編碼我的第三方誰向我保證了一個XML響應,現在我沒有足夠的時間來改變我的剩餘代碼來利用SOAP結構! -_- 我正在修復。請幫忙!
我才意識到我已經貼了一些錯誤的代碼(我的問題,編輯以及): 'HttpTransportSE httpTransport = new HttpTransportSE(url); 對象響應= null; try { httpTransport.call(SOAP_ACTION,envelope); response = envelope.getResponse(); xml = response.toString(); Log.d(「xml:」,xml); }' – Shark
我已經在使用HttpTransportSE ...我應該在哪裏放行'httpTransport.responseDump'? – Shark
'httpTransport.call(SOAP_ACTION,envelope);' 'xml = androidHttpTransport.responseDump;' – OguzOzkeroglu