Dav*_*vid 2 ruby soap savon ruby-on-rails-3
这就是我创建一个客户端的方式:
@client = Savon::Client.new do
wsdl.document = my_document
wsdl.endpoint = my_endpoint
end
Run Code Online (Sandbox Code Playgroud)
这就是我得到回应的方式:
@response = @client.request :the_action do
soap.body = xml
soap.body = {"applicationId" => my_application_id }
end
Run Code Online (Sandbox Code Playgroud)
但是,这会生成以下xml:
"<ins5:applicationId>XXXXXXXXXXXXXX</ins5:applicationId>"
Run Code Online (Sandbox Code Playgroud)
由于前缀,我的soap服务错误.如果我这样做,它的工作原理:
@response = @client.request :the_action do
soap.body = "<applicationId>#{my_application_id}</applicationId>"
end
Run Code Online (Sandbox Code Playgroud)
然而,由于各种原因,这是一种痛苦.有没有办法阻止savon附加前缀?
使用savon 0.9.6.
这看起来可能是savon 0.9.6中的一个错误.尝试更新您的客户端,创建如下代码:
@client = Savon::Client.new do
wsdl.document = my_document
wsdl.endpoint = my_endpoint
wsdl.element_form_default = :unqualified
end
Run Code Online (Sandbox Code Playgroud)
编辑:如果其他人遇到此问题,请使用解决方案更新答案
事实证明,如果你提供一个wsdl.document savon将为你的元素添加前缀.你最好不要使用wsdl文件,只需定义你需要的命名空间,如下所示:
@client = Savon::Client.new do
wsdl.endpoint = "http://..."
wsdl.namespace = "http://..." # target namespace
end
@response = @client.request :namespace_prefix, :soap_action do
soap.element_form_default = :unqualified
soap.namespaces["xmlns:ns1"] = "http://..."
soap.namespaces["xmlns:ns2"] = "http://..."
soap.body = {:application_id => my_application_id }
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4269 次 |
| 最近记录: |