我使用Savon 2.11.1作为Ruby SOAP客户端。我使用以下代码创建客户端:
client = Savon.client(
:wsdl => "#{wsdl_file}",
env_namespace: :soapenv, # changes env namespace to soapenv namespace in requests
:logger => Rails.logger,
:convert_request_keys_to => :none,
:convert_response_tags_to => :none,
:log_level => :debug,
:pretty_print_xml => true,
:namespaces => {
"xmlns:tns" => "http://file.provisioning.services.com/",
"xmlns:ns1" => "http://schemas.services.com/types/"}
)
我正在尝试发送一些请求,其中一些元素没有命名空间。请求应如下所示:
<tns:addFile>
<mimeType>audio/wav</mimeType>
<ns1:data>ejrhkwerhjk4h5jk4h6j34htkwejfhks</ns1:data>
</tns:addFile>
使用以下代码生成一个请求,其中mimeType元素属于命名空间tns,服务器不接受该命令。
body = {"mimeType" => "audio/wav", "ns1:data" => "ejrhkwerhjk4h5jk4h6j34htkwejfhks"}
soap_response = client.call(:add_file, :message => body)
我有什么想法可以发送没有Savon任何命名空间的mimeType吗?
由于
答案 0 :(得分:0)
我最终通过重写我的Savon客户端解决了这个问题。我现在使用命名空间和端点全局变量而不是使用wsdl全局变量,如下所示:
@client = Savon.client(
:endpoint => "#{endPoint}",
:namespace => "http://file.provisioning.services.com/",
env_namespace: :soapenv, # changes env namespace to soapenv namespace in requests
:logger => Rails.logger,
:convert_request_keys_to => :none,
:convert_response_tags_to => :none,
:log_level => :debug,
:pretty_print_xml => true,
:namespaces => {
"xmlns:ns1" => "http://schemas.services.com/types/"}
)
现在使用以下代码生成一个请求,其中mimeType元素不属于命名空间。与以前的区别是需要为每个请求指定soap操作(您可以在wsdl中找到操作名称)。
body = {"mimeType" => "audio/wav", "ns1:data" => "ejrhkwerhjk4h5jk4h6j34htkwejfhks"}
soap_response = client.call(:addFile, :message => body, :soap_action => "#{soapAction}"))