使用savon版本3.x(找到当前的主分支https://github.com/savonrb/savon)。
当前要在savon 3中生成soap请求,可以将消息体定义为散列,例如:

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

response = operation.call

savon将从散列中生成完整的soap消息xml(信封、头等),并将该消息传递到HttpClient以将请求发送到soap端点。
我希望能够传入完整的xml消息作为我的请求,而不是散列,例如:
我的xml请求'
..... 更多的嵌套节点、名称空间和大量的属性等等……
'
似乎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块重写build,例如:
def call
  raw_response = @http.post(endpoint, http_headers, my_xml_request_message)
  Response.new(raw_response)
end

这就是我们陷入困境的地方——我不清楚我的xml是否被正确地创建或发布或者如果这是正确的方法。。。
提前感谢您的帮助!

最佳答案

我还没用萨文3,因为它还不稳定。在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/

10-09 02:28