【发布时间】: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?在文档中找不到这个。
【问题讨论】:
我需要这样的请求正文:
<env:Body>
<abc:request token="0" id="1" version="4">
<category domain_id="630643"/>
</abc>
</env:Body>
如何将附加属性添加到?
另外,如何将编码从 UTF-8 更改为 UTF-16?在文档中找不到这个。
【问题讨论】:
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”了解如何更改处理指令。
【讨论】: