diff options
Diffstat (limited to 'lib/soap/mapping/factory.rb')
-rw-r--r-- | lib/soap/mapping/factory.rb | 52 |
1 files changed, 25 insertions, 27 deletions
diff --git a/lib/soap/mapping/factory.rb b/lib/soap/mapping/factory.rb index a535458c5a..13dffc2dd0 100644 --- a/lib/soap/mapping/factory.rb +++ b/lib/soap/mapping/factory.rb @@ -37,24 +37,28 @@ class Factory end def setiv2soap(node, obj, map) - # should we sort instance_variables? - obj.instance_variables.each do |var| - name = var.sub(/^@/, '') - node.add(Mapping.name2elename(name), - Mapping._obj2soap(obj.instance_variable_get(var), map)) + if obj.class.class_variables.include?('@@schema_element') + obj.class.class_eval('@@schema_element').each do |name, info| + type, qname = info + if qname + elename = qname.name + else + elename = Mapping.name2elename(name) + end + node.add(elename, + Mapping._obj2soap(obj.instance_variable_get('@' + name), map)) + end + else + # should we sort instance_variables? + obj.instance_variables.each do |var| + name = var.sub(/^@/, '') + elename = Mapping.name2elename(name) + node.add(elename, + Mapping._obj2soap(obj.instance_variable_get(var), map)) + end end end - # It breaks Thread.current[:SOAPMarshalDataKey]. - def mark_marshalled_obj(obj, soap_obj) - Thread.current[:SOAPMarshalDataKey][obj.__id__] = soap_obj - end - - # It breaks Thread.current[:SOAPMarshalDataKey]. - def mark_unmarshalled_obj(node, obj) - Thread.current[:SOAPMarshalDataKey][node.id] = obj - end - private def setiv2ary(obj, node, map) @@ -68,7 +72,7 @@ private node.each do |name, value| vars[Mapping.elename2name(name)] = Mapping._soap2obj(value, map) end - Mapping.set_instance_vars(obj, vars) + Mapping.set_attributes(obj, vars) end end @@ -156,20 +160,14 @@ class DateTimeFactory_ < Factory end def soap2obj(obj_class, node, info, map) - obj = nil - if obj_class == Time - obj = node.to_time - if obj.nil? - # Is out of range as a Time - return false - end - elsif obj_class == Date - obj = node.data + if node.respond_to?(:to_obj) + obj = node.to_obj(obj_class) + return false if obj.nil? + mark_unmarshalled_obj(node, obj) + return true, obj else return false end - mark_unmarshalled_obj(node, obj) - return true, obj end end |