使用名为“的方法”的Webservice;键入“";”;。如何使用ruby使用它?

使用名为“的方法”的Webservice;键入“";”;。如何使用ruby使用它?,ruby,soap4r,Ruby,Soap4r,我正在使用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}" 第四行给出了“

我正在使用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已被弃用。我想调用从web服务获得的结果的“type”方法。我不拥有web服务,因此无法更改它


谢谢你的帮助。提前感谢。

type方法可能是使用method\u missing调用的,当对象上存在该方法时,该机制不起作用。如果是这样的话,这一小段猴子补丁将删除Object.type:

class Object
  undef_method :type
end
将此代码放在调用web服务之前的某个位置,它应该可以工作


另一种解决方法是升级到ruby 1.9。类型方法消失了

我将寻找一种方法,允许您传入表示所需属性的符号。大概是

puts "jobtype is #{result.some_method(:type)}"
或(可能性较小)


@froderik的回答可能对一个特定场景有所帮助,但如果您想要的属性被称为“class”、“send”或“initialize”,该怎么办?soap库必须以某种方式处理这种情况,除非它设计得很糟糕。

只是猜测,但是
result['type']
呢?或者
result[:type]

关于
result.send:type
?什么类型是
result
?有哪些方法?谢谢回答。当我使用“result.send:type”时-“SOAP::Mapping::Object”和相同的警告-“warning:Object#type已弃用;use Object#class”@Mladen Jablanović-对象结果包含web服务给出的响应。如果需要,我也可以提供XML响应。result.methods的输出是[“inspect”、“summary”、“priority”、“name”、“tap”、“clone”、“type”、“protected\u methods”、“==”、“marshal\u dump”、“fileIndex”、“==”、“is\u a?”、“[]”、“[]”、“startTime”、“meta”],我认为这也会有所帮助。web服务的XML响应。6867bb85-9937-410b-8703-f876e65235c3 0未定义谢谢回答。刚刚尝试过的“puts”类型是#{result['type']}”,而“puts”类型2是#{result[:type]}”。控制台中的输出是“type is”和“type2 is”(即空),感谢Andrew的回答。当我观察到错误时,你的方法是我也采取的第一件事。我查看了WSDL和wsdl2ruby实用程序生成的客户机(存根)。web服务提供商(用.Net编写)没有包含此类功能。我将在我的代码中尝试froderik的解决方案,并测试它hanks@froderik以获得您的答案。成功了!谢天谢地,我在使用web服务时只遇到了一个方法(“type”),并使用您的建议获得了我想要的输出。希望没有这样的歧义。关于升级到1.9,有大量的代码需要迁移,所以我终有一天会到达那里。只需小心使用monkey修补整个对象类,在我看来,最好只修补所涉及的对象,即
puts "jobtype is #{result.some_method("type")}"