2011-06-21 23 views
2

私はSavonを使ってWebサービスクライアントを開発しています。Savon + Rails 2 XMLのリクエスト構造を変更する方法

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 

私は、私の場合であり、私は例のWDSLで最初に試してみることにした初心者、ですので、そのコードによって生成される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

二つのこと:

  1. あなたが追加する必要があります。WSDLあなたがタグの綴りが

    response = client.request :wsdl, :conversion_rate do 
    
    への正しい

変更であることを確認する必要があり、コール

  • および

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

    それはあなたのためにそれを行う必要があります。

  • 関連する問題