如何使用 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' 结束

【讨论】:

不,这会生成:&lt;env:Header&gt; &lt;xmlns:wsa&gt;http://www.w3.org/2005/08/addressing&lt;/xmlns:wsa&gt;&lt;/env:Header&gt;

以上是关于如何使用 Savon 向 SOAP 标头添加属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何找出安装的 savon(Ruby 的 SOAP 客户端)的版本?

使用Savon和Nokogiri在Rails中解析XML SOAP响应的内存不足

如何使用 Java JAX-WS 添加 SOAP 标头

如何将 HTTP 标头添加到 SOAP 客户端

使用 Java 添加 Soap 操作标头

我如何订购 SOAP 请求标头?