0

我正在制作一个 android 应用程序,并且需要访问一个基于 WSDL 的在线数据库。我的代码从该数据库访问国家/地区列表,但我不知道我会以什么格式获取数据。例如。一个字符串,一个数组?等等。那么 WSDL 是否有任何标准的返回类型?谢谢。

编辑:代码片段

        //this is the actual part that will call the webservice
        androidHttpTransport.call(SOAP_ACTION, envelope);

        // Get the SoapResult from the envelope body.
        SoapObject result = (SoapObject)envelope.bodyIn;

    if(result!=null)
    {
        //put the value in an array
        // prepare the list of all records
         List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
        for(int i = 0; i < 10; i++){
            HashMap<String, String> map = new HashMap<String, String>();
            map.put(result.getProperty(i).toString());
            fillMaps.add(map);
            lv.setOnItemClickListener(onListClick);
        }
     // fill in the grid_item layout
        SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, R.layout.grid_item, from, to);
        lv.setAdapter(adapter);
    }
        else
        {
              Toast.makeText(getApplicationContext(), "No Response",Toast.LENGTH_LONG).show();
        }
  } catch (Exception e) {
        e.printStackTrace();
  }
4

1 回答 1

1

WSDL 本身不是一种数据格式。它是基于 XML 的 Web 服务合同描述。输入参数和结果输出是使用 WSDL 定义的。这里

数据是使用 XML 模式定义 (XSD) 定义的。见这里XSD

我不熟悉 Android,但应该有一些库支持或 3rd 方工具来读取 WSDL 定义并创建代表客户端代理的 java 类。

(更新)响应返回“国家”类型

<message name="getCountryListResponse">
 <part name="return" type="tns:Countries"/>
</message>

如果您查看“Countries”类型,它是“Country”类型的数组:

<xsd:complexType name="Countries">
<xsd:complexContent> 
<xsd:restriction base="SOAP-ENC:Array">
<xsd:attribute wsdl:arrayType="tns:Country[]" ref="SOAP-ENC:arrayType"/>
 </xsd:restriction> 
</xsd:complexContent> 

“国家”类型具有以下三个元素。

</xsd:complexType> -
<xsd:complexType name="Country">
<xsd:all> 
<xsd:element name="coid" type="xsd:int"/>
<xsd:element name="countryName" type="xsd:string"/> 
<xsd:element name="countryCode" type="xsd:string"/>
</xsd:all>
</xsd:complexType>

因此,如果您的 android 代码没有创建客户端代理,您将需要解析 XML 以获取如上所示的数据。

它可能看起来像一些东西(简化):

<Countries>
  <Country>
    <coid>123</coid>
    <countryName>France</countryName>
    <countryCode>111</countryCode>
</Countries>
于 2013-02-02T19:55:02.810 回答