ruby - 如何在 Ruby 中创建 SOAP 信封?

标签 ruby soap nokogiri

我正在使用 Savon 构建客户端,但想知道如何创建实际的信封。

我正在考虑使用 Nokogiri XML Builder 并只传递值,但不确定这是否是正确的方法。

可在此处找到 SOAP 信封规范:

http://api.postalmethods.com/PostalWS.asmx?op=UploadFile

最佳答案

我的回答是:不要。

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/

相关文章:

html - navbar-right 在 Bootstrap 导航中没有响应

c# - 在对 SOAP 请求进行数字签名时指定#Body 的引用 URI - 使用 WCF

php - 在 php 中解析 SOAP 响应

java - 检查 weblogic 服务器中 spasfic 组内的用户是否有 Web 服务应用程序

ruby-on-rails - 无法加载 Rails 服务器甚至无法在任何来源中找到 pg-0.17.1

ruby - 使用 Nokogiri 解析大型 HTML 文件

ruby - 如何使用 Mechanize 解析本地文件

ruby - 如何在 Ruby 中每 3 位小数后用空格格式化 float ?

ruby-on-rails - Rails 中 Controller 的嵌套命名空间

ruby - Rails 延迟工作不工作