如何使用 Savon 向 SOAP 标头添加属性?
Posted
技术标签:
【中文标题】如何使用 Savon 向 SOAP 标头添加属性?【英文标题】:How do I add an attribute to a SOAP header with Savon? 【发布时间】:2012-02-18 18:18:17 【问题描述】:我需要将这个属性(xmlns:wsa="http://www.w3.org/2005/08/addressing")添加到soap标头中,如下所示:
<env:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
</env:Header>
我该如何使用 Savon?
【问题讨论】:
【参考方案1】:在我的情况下,我实际上能够针对该问题采取另一种解决方法,因为我的端点会接受这一点:
<env:Header>
<wsa:Action xmlns:wsa="http://www.w3.org/2005/08/addressing">value</wsa:Action>
</env:Header>
调查原始问题,这是 Savon 创建者的回复:
“嘿,大神,
查看创建标题和正文标签的代码,似乎没有 现在可以在没有猴子补丁的情况下添加任何属性/命名空间:
https://github.com/rubiii/savon/blob/v0.9.7/lib/savon/soap/xml.rb#L151
如果您仍需要此功能,请开票,我会看看我能做什么: https://github.com/rubiii/savon/issues
我目前非常热衷于采用一种新方法来改进图书馆, 所以我不确定什么时候能解决你的问题。但是......我一起黑了 一个小猴子补丁,在实现此功能之前应该有所帮助:
https://gist.github.com/1698636
干杯, 丹尼尔”
【讨论】:
【参考方案2】:您可以像这样将自己的命名空间添加到请求中:
resp = client.request :soap_action do
soap.namespace['xmlns:wsa'] = 'http://www.w3.org/2005/08/addressing'
end
【讨论】:
我知道,但这不会将属性添加到有问题的标题中。 (这对我的肥皂请求被另一端接受很重要)。【参考方案3】:foo = client.request 做 soap.header['xmlns:wsa'] = 'http://www.w3.org/2005/08/addressing' 结束
【讨论】:
不,这会生成:<env:Header> <xmlns:wsa>http://www.w3.org/2005/08/addressing</xmlns:wsa></env:Header>
以上是关于如何使用 Savon 向 SOAP 标头添加属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何找出安装的 savon(Ruby 的 SOAP 客户端)的版本?