ruby - Savon v3.x - 如何将完整的 xml 消息作为 SOAP 请求传递

标签 ruby xml soap soap-client savon

使用 Savon 3.x 版本(当前主分支已找到 https://github.com/savonrb/savon )。

目前,要在 savon 3 中生成 SOAP 请求,您将消息正文定义为哈希,例如:

operation.body = {
  Search: {
    accountID: 23,
    accountStatus: 'closed'
  }
}

response = operation.call

根据哈希值,savon 将生成完整的 SOAP 消息 xml(信封、 header 等),并将该消息传递到 HttpClient 以将请求发布到您的 SOAP 端点。

我希望能够传递完整的 xml 消息作为我的请求,而不是哈希值,例如: my_xml_request_message =' ..... 更多嵌套节点、命名空间和大量属性等 ..... '

看来body被发送到build来创建soap请求,然后通过call发布: https://github.com/savonrb/savon/blob/master/lib/savon/operation.rb#L79

def call
  raw_response = @http.post(endpoint, http_headers, build)
  Response.new(raw_response)
end

所以我想是猴子补丁? call 允许我使用我的 xml block 覆盖 build,例如:

def call
  raw_response = @http.post(endpoint, http_headers, my_xml_request_message)
  Response.new(raw_response)
end

这就是我们陷入困境的地方 - 我不清楚我的 xml 是否已正确创建或发布。或者如果这是正确的处理方法...

预先感谢您的帮助!

最佳答案

我还没有使用Savon3,因为它还不稳定。在 v2 中你可以做的是:

client.call(:authenticate, xml: "<envelope><body></body></envelope>")

我想类似的东西在 v3 中也能工作。它存在于 v1 和 v2 中。

关于ruby - Savon v3.x - 如何将完整的 xml 消息作为 SOAP 请求传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21472013/

相关文章:

ruby-on-rails - 西里尔字符串 Я̆ Я̄ Я̈ 在 ruby​​ 和其他编程语言中返回长度 2 而不是 1

ruby-on-rails - Ruby 检查一行中是否存在记录和关联

ruby - 根据每个嵌套数组的第一个元素对 Ruby 数组重新排序

c# - 如何从 dataReader 列中读取 Xml 值

php - 使用 soap api 显示所有 otrs 票

c# - 如何使用旧的 WSDL+XSD 和当前的 Web 服务位置在 C# 中进行 SOAP 调用?

c# - 添加自定义 SoapClient header

ruby - 如何修复 a::b::c 类的 rubocop 攻击

sql-server - 将 1 对 n XML 列转换为表格数据

xml - 读取和写入 XML 文件