gpt4 book ai didi

ruby-on-rails - Rails - Savon 设置多个命名空间

转载 作者:行者123 更新时间:2023-12-04 04:35:49 26 4
gpt4 key购买 nike

我正在使用 savon version 2 (使用 Ruby on Rails )调用 web 服务,我需要向我的信封注入(inject)一些额外的命名空间。就像是:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:add="http://schemas.xmlsoap.org/ws/2003/03/addressing"
xmlns:newNamespace1="http://someURL.pt/Test1"
xmlns:newNamespace2="http://someURL.pt/Test2"
xmlns:newNamespace3="http://someURL.pt/Test3"

我目前的代码是:
client = Savon.client do
wsdl "https://someValidURL?wsdl"

namespace "http://someURL.pt/Test1"
namespace "http://someURL.pt/Test2"
namespace "http://someURL.pt/Test3"
end

response = client.call( ...the webservice call... )

...但在我的要求中,Savon 只放置了最后一个命名空间
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsns="http://someURL.pt/Test3"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">

我在 Savon Git project 上没有找到任何关于此的文档.

有没有人有解决这个问题的方法??

PS-我还检查了一种可能的解决方案是将所有 xml 请求(信封)设置为请求,但是......嗯......太像黑客了。

如果这是不可能的并且有其他好的 gem 可以做到这一点,请告诉我=)

最佳答案

我发现(目前)不可能在 Savon 版本 2 上设置多个命名空间。

现在我在 Savon 版本 1 上迁移我的应用程序并且它有效 =)

begin
client = Savon::Client.new do
wsdl.document = "https://someURL?wsdl"
end

@response = client.request :service do
soap.namespaces["xmlns:test1"] = "http:/someURLtest1"
soap.namespaces["xmlns:test2"] = "http:/someURLtest2"

soap.body = { #... the message....
:"test1:something" => {},
:"test2:something1" => {}
}
end


rescue Savon::Error => error
log error.to_s
end

更多信息 herehere .

这个问题将在 Savon 2 的下一个版本中使用以下代码解决:
namespaces(
"xmlns:first" => "http://someURL.pt/Test1",
"xmlns:two" => "http://someURL.pt/Testweewqwqeewq"
)

关于ruby-on-rails - Rails - Savon 设置多个命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14501269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com