我正在做一个应用程序,正在从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