ruby - Savon 哈希数组

标签 ruby soap savon

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

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

最佳答案

贝尔纳多

这里的问题是您的 WSDL 是 RPC/编码的(也由 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/编码的 SOAP 操作引发错误,以表明当前不支持此功能。谢谢。

关于ruby - Savon 哈希数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17172762/

相关文章:

ruby - Ruby 中的累积逆数组和

asp.net - Fiddler 无法从 ASP.NET 网站嗅探 SOAP 流量

c# - WP8 应用程序中具有 WCF 服务的凭据

ruby - 为 Savon 2 (SOAP) 传递数组元素

用于使用 xsd :import 使用 Web 服务 wsdl 的 Ruby gem

ruby-on-rails - 在 Savon 中解析日期和时间时丢失 xml 数据

ruby - 我应该如何公开宣布新的 ruby gem ?

ruby - 如何在 YAML 中创建一个空数组?

python - 如何使用指定文件名的 wget 在本地镜像 html 文件及其随附图像?

java - AXIS2 轴故障 : this is a soap-encoded endpoint