当WSDL需要(complexType - sequence)包含多个元素时,更改Savon的输出

时间:2013-09-17 06:48:33

标签: ruby-on-rails-3 soap wsdl savon

我正在尝试使用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并以服务器期望看到的格式输出请求,而不创建明确定义所有项/键/值关系的哈希?

0 个答案:

没有答案