Savon请求包含不属于命名空间的元素

时间:2016-02-01 23:37:24

标签: savon

我使用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吗?

由于

1 个答案:

答案 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}"))