Ruby w / Savon:与具有多个名称空间的SOAP服务交谈

时间:2014-12-12 20:01:30

标签: ruby xml soap savon

(注意:我是SOAP的新手,因此可能会遗漏一些明显的东西)

我当前生成的请求如下:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://service.com/services/base" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <tns:someOperation>
         <tns:suppliedParameterInstances>
            <tns:paramName>param_name</tns:paramName>
            <tns:instanceName>?</tns:instanceName>
            <tns:value>Value</tns:value>
         </tns:suppliedParameterInstances>
      </tns:someOperation>
   </soapenv:Body>
</soapenv:Envelope>

和来自已知工作请求的参考XML:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://service.com/services/base" xmlns:typ="http://type.service.com/types">
   <soapenv:Header/>                                                                                               
   <soapenv:Body>                                                                                                  
      <tns:someOperation>                                                                        
         <tns:suppliedParameterInstances>                                                                          
            <typ:paramName>param_name</typ:paramName>                                                       
            <typ:instanceName>?</typ:instanceName>                                                                 
            <typ:value>"Value"</typ:value>                                                        
         </tns:suppliedParameterInstances>     
      </tns:someOperation>
   </soapenv:Body>
</soapenv:Envelope>

我确实有一个WSDL,但我不知道如何阅读它,以确定Savon是否应该选择&#34; ts&#34; /&#34; typ&#34;事情(而且它不是我的,所以我不能把它交给互联网)。天啊,我不太了解SOAP,知道如何命名这个问题....无论如何!我需要在Savon上戳,直到第一个XML看起来像第二个。我需要阅读的任何想法或事物名称?

1 个答案:

答案 0 :(得分:0)

找到答案:Replicating XML Request with Savon/Ruby

&#34; GetList上的命名空间是正确的。你可能需要写的是

soap_client.call(:get_list,
                 :attributes => {'xmlns:b'=>'http://schemas.datacontract.org/'},
                 message: { 'ListRequest' => { 'tns:id' => 1 } }

这不是您问题的确切解决方案,因为我无法访问您的wsdl并且无法测试。但是你应该得到解决方案的关键。&#34;