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}"

4行目は、「警告:Object#typeは非推奨です。Object#classを使用してください」と表示されます。Object.typeが非推奨になっていることは知っています。Webサービスから取得した結果の「type」メソッドを呼び出したいと思います。私はWebサービスを所有していないため、変更できません。

助けていただければ幸いです。前もって感謝します。

4

3 に答える 3

4

タイプメソッドはおそらくmethod_missingを使用して呼び出され、メソッドがオブジェクトに存在する場合、このメカニズムは機能しません。もしそうなら、この小さなモンキーパッチはObject.typeを取り除きます:

class Object
  undef_method :type
end

このコードをWebサービスを呼び出す前のどこかに置くと、機能するはずです。

それを解決する別の方法は、ruby1.9にアップグレードすることです。タイプメソッドはなくなりました!

于 2012-10-22T21:38:19.593 に答える
1

必要な属性を表すシンボルを渡すことができるメソッドを探します。それは次のようなものになります

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

または(可能性は低い)

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

@froderikの答えは、ある特定のシナリオに役立つかもしれませんが、必要な属性が「クラス」、「送信」、または「初期化」と呼ばれた場合はどうでしょうか。ソープライブラリは、設計が不適切でない限り、このようなシナリオを何らかの方法で処理する必要があります。

于 2012-10-22T22:17:39.313 に答える
1

推測だけですが、どうresult['type']ですか?またはresult[:type]

于 2012-10-22T22:48:44.987 に答える