0

我在尝试从 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", ...)吗?

4

2 回答 2

0

您将“”替换为 SOAP_ACTION,如下所示

 transport.call(SOAP_ACTION, envelope);

还有你检查过响应类型是字符串还是数组..

于 2013-01-25T10:42:54.640 回答
0

我解决了。

问题出在 2.4 版中的 KSOAP2 库。实际上我不知道为什么它只返回一个 Integer 对象。但是在 3.0.0 RC4 版本中,它以同样的方式返回给我 Vector 对象,该对象实现了我期望的对象。所以无论如何谢谢:)

于 2013-01-25T18:02:16.620 回答