/tools/Ruby/lib/ruby/1.8/soap/marshal.rb

http://github.com/agross/netopenspace · Ruby · 59 lines · 38 code · 15 blank · 6 comment · 1 complexity · a9b9addc0cb4e27fbb52b139dfdb9c0a MD5 · raw file

  1. # SOAP4R - Marshalling/Unmarshalling Ruby's object using SOAP Encoding.
  2. # Copyright (C) 2001, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
  3. # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
  4. # redistribute it and/or modify it under the same terms of Ruby's license;
  5. # either the dual license version in 2003, or any later version.
  6. require "soap/mapping"
  7. require "soap/processor"
  8. module SOAP
  9. module Marshal
  10. # Trying xsd:dateTime data to be recovered as aTime.
  11. MarshalMappingRegistry = Mapping::Registry.new(
  12. :allow_original_mapping => true)
  13. MarshalMappingRegistry.add(
  14. Time,
  15. ::SOAP::SOAPDateTime,
  16. ::SOAP::Mapping::Registry::DateTimeFactory
  17. )
  18. class << self
  19. public
  20. def dump(obj, io = nil)
  21. marshal(obj, MarshalMappingRegistry, io)
  22. end
  23. def load(stream)
  24. unmarshal(stream, MarshalMappingRegistry)
  25. end
  26. def marshal(obj, mapping_registry = MarshalMappingRegistry, io = nil)
  27. elename = Mapping.name2elename(obj.class.to_s)
  28. soap_obj = Mapping.obj2soap(obj, mapping_registry)
  29. body = SOAPBody.new
  30. body.add(elename, soap_obj)
  31. env = SOAPEnvelope.new(nil, body)
  32. SOAP::Processor.marshal(env, {}, io)
  33. end
  34. def unmarshal(stream, mapping_registry = MarshalMappingRegistry)
  35. env = SOAP::Processor.unmarshal(stream)
  36. if env.nil?
  37. raise ArgumentError.new("Illegal SOAP marshal format.")
  38. end
  39. Mapping.soap2obj(env.body.root_node, mapping_registry)
  40. end
  41. end
  42. end
  43. end
  44. SOAPMarshal = SOAP::Marshal