2

我需要请求正文看起来像这样:

<env:Body>

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

</env:Body>

如何将附加属性添加到?

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

4

1 回答 1

2

具有自定义属性的 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">

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

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

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

更多信息和示例可以在新文档中找到。


更改默认编码

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

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

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

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

Take a look at "Send UTF-16 encoded SOAP request with Ruby and Savon" for information about how to change the processing instruction.

于 2011-04-23T11:06:02.057 回答