2009-05-27 4 views
1

Ich habe Wsdl2ruby verwendet, um einen Client für einen Webdienst zu generieren. Wenn eine Servicemethode eine der in der WSDL definierten Ausnahmen auslöst, möchte ich auf die Attribute des Ausnahmeobjekts zugreifen. Von dem, was ich feststellen kann, wurde das Ausnahmeobjekt in ein SOAP :: Mapping :: Object gemarshallt, auf das durch das Detailattribut des SOAP :: FaultError-Objekts verwiesen wird, das dem RESCUE-Block zur Verfügung gestellt wird.Unmarshalling Ausnahme in WSDL2ruby SOAP :: FaultError Detail Attribut

Obwohl SOAP :: Mapping :: Object auf eine marshal_load -Methode reagiert, nimmt diese Methode einen Parameter, dumpobj, der mich glauben lässt, dass ich dieses Objekt als Parameter der Methode bereitstellen soll, anstatt das Objekt als Methode zu verwenden Empfänger.

Kann mir jemand auf ein Beispiel der richtigen Weise verweisen, das Ausnahmeobjekt zu entpacken?

Antwort

1

sieht aus wie der unmarshalling bereits erledigt ist, wenn Sie das SOAP-Sonde in :: 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