我正在使用Delphi 2007。
使用WSDL导入器,我从外部WSDL创建了一个包含多个函数的单元。
不幸的是,它不包含返回的XML的显式结果类型。
F.i。函数getHash('login','password')返回以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="...........>
<SOAP-ENV:Body>
<ns1:getHashResponse>
<return xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">code</key>
<value xsi:type="xsd:string">1004</value>
</item>
<item>
<key xsi:type="xsd:string">error</key>
<value xsi:type="xsd:string">Login was not successfull</value>
</item>
</return>
</ns1:getHashResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
由此我一直在尝试定义正确的类。 到目前为止我想出的是:
TKeyValue = class;
TArrayofKeyValue = array of TKeyValue;
TKeyValue = class(TRemotable)
private
FKey: String;
FValue: String;
published
property Key: String read FKey write FKey;
property Value: String read FValue write FValue;
end;
function getHash(const uid: WideString; const pwd: WideString): TArrayOfKeyValue; stdcall;
当我使用此代码进行测试时,我确实得到了两个TKeyValue实例。但他们都是空的。 我的班级定义有什么问题?或者我是以错误的方式去做的?
最好是一个更好的WSDL,但这不取决于我。