我正在尝试使用Savon访问带有WSDL的SOAP API。
在WSDL中,它定义了complexType,如下所示:
<s:complexType name="UserAdd">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" nillable="true" name="user_location" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" nillable="true" name="number" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" nillable="true" name="user_table" type="s:string"/>
</s:sequence>
</s:complexType>
我知道服务器期望这种格式的请求:
<item>
<key xsi:type="xsd:string">user_location</key>
<value xsi:type="xsd:string">here</value>
</item>
<item>
<key xsi:type="xsd:string">number</key>
<value xsi:type="xsd:string">1234549789</value>
</item>
<item>
<key xsi:type="xsd:string">user_table</key>
<value xsi:type="xsd:string">there</value>
</item>
但是,当我在Savon中生成查询时如下:
hash_of_vars = {user_location: here, number: 1234549789, user_table: there}
response = @@call_client.call(:user_add, message: {data: hash_of_vars})
Savon生成的XML看起来像这样:
<data><user_location>here</user_location><number>1234549789</number><user_table>there</user_table></data>
运行此服务器时从服务器收到的错误是:
Cannot use object of type stdClass as array
有没有办法让Savon符合WSDL并以服务器期望看到的格式输出请求,而不创建明确定义所有项/键/值关系的哈希?