2012-10-22 57 views
2

我正在使用ruby(1.8.7)和soap4r(1.5.8)來使用Web服務。 Web服務有一個名爲「type」的方法,我無法獲得該值。使用名爲「type」的方法的Webservice。如何使用ruby來使用它?

@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服務獲得的結果的「類型」方法。我不擁有網絡服務,所以我不能改變它。

任何幫助表示讚賞。提前致謝。

+0

'result.send:type'怎麼樣? –

+0

'結果'是什麼類型?它有哪些方法? –

+0

感謝您的回答。當我使用「result.send:type」時,我得到了 - 「SOAP :: Mapping :: Object」和相同的警告 - 「warning:Object#type is deprecated; use Object#class」 – MPK

回答

4

可能使用method_missing調用類型方法,並且當Object上的方法存在時,此機制不起作用。如果是的話這個小片猴子打補丁的擺脫Object.type的:

class Object 
    undef_method :type 
end 

調用Web服務在什麼地方將這個代碼,它應該工作。

解決它的另一種方法是升級到紅寶石1.9。類型方法消失了!

+0

感謝@froderik你的答案。有效!幸運的是,在使用Web服務時,我只遇到一種方法(「類型」),並使用您的建議獲取我想要的輸出。希望沒有這種含糊之處。關於升級到1.9,有很大的代碼基礎遷移,所以我最終會有一天到達那裏。 – MPK

+2

只需要小心修補整個Object類,IMO就可以更好地修改所涉及的對象,也就是'class << result; undef_method:type;結束' –

1

我會尋找一種方法,允許您傳入代表您想要的屬性的符號。它會是這樣的

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

或(不太可能)

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

@ froderik的回答可以幫助你爲一個特定的場景,但是如果你想要的屬性被稱爲「類」,或「發送」還是「初始化」?肥皂庫必須以某種方式處理這種情況,除非它設計得很差。

+0

感謝安德魯您的答案。當我觀察錯誤時,你的方法也是我首先採用的方法。我查看了WSDL和從wsdl2ruby實用程序生成的客戶端(存根)。 Web服務提供商(以.Net編寫)沒有包含這些功能。我會在我的代碼中嘗試froderik的解決方案並測試它 – MPK

1

只是猜測,但如何result['type']?或者result[:type]

+0

感謝您的回答。剛剛嘗試'puts'類型是#{result ['type']}「'和'puts'type2是#{result [:type]}」'。控制檯中的輸出是「type is」和「type2 is」(即空) – MPK

相關問題