我正在使用 Savon 构建客户端,但想知道如何创建实际的信封。
我正在考虑使用 Nokogiri XML Builder 并只传递值,但不确定这是否是正确的方法。
可在此处找到 SOAP 信封规范:
最佳答案
我的回答是:不要。
Savon 会自动为您创建一个信封。您可以传递任何您想要的 header 和正文,作为数组和散列或 XML 字符串。您可以操纵现有(默认)命名空间,甚至可以覆盖输入操作。我不确定为什么有人需要在 XML 解析器(例如 nokogiri)中构建 SOAP 信封。
如果您不想使用 Savon 构建信封的原因是它缺少端点所需的某种功能,请告诉我确切的问题是什么。过去我不得不对 Savon 进行相当多的更改以满足某些 API,所以我可能已经为您准备了补丁。如果没有,我当然可以为您指明正确的方向,以便您创建自己的补丁。
如果您仍然需要在 Savon 之外构建一个信封,我建议您根本不要使用 Savon,而只需通过许多很棒的 http 库之一发送 XML。
编辑:
为了说明如何使用 SOAP header (和命名空间),您可以在请求方法中包括它们和正文:
client = Savon::Client.new "http://url.to/wsdl"
response = client.get do |soap|
# Use merge! for namespaces so that you don't overwrite all of the original namespaces (while still retaining the ability to overwrite individual ones)
soap.namespaces.merge!({
"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
"xmlns:xsd" => "http://www.w3.org/2001/XMLSchema"
})
# Use soap.header just like you would soap.body
soap.header = {
# SOAP header hash
}
# soap.body as usual
soap.body = {
# SOAP body hash
}
end
关于ruby - 如何在 Ruby 中创建 SOAP 信封?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2971606/