首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将此示例Savon 1代码转换为Savon 2?

如何将此示例Savon 1代码转换为Savon 2?
EN

Stack Overflow用户
提问于 2014-01-28 04:29:13
回答 1查看 471关注 0票数 0

我试着从Ryan Bates的ruby cast中运行这段代码,但它不起作用。我认为它假定使用了Savon 1。

代码语言:javascript
复制
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的正确实现是什么?我想复制并粘贴它,然后让它工作。

EN

回答 1

Stack Overflow用户

发布于 2014-01-28 06:42:54

下面是我的Service-Wrapper类的摘录,该类为其他ruby对象提供SOAP-Services。我通过为每个SOAP操作提供WSDL位置和自己的方法来初始化客户端。第三方方法是通过传递一个块的@client.call调用的,该块创建一个带有所提供参数的SOAP消息。

代码语言:javascript
复制
  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

所以也许你应该试着这样做:

代码语言:javascript
复制
response = client.call(:get_info_by_zip) do
  message USZip: zip
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21391018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档