Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 1875

Show
Ignore:
Timestamp:
07/04/07 23:13:11 (1 year ago)
Author:
nahi
Message:
  • rescue an exception if object serialization failed for 'detail' object of SOAPFault.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/soap/rpc/router.rb

    r1872 r1875  
    360360    # SOAP exception element. 
    361361    detail = nil 
    362     if (wsdl_fault_details) 
    363       registry = wsdl_fault_details[:use] == "literal" ? 
    364         @literal_mapping_registry : @mapping_registry 
    365       faultQName = XSD::QName.new( 
    366         wsdl_fault_details[:ns], wsdl_fault_details[:name] 
    367       ) 
    368       detail = Mapping.obj2soap(e, registry, faultQName) 
    369       # wrap fault element (SOAPFault swallows top-level element) 
    370       wrapper = SOAP::SOAPElement.new(faultQName) 
    371       wrapper.add(detail) 
    372       detail = wrapper 
    373     else 
    374       # Exception is a normal program exception. Wrap it. 
    375       detail = Mapping.obj2soap(Mapping::SOAPException.new(e), 
    376                                 @mapping_registry) 
    377       detail.elename ||= XSD::QName::EMPTY # for literal mappingregstry 
     362    begin 
     363      if (wsdl_fault_details) 
     364        registry = wsdl_fault_details[:use] == "literal" ? 
     365          @literal_mapping_registry : @mapping_registry 
     366        faultQName = XSD::QName.new( 
     367          wsdl_fault_details[:ns], wsdl_fault_details[:name] 
     368        ) 
     369        detail = Mapping.obj2soap(e, registry, faultQName) 
     370        # wrap fault element (SOAPFault swallows top-level element) 
     371        wrapper = SOAP::SOAPElement.new(faultQName) 
     372        wrapper.add(detail) 
     373        detail = wrapper 
     374      else 
     375        # Exception is a normal program exception. Wrap it. 
     376        detail = Mapping.obj2soap(Mapping::SOAPException.new(e), 
     377                                  @mapping_registry) 
     378        detail.elename ||= XSD::QName::EMPTY # for literal mappingregstry 
     379      end 
     380    rescue 
     381      detail = SOAPString.new("failed to serialize detail object: #{$!}") 
    378382    end 
    379383