我正在制作一个从Web服务请求数据的应用程序(实现Soap)。
正在观看此请求的人在评论中表示怀疑......我没有得到任何回答问题请问我是否有任何疑问,我真的需要帮助,我被卡住了! < / p>
因此,为了提出请求,我必须使用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 ... java.io.StringReader@40ec9c68中的@ 1:119)
从那时起我的整个代码依赖于响应是 XML 的事实。
解释我期望XML的原因: 现在你可能会问我为什么在没有测试Web服务时编写我的应用程序期望XML的原因是:Web服务编码我的第三方谁向我保证XML响应,现在我没有足够的时间来改变我的剩余用于利用SOAP结构的代码!! -_- 我正在修理。请帮忙!
答案 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);
}