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

Changeset 1448

Show
Ignore:
Timestamp:
02/22/05 09:51:36 (4 years ago)
Author:
nahi
Message:

add a custom Array factory sample.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/sample/soap/customfactory.rb

    r1447 r1448  
    5151end 
    5252 
     53class ExplicitTypedArrayFactory < SOAP::Mapping::Factory 
     54  def obj2soap(soap_class, obj, info, map) 
     55    unless obj.respond_to?(:arytype) 
     56      return nil 
     57    end 
     58    soap_obj = soap_class.new(ValueArrayName, 1, obj.arytype) 
     59    mark_marshalled_obj(obj, soap_obj) 
     60    obj.each do |item| 
     61      child = Mapping._obj2soap(item, map) 
     62      soap_obj.add(child) 
     63    end 
     64    soap_obj 
     65  end 
     66 
     67  # let default TypedArrayFactory handle that. 
     68  def soap2obj(obj_class, node, info, map) 
     69    return false 
     70  end 
     71end 
     72 
    5373map = Mapping::Registry.new 
    5474map.set(DummyStruct, SOAPStruct, DummyStructFactory.new) 
     75map.set(Array, SOAPArray, ExplicitTypedArrayFactory.new) 
     76 
     77puts 
     78puts "== DummyStruct ==" 
     79puts 
    5580 
    5681obj = DummyStruct.new('family' => 'Na', 'given' => 'Hi') 
    5782puts marshalledstring = SOAPMarshal.marshal(obj, map) 
     83p SOAPMarshal.unmarshal(marshalledstring, map) 
    5884 
     85puts 
     86puts "== Custom array ==" 
     87puts 
     88 
     89obj1 = [1, 2, 3] 
     90obj2 = [4, 5, 6] 
     91def obj1.arytype 
     92  XSD::XSDInt::Type 
     93end 
     94 
     95puts marshalledstring = SOAPMarshal.marshal(obj1, map) 
    5996p SOAPMarshal.unmarshal(marshalledstring, map) 
     97puts marshalledstring = SOAPMarshal.marshal(obj2, map) 
     98p SOAPMarshal.unmarshal(marshalledstring, map)