【问题标题】:Soap Custom XMl in Ruby with Savon使用 Savon 在 Ruby 中肥皂自定义 XML
【发布时间】:2011-04-20 18:32:22
【问题描述】:

我需要这样的请求正文:

<env:Body>

<abc:request token="0" id="1" version="4">
<category domain_id="630643"/>
</abc>

</env:Body>

如何将附加属性添加到?

另外,如何将编码从 UTF-8 更改为 UTF-16?在文档中找不到这个。

【问题讨论】:

    标签: ruby xml soap savon


    【解决方案1】:

    具有自定义属性的 SOAP 主体:

    client.request :abc, :request, :token => 0, :id => 1, :version => 4 do
      soap.body = {
        :category => "",
        :attributes! => { :category  => { "domain_id" => 630643 } }
      }
    end
    

    Savon::Client#request 接受命名空间、要调用的 SOAP 操作的名称以及 SOAP 输入标记的可选属性哈希。

    <abc:request version="4" id="1" token="0">
    

    可以通过特殊的:attributes! Hash 设置SOAP 主体标签的属性。请注意,domain_id 属性是一个字符串,因为哈希键符号(默认情况下)被转换为 lowerCamelCase。

    <category domain_id="630643"></category>
    

    还要注意,Gyoku 没有创建自闭合标签。 Savon 使用 Gyoku 将 Ruby 哈希转换为 XML,并且该库能够创建自闭合标签,但它似乎吞下了这些的自定义属性(v0.4.2)。 This is a bug 并且应该在下一个版本中修复。

    Further information and examples 可以在新文档中找到。


    更改默认编码

    Savon 使用HTTPI 执行HTTP 请求,您可以通过Savon::Client#http 访问HTTPI::Request 对象。应该可以通过设置自定义“Content-Type”标头将默认编码更改为 UTF-16。

    client.http.headers["Content-Type"] = "text/xml;charset=UTF-16"
    

    请注意,这不会改变 xml 处理指令的编码属性:

    <?xml version="1.0" encoding="UTF-8"?>
    

    查看“Send UTF-16 encoded SOAP request with Ruby and Savon”了解如何更改处理指令。

    【讨论】:

    • 那么如何使用soap.body 设置UTF-16 编码?
    • @rubii - 有关如何使其工作的任何更新?我将 Savon 0.9.7 与 client.http.headers["Content-Type"] = "text/xml;charset=UTF-16" 一起使用,但仍然出现错误: s o a p : C l i e n t f a u l t c o d e > F a i l e d t o p r o c e s s S O A P r e q u e s t 。 S O A P b o d y n o t i n U T F - 1 6 。
    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    相关资源
    最近更新 更多