繁体   English   中英

Savon + Rails 2如何修改XML的请求结构

[英]Savon + Rails 2 How to modify XML's request structure

我正在使用Savon开发Web服务客户端。 由于我是初学者,因此我决定首先尝试使用示例WDSL,在我的情况下为:

http://www.webservicex.com/CurrencyConvertor.asmx?wsdl

我的控制器非常简单:

require 'savon'

class WebServiceController < ApplicationController  
  def index
    puts "web_service: IN"    
    client = Savon::Client.new do
      wsdl.document = "http://www.webservicex.com/CurrencyConvertor.asmx?wsdl"
    end

    response = client.request :conversion_rate do
      soap.body = {
        :from_currency => 'USD',
        :to_currency => 'EUR'
      }
    end    
    puts response.to_hash;    
    render :text => response.to_hash    
  end
end

该代码生成的XML是:

<env:Envelope   xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                xmlns:wsdl="http://www.webserviceX.NET/" 
                xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
    <env:Body>
        <ConversionRate>
            <wsdl:fromCurrency>USD</wsdl:fromCurrency>
            <wsdl:toCurrency>EUR</wsdl:toCurrency>
        </ConversionRate>
    </env:Body>
</env:Envelope>

但是,XML应该是(我知道这是因为我正在使用soapUI):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                    xmlns:web="http://www.webserviceX.NET/">
<soapenv:Header/>
   <soapenv:Body>
      <web:ConversionRate>
         <web:FromCurrency>USD</web:FromCurrency>
         <web:ToCurrency>EUR</web:ToCurrency>
      </web:ConversionRate>
   </soapenv:Body>
</soapenv:Envelope>

我知道我的XML请求无法正常工作,因为我总是得到“ 0”(零)作为响应,并且使用soapUI生成的“正确” XML请求可以得到正确的值(例如“ 0.6959” ...)。

我的代码中缺少什么吗?

谢谢!!!

两件事情:

  1. 您需要在通话中添加:wsdl
  2. 您需要确保标签的拼写正确

改成

response = client.request :wsdl, :conversion_rate do

"FromCurrency" => 'USD',
"ToCurrency" => 'EUR'

那应该为你做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM