使用 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/