【问题标题】:Savon array of hashSavon 哈希数组
【发布时间】:2013-06-18 15:23:01
【问题描述】:

我正在尝试发出肥皂请求,但是当我使用 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。

我应该如何处理这个问题?

【问题讨论】:

    标签: ruby soap savon


    【解决方案1】:

    伯纳多,

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

    RPC/Encoded 很少使用,但通常用于遗留系统。它定义了一个全新的类型系统,现在还没有实现。我仍在研究一个合适的类型系统 用于 WSDL 文档推荐的 XML Schema,这已经是很多工作了。所以我不确定何时支持 RPC/Encoded。

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-22
      • 1970-01-01
      • 2012-10-29
      • 2021-11-21
      • 2021-02-05
      • 2019-10-27
      • 2017-05-11
      • 2019-05-23
      相关资源
      最近更新 更多