2

我正在使用 ruby​​ (1.8.7) 和 soap4r (1.5.8) 使用 Web 服务。Web 服务有一个名为“type”的方法,我无法获取该值。

@driver=SOAP::WSDLDriverFactory.new(WSDL_URL).create_rpc_driver
result = @driver.GetJob(:jobid => "123")
puts "jobname is #{result.name}"
puts "jobtype is #{result.type}"

第四行给了我“警告:不推荐使用 Object#type;使用 Object#class”。我知道 Object.type 已被弃用。我想调用从 Web 服务获得的结果的“类型”方法。我不拥有网络服务,所以我无法更改它。

任何帮助表示赞赏。提前致谢。

4

3 回答 3

4

类型方法可能是使用 method_missing 调用的,当该方法存在于 Object 时,此机制不起作用。如果是这样,这个小猴子修补程序摆脱了 Object.type:

class Object
  undef_method :type
end

将此代码放在调用 Web 服务之前的某个位置,它应该可以工作。

解决它的另一种方法是升级到 ruby​​ 1.9。类型方法没了!

于 2012-10-22T21:38:19.593 回答
1

只是猜测,但怎么样result['type']?或者result[:type]

于 2012-10-22T22:48:44.987 回答
1

我会寻找一种方法,允许您传入代表所需属性的符号。会是这样的

puts "jobtype is #{result.some_method(:type)}"

或(不太可能)

puts "jobtype is #{result.some_method("type")}"

@froderik 的回答可能会在一种特定情况下对您有所帮助,但是如果您想要的属性被称为“类”、“发送”或“初始化”怎么办?除非设计不当,soap 库必须以某种方式处理这种情况。

于 2012-10-22T22:17:39.313 回答