1

wsdl2ruby を使用して Web サービスのクライアントを生成しました。サービス メソッドが WSDL で定義された例外の 1 つを発生させた場合、例外オブジェクトの属性にアクセスしたいと思います。私が知る限り、例外オブジェクトは SOAP::Mapping::Object にマーシャリングされ、RESCUE ブロックで使用できるようになった SOAP::FaultError オブジェクトの detail 属性によって参照されます。

SOAP::Mapping::Object は marshal_load メソッドに応答しますが、そのメソッドは dumpobj という 1 つのパラメーターを受け取ります。このため、オブジェクトをメソッドのレシーバーとして使用するのではなく、そのオブジェクトをメソッドのパラメーターとして提供する必要があると思われます。

例外オブジェクトをアンマーシャリングする適切な方法の例を教えてもらえますか?

4

1 に答える 1

1

SOAP::Mapping::Object を調べると、アンマーシャリングはすでに行われているように見えます...

rescue SOAP::FaultError => ee
  ## InvalidLogin, InvalidLocale, NoPermission, RuntimeFault
  ## ee.detail.__xmlele[0][0] is an XSD::QName object, with accessors name and namespace
  ## ee.detail.__xmlele[0][1] is a VMware::VIM25::xxx fault object
  vim_fault = ee.detail.__xmlele[0][1]
  case vim_fault.class
  when VMware::VIM25::InvalidLogin
  when VMware::VIM25::InvalidLocale
  when VMware::VIM25::NoPermission
  when VMware::VIM25::RuntimeFault
于 2009-11-18T22:57:52.510 に答える