Changeset 1556
- Timestamp:
- 05/21/05 01:42:13 (4 years ago)
- Files:
-
- trunk/lib/soap/mapping/wsdlencodedregistry.rb (modified) (9 diffs)
- trunk/lib/soap/mapping/wsdlliteralregistry.rb (modified) (19 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/mapping/wsdlencodedregistry.rb
r1538 r1556 39 39 end 40 40 41 def obj2soap(obj, type_qname = nil)41 def obj2soap(obj, qname = nil) 42 42 soap_obj = nil 43 if type = @definedtypes[type_qname] 44 soap_obj = obj2type(obj, type) 45 elsif obj.nil? 46 soap_obj = SOAPNil.new 47 elsif type_qname.nil? or type_qname == XSD::AnyTypeName 48 soap_obj = @rubytype_factory.obj2soap(nil, obj, nil, self) 49 elsif obj.is_a?(XSD::NSDBase) 50 soap_obj = soap2soap(obj, type_qname) 51 elsif (type = TypeMap[type_qname]) 52 soap_obj = base2soap(obj, type) 43 if type = @definedtypes[qname] 44 soap_obj = obj2typesoap(obj, type) 45 else 46 soap_obj = any2soap(obj, qname) 53 47 end 54 48 return soap_obj if soap_obj … … 59 53 return soap_obj if soap_obj 60 54 end 61 if type_qname62 raise MappingError.new("cannot map #{obj.class.name} as #{ type_qname}")55 if qname 56 raise MappingError.new("cannot map #{obj.class.name} as #{qname}") 63 57 else 64 58 raise MappingError.new("cannot map #{obj.class.name} to SOAP/OM") … … 69 63 def soap2obj(node, obj_class = nil) 70 64 begin 71 return _soap2obj(node, obj_class)65 return any2obj(node, obj_class) 72 66 rescue MappingError 73 67 end … … 85 79 private 86 80 81 def any2soap(obj, qname) 82 if obj.nil? 83 SOAPNil.new 84 elsif qname.nil? or qname == XSD::AnyTypeName 85 @rubytype_factory.obj2soap(nil, obj, nil, self) 86 elsif obj.is_a?(XSD::NSDBase) 87 soap2soap(obj, qname) 88 elsif (type = TypeMap[qname]) 89 base2soap(obj, type) 90 else 91 nil 92 end 93 end 94 87 95 def soap2soap(obj, type_qname) 88 96 if obj.is_a?(SOAPBasetype) … … 106 114 end 107 115 108 def obj2type (obj, type)116 def obj2typesoap(obj, type) 109 117 if type.is_a?(::WSDL::XMLSchema::SimpleType) 110 simple 2soap(obj, type)111 else 112 complex 2soap(obj, type)113 end 114 end 115 116 def simple 2soap(obj, type)118 simpleobj2soap(obj, type) 119 else 120 complexobj2soap(obj, type) 121 end 122 end 123 124 def simpleobj2soap(obj, type) 117 125 type.check_lexical_format(obj) 118 126 return SOAPNil.new if obj.nil? # ToDo: check nillable. … … 121 129 end 122 130 123 def complex 2soap(obj, type)131 def complexobj2soap(obj, type) 124 132 case type.compoundtype 125 133 when :TYPE_STRUCT … … 130 138 map2soap(obj, type.name, type) 131 139 when :TYPE_SIMPLE 132 simple 2soap(obj, type.simplecontent)140 simpleobj2soap(obj, type.simplecontent) 133 141 when :TYPE_EMPTY 134 142 raise MappingError.new("should be empty") unless obj.nil? … … 203 211 end 204 212 205 def _soap2obj(node, obj_class)213 def any2obj(node, obj_class) 206 214 unless obj_class 207 215 typestr = XSD::CodeGen::GenSupport.safeconstname(node.elename.name) … … 209 217 end 210 218 if obj_class and obj_class.class_variables.include?('@@schema_element') 211 soap2 definedobj(node, obj_class)212 else 213 Mapping. soap2obj(node, nil, obj_class)214 end 215 end 216 217 def soap2 definedobj(node, obj_class)219 soap2stubobj(node, obj_class) 220 else 221 Mapping._soap2obj(node, Mapping::DefaultRegistry, obj_class) 222 end 223 end 224 225 def soap2stubobj(node, obj_class) 218 226 obj = Mapping.create_empty_object(obj_class) 219 227 unless node.is_a?(SOAPNil) 220 add_elements2 obj(node, obj)228 add_elements2stubobj(node, obj) 221 229 end 222 230 obj 223 231 end 224 232 225 def add_elements2 obj(node, obj)233 def add_elements2stubobj(node, obj) 226 234 elements, as_array = schema_element_definition(obj.class) 227 235 vars = {} trunk/lib/soap/mapping/wsdlliteralregistry.rb
r1553 r1556 30 30 @excn_handler_obj2soap = nil 31 31 @excn_handler_soap2obj = nil 32 @rubytype_factory = RubytypeFactory.new(:allow_original_mapping => false)33 32 @schema_element_cache = {} 34 33 @schema_attribute_cache = {} … … 36 35 37 36 def obj2soap(obj, qname) 38 ret= nil37 soap_obj = nil 39 38 if ele = @definedelements[qname] 40 ret = _obj2soap(obj, ele)39 soap_obj = obj2elesoap(obj, ele) 41 40 elsif type = @definedtypes[qname] 42 ret = obj2type(obj, type)43 else 44 ret = unknownobj2soap(obj, qname)45 end 46 return ret if ret41 soap_obj = obj2typesoap(obj, type) 42 else 43 soap_obj = any2soap(obj, qname) 44 end 45 return soap_obj if soap_obj 47 46 if @excn_handler_obj2soap 48 ret= @excn_handler_obj2soap.call(obj) { |yield_obj|47 soap_obj = @excn_handler_obj2soap.call(obj) { |yield_obj| 49 48 Mapping._obj2soap(yield_obj, self) 50 49 } 51 return ret if ret52 end 53 raise MappingError.new("cannot map #{obj.class.name} to SOAP/OM")50 return soap_obj if soap_obj 51 end 52 raise MappingError.new("cannot map #{obj.class.name} as #{qname}") 54 53 end 55 54 … … 60 59 end 61 60 begin 62 return soapele2obj(node)61 return any2obj(node) 63 62 rescue MappingError 64 63 end … … 76 75 private 77 76 78 def _obj2soap(obj, ele)77 def obj2elesoap(obj, ele) 79 78 o = nil 80 79 if ele.type 81 80 if type = @definedtypes[ele.type] 82 o = obj2type (obj, type)81 o = obj2typesoap(obj, type) 83 82 elsif type = TypeMap[ele.type] 84 83 o = base2soap(obj, type) … … 88 87 o.elename = ele.name 89 88 elsif ele.local_complextype 90 o = obj2type (obj, ele.local_complextype)89 o = obj2typesoap(obj, ele.local_complextype) 91 90 o.elename = ele.name 92 91 add_attributes2soap(obj, o) 93 92 elsif ele.local_simpletype 94 o = obj2type (obj, ele.local_simpletype)93 o = obj2typesoap(obj, ele.local_simpletype) 95 94 o.elename = ele.name 96 95 else … … 100 99 end 101 100 102 def obj2type (obj, type)101 def obj2typesoap(obj, type) 103 102 if type.is_a?(::WSDL::XMLSchema::SimpleType) 104 simple2soap(obj, type) 105 else 106 complex2soap(obj, type) 107 end 108 end 109 110 def simple2soap(obj, type) 103 simpleobj2soap(obj, type) 104 else 105 complexobj2soap(obj, type) 106 end 107 end 108 109 def simpleobj2soap(obj, type) 110 type.check_lexical_format(obj) 111 return SOAPNil.new if obj.nil? # ToDo: check nillable. 111 112 o = base2soap(obj, TypeMap[type.base]) 112 type.check_lexical_format(obj)113 113 o 114 114 end 115 115 116 def complex 2soap(obj, type)116 def complexobj2soap(obj, type) 117 117 o = SOAPElement.new(type.name) 118 118 type.each_element do |child_ele| … … 122 122 # ToDo: test 123 123 # add empty element 124 o.add( _obj2soap(nil))124 o.add(obj2elesoap(nil)) 125 125 elsif Integer(child_ele.minoccurs) == 0 126 126 # nothing to do … … 130 130 elsif child_ele.map_as_array? 131 131 child.each do |item| 132 o.add( _obj2soap(item, child_ele))132 o.add(obj2elesoap(item, child_ele)) 133 133 end 134 134 else 135 o.add( _obj2soap(child, child_ele))135 o.add(obj2elesoap(child, child_ele)) 136 136 end 137 137 end … … 139 139 end 140 140 141 def unknownobj2soap(obj,name)141 def any2soap(obj, qname) 142 142 if obj.is_a?(SOAPElement) 143 143 obj 144 144 elsif obj.class.class_variables.include?('@@schema_element') 145 unknownobj2definedsoap(obj,name)145 stubobj2soap(obj, qname) 146 146 elsif obj.is_a?(SOAP::Mapping::Object) 147 mappingobj2soap(obj, name)147 mappingobj2soap(obj, qname) 148 148 elsif obj.is_a?(Hash) 149 149 ele = SOAPElement.from_obj(obj) 150 ele.elename = name150 ele.elename = qname 151 151 ele 152 152 else … … 155 155 begin 156 156 ele = Mapping.obj2soap(obj) 157 ele.elename = name157 ele.elename = qname 158 158 ele 159 159 rescue MappingError 160 ele = SOAPElement.new( name, obj.to_s)160 ele = SOAPElement.new(qname, obj.to_s) 161 161 end 162 162 if obj.respond_to?(:__xmlattr) … … 169 169 end 170 170 171 def unknownobj2definedsoap(obj,name)172 ele = SOAPElement.new( name)171 def stubobj2soap(obj, qname) 172 ele = SOAPElement.new(qname) 173 173 add_elements2soap(obj, ele) 174 174 add_attributes2soap(obj, ele) … … 176 176 end 177 177 178 def mappingobj2soap(obj, name)179 ele = SOAPElement.new( name)178 def mappingobj2soap(obj, qname) 179 ele = SOAPElement.new(qname) 180 180 obj.__xmlele.each do |key, value| 181 181 if value.is_a?(::Array) … … 227 227 if type <= XSD::XSDString 228 228 soap_obj = type.new(XSD::Charset.is_ces(obj, $KCODE) ? 229 XSD::Charset.encoding_conv(obj, $KCODE, XSD::Charset.encoding) : 230 obj) 229 XSD::Charset.encoding_conv(obj, $KCODE, XSD::Charset.encoding) : obj) 231 230 else 232 231 soap_obj = type.new(obj) … … 244 243 end 245 244 246 def soapele2obj(node, obj_class = nil)245 def any2obj(node, obj_class = nil) 247 246 unless obj_class 248 247 typestr = XSD::CodeGen::GenSupport.safeconstname(node.elename.name) … … 250 249 end 251 250 if obj_class and obj_class.class_variables.include?('@@schema_element') 252 soapele2 definedobj(node, obj_class)251 soapele2stubobj(node, obj_class) 253 252 elsif node.is_a?(SOAPElement) or node.is_a?(SOAPStruct) 254 253 # SOAPArray for literal? 255 soapele2undefinedobj(node) 256 else 257 result, obj = @rubytype_factory.soap2obj(nil, node, nil, self) 258 if result 259 add_attributes2undefinedobj(node, obj) 260 end 254 soapele2plainobj(node) 255 else 256 obj = Mapping._soap2obj(node, Mapping::DefaultRegistry, obj_class) 257 add_attributes2plainobj(node, obj) 261 258 obj 262 259 end 263 260 end 264 261 265 def soapele2 definedobj(node, obj_class)262 def soapele2stubobj(node, obj_class) 266 263 obj = Mapping.create_empty_object(obj_class) 267 add_elements2 obj(node, obj)268 add_attributes2 obj(node, obj)264 add_elements2stubobj(node, obj) 265 add_attributes2stubobj(node, obj) 269 266 obj 270 267 end 271 268 272 def soapele2 undefinedobj(node)269 def soapele2plainobj(node) 273 270 obj = anytype2obj(node) 274 add_elements2 undefinedobj(node, obj)275 add_attributes2 undefinedobj(node, obj)271 add_elements2plainobj(node, obj) 272 add_attributes2plainobj(node, obj) 276 273 obj 277 274 end 278 275 279 def add_elements2 obj(node, obj)276 def add_elements2stubobj(node, obj) 280 277 elements, as_array = schema_element_definition(obj.class) 281 278 vars = {} … … 290 287 end 291 288 else 292 child = soapele2obj(value, klass)289 child = any2obj(value, klass) 293 290 end 294 291 else … … 296 293 end 297 294 else # untyped element is treated as anyType. 298 child = soapele2obj(value)295 child = any2obj(value) 299 296 end 300 297 if as_array.include?(class_name) … … 307 304 end 308 305 309 def add_attributes2 obj(node, obj)306 def add_attributes2stubobj(node, obj) 310 307 if attributes = schema_attribute_definition(obj.class) 311 308 define_xmlattr(obj) … … 325 322 end 326 323 327 def add_elements2 undefinedobj(node, obj)324 def add_elements2plainobj(node, obj) 328 325 node.each do |name, value| 329 obj.__add_xmlele_value(XSD::QName.new(nil, name), soapele2obj(value))330 end 331 end 332 333 def add_attributes2 undefinedobj(node, obj)326 obj.__add_xmlele_value(XSD::QName.new(nil, name), any2obj(value)) 327 end 328 end 329 330 def add_attributes2plainobj(node, obj) 334 331 return if node.extraattr.empty? 335 332 define_xmlattr(obj)