我在尝试从 ksoap getResponse() 接收结构化数据时遇到问题;
我已经仔细阅读了使用 SoapObjects 从站点发送和接收数据的指南:链接到站点
我正在使用这个WSDL
我试图获得的对象具有如下结构:
<message name="doSearchResponse">
<part name="search-count" type="xsd:int"/>
<part name="search-count-featured" type="xsd:int"/>
<part name="search-array" type="typens:ArrayOfSearchResponse"/>
<part name="search-excluded-words" type="typens:ArrayOfExcludedWords"/>
<part name="search-categories" type="typens:ArrayOfCategoriesStruct"/>
</message>
我认为这是 doSearch 方法中使用的一种输出对象:
<operation name="doSearch">
<input message="typens:doSearchRequest"/>
<output message="typens:doSearchResponse"/>
</operation>
这是我试图执行搜索操作然后获取我上面介绍的对象(doSearchResponse)的代码。
public void search(String searchPhrase) {
/* search criteria holder */
SoapObject searchOptType = new SoapObject(API_NAMESPACE, "SearchOptType");
searchOptType.addProperty("search-string", searchPhrase);
/* search method */
SoapObject doSearch = new SoapObject(API_NAMESPACE, "doSearch");
doSearch.addProperty("session-handle", sessionToken);
doSearch.addProperty("search-query", searchOptType);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(doSearch);
Object response = null;
try {
transport.call("", envelope);
response = envelope.getResponse();
System.out.println(response.getClass());
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
搜索工作正常,但它只返回一个对象 - 一个整数对象(不是数组),它是找到的匹配项到 searchPhrase 的计数。我认为这是 doSearchResponse 对象中的第一个位置。但我需要其余的,尤其是:search-array。我究竟做错了什么?这不是要处理envelope.call("and this string here", ...)吗?