Ruby 如何将这个示例savon1代码转换为savon2?

Ruby 如何将这个示例savon1代码转换为savon2?,ruby,soap,savon,Ruby,Soap,Savon,我试着从Ryan Bates的ruby演员阵容中运行这段代码,但它不起作用。我认为它假设使用Savon 1 require "savon" client = Savon::Client.new("http://www.webservicex.net/uszip.asmx?WSDL") response = client.request :web, :get_info_by_zip, body: { "USZip" => zip } if response.success?

我试着从Ryan Bates的ruby演员阵容中运行这段代码,但它不起作用。我认为它假设使用Savon 1

require "savon"

client = Savon::Client.new("http://www.webservicex.net/uszip.asmx?WSDL")
response = client.request :web, :get_info_by_zip, body: { "USZip" => zip }  
if response.success?  
   data = response.to_array(:get_info_by_zip_response, :get_info_by_zip_result, :new_data_set, :table).first  
   if data  
     @state = data[:state]  
     @city = data[:city]  
     @area_code = data[:area_code]  
     @time_zone = data[:time_zone]

     puts @state
     puts @city
     puts @area_code
   end  
 end  

Savon 2的正确实现是什么?我想复制并粘贴它,然后让它工作。

这里是我的服务包装类的一个摘录,它为其他ruby对象提供SOAP服务。我通过为每个SOAP操作提供WSDL位置和自己的方法来初始化客户机。第三方方法通过@client.call调用,该调用传递一个块,该块使用提供的参数创建SOAP消息

  class Client
    include Singleton

    def wsdl_method_to_call
      begin
        response = @client.call(:wsdl_method_to_call) do
          message auth:CREDENTIALS, param_1: param_1_value, param_2: param_2_value
        end
      rescue
        raise CustomServiceException.new("Error ... , response : #{response}")
      end
    end


    def initialize()
      @client = Savon::Client.new(wsdl: WSDL)
    end

    private
    WSDL = "http://service_host/wsdl"
    CREDENTIALS = "foo|bar"

  end
因此,也许你应该尝试以下方式:

response = client.call(:get_info_by_zip) do
  message USZip: zip
end