我正在制作一个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();
}
答案 0 :(得分:1)
WSDL本身不是数据格式。它是基于XML的Web服务合同描述。使用WSDL定义输入参数和结果输出。见WSDL
使用XML架构定义(XSD)定义数据。见XSD
我对Android不熟悉,但应该有一些库支持或第三方工具来读取WSDL定义并创建代表客户端代理的java类。
(更新) 响应返回一种“国家”
<message name="getCountryListResponse">
<part name="return" type="tns:Countries"/>
</message>
如果查看“Countries”类型,它就是一个数组 “国家”类型:
<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>