试图用Savon构建SOAP请求?

我试图从Ruby on Rails获得一个SOAP服务 – 从SOAP UI我可以很好地完成它,请求XML如下所示:

           1  90  -110.5322  35.2108       Additional     

如果我将那个确切的XML复制到带有request = %q(XML STRING)到savon的Ruby字符串中并使用该方法然后在Savon中调用以下内容:

 response = client.call(:get_info, xml: request) 

它按预期工作,我得到了我的回应 – 但实际上我想把参数传递给Savon。 到目前为止,我尝试了以下内容:

  coordinate = { Id: '1', X: -110.5322, Y: 35.2108, QualityIndex: 90 } coordinates = {Coordinates: [coordinate] } coordinateReq = {coordReq: {coordinates: coordinates} } response = client.call(:get_informations_for_coordinates, message: coordinateReq) 

这失败了,如果我查看我发送的XML,如下所示:

       1 -110.5322 35.2108 90       

与从SOAP UI发送的内容相比,我缺少xmlns:mum命名空间 – 无论如何我可以添加它我的请求,以便将它添加到每个参数,即X,Y QualityIndex – 也是类似于tns的tem我的Savon调用被添加到SOAPUI中的coordReq但不在我的Savon调用中 – 无论如何我可以添加它吗?

另外,我在解决如何构建请求的analysisTypes和AnalysisType部分时遇到了一些困难?

从文档 :

命名空间

如果您没有将命名空间传递给Savon::Client#request ,Savon将为您注册目标命名空间( “xmlns:wsdl” )。 如果您确实传递了命名空间,Savon将使用它而不是默认命名空间。 例如:

 client.request :v1, :get_user      

您始终可以设置命名空间或覆盖由Savon设置的命名空间。 命名空间存储为简单的哈希。

 # setting a new namespace soap.namespaces["xmlns:g2"] = "http://g2.example.com" # overwriting the "xmlns:wsdl" namespace soap.namespaces["xmlns:wsdl"] = "http://ns.example.com" 

显然,对于Savon 2,设置多个名称空间是不可能的 :

我发现不可能(现在)在Savon的第2版上设置多个名称空间。

现在我在Savon版本1上迁移我的应用程序,它工作=)

要使用多个名称空间,请在客户端定义中添加以下类型的代码

 ... :namespaces => { "xmlns:v2" => "http://v2.example.com", "xmlns:v1" => "http://v1.example.com" }, ...