Savon哈希数组

时间:2013-06-18 15:23:02

标签: ruby soap savon

我正在尝试制作肥皂请求但是当我使用operation.body方法时,每个数组似乎都不在operation.build之后的xml中。

这是WSDL的一部分:

<xs:element name="Item" type="ns1:TList_Item"/>
--
<xs:complexType name="TList_Item">
  <xs:complexContent>
    <xs:restriction base="soapenc:Array">
      <xs:sequence/>
      <xs:attribute xmlns:n1="http://schemas.xmlsoap.org/wsdl/" ref="soapenc:arrayType" n1:arrayType="ns1:TItem[]"/>
    </xs:restriction>
  </xs:complexContent>
</xs:complexType>
--
<xs:complexType name="TItem">
  <xs:sequence>
    <xs:element name="Item_Name" type="xs:string"/>
    <xs:element name="Item_Code" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

我试过了:

operation.body = { Item: [item1,item2,..] }

但得到了这个错误:

ArgumentError: Expected a Hash for the :Item complex type

我也试过这个:

How to pass Array as parameter to SOAP in Ruby

没有错误,但内容从未在operation.build之后进入xml。

我该如何处理?

1 个答案:

答案 0 :(得分:1)

伯纳,

这里的问题是你的WSDL是RPC / Encoded(也由xs:restriction base属性上的“soapenc”命名空间前缀表示)和Savon版本3(尚未正式发布,只能通过GitHub获得)尚不支持这种风格。

RPC / Encoded很少使用,但通常在遗留系统中找到。它定义了一个现在尚未实现的全新类型系统。我还在制作一个合适的类型系统 对于XML Schema,它是推荐用于WSDL文档的,并且已经做了很多工作。所以我不确定何时支持RPC / Encoded。

我建议你改用版本2。请确保遵循文档,因为版本2与版本3完全不同:http://savonrb.com/version2.html

版本2没有使用WSDL中的大量信息,因此您可以选择是否使用它。你可能需要尝试不同的选项来为你的服务工作(有很多),但它应该有效。

编辑:我将更改版本3以引发RPC /编码SOAP操作的错误,以显示当前不支持此功能。谢谢。