Changeset 1444
- Timestamp:
- 02/11/05 12:56:47 (4 years ago)
- Files:
-
- trunk/lib/soap/mapping/factory.rb (modified) (2 diffs)
- trunk/lib/soap/mapping/mapping.rb (modified) (3 diffs)
- trunk/lib/soap/mapping/registry.rb (modified) (1 diff)
- trunk/lib/soap/mapping/wsdlencodedregistry.rb (modified) (1 diff)
- trunk/lib/soap/mapping/wsdlliteralregistry.rb (modified) (10 diffs)
- trunk/test/wsdl/ref/expectedProduct.rb (modified) (4 diffs)
- trunk/test/wsdl/ref/product.wsdl (modified) (2 diffs)
- trunk/test/wsdl/rpc (added)
- trunk/test/wsdl/rpc/rpc.wsdl (added)
- trunk/test/wsdl/rpc/test_rpc.rb (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/mapping/factory.rb
r1373 r1444 39 39 def setiv2soap(node, obj, map) 40 40 # should we sort instance_variables? 41 if obj.class.class_variables.include?('@@schema_element') 42 elements = obj.class.class_eval('@@schema_element') 43 end 41 44 obj.instance_variables.each do |var| 42 45 name = var.sub(/^@/, '') 43 node.add(Mapping.name2elename(name), 44 Mapping._obj2soap(obj.instance_variable_get(var), map)) 46 if elements 47 type, qname = elements[name] 48 if qname 49 elename = qname.name 50 end 51 end 52 elename ||= Mapping.name2elename(name) 53 node.add(elename, Mapping._obj2soap(obj.instance_variable_get(var), map)) 45 54 end 46 55 end … … 69 78 vars[Mapping.elename2name(name)] = Mapping._soap2obj(value, map) 70 79 end 71 Mapping.set_ instance_vars(obj, vars)80 Mapping.set_attributes(obj, vars) 72 81 end 73 82 end trunk/lib/soap/mapping/mapping.rb
r1420 r1444 158 158 end 159 159 160 def self.set_instance_vars(obj, values)161 values.each do |name, value|162 setter = name + "="163 if obj.respond_to?(setter)164 obj.__send__(setter, value)165 else166 obj.instance_variable_set('@' + name, value)167 end168 end169 end170 171 160 # Allow only (Letter | '_') (Letter | Digit | '-' | '_')* here. 172 161 # Caution: '.' is not allowed here. … … 244 233 end 245 234 246 def self. find_attribute(obj, attr_name)235 def self.get_attribute(obj, attr_name) 247 236 if obj.is_a?(::Hash) 248 237 obj[attr_name] || obj[attr_name.intern] … … 255 244 end 256 245 end 246 end 247 248 def self.set_attributes(obj, values) 249 values.each do |attr_name, value| 250 name = XSD::CodeGen::GenSupport.safevarname(attr_name) 251 setter = name + "=" 252 if obj.respond_to?(setter) 253 obj.__send__(setter, value) 254 else 255 obj.instance_variable_set('@' + name, value) 256 end 257 end 258 end 259 260 def self.schema_element_definition(klass) 261 elements = {} 262 as_array = [] 263 klass.class_eval('@@schema_element').each do |varname, definition| 264 class_name, name = definition 265 if /\[\]$/ =~ class_name 266 class_name = class_name.sub(/\[\]$/, '') 267 as_array << class_name 268 end 269 elements[name] = class_name 270 end 271 [elements, as_array] 272 end 273 274 def self.schema_attribute_definition(klass) 275 klass.class_eval('@@schema_attribute') 257 276 end 258 277 trunk/lib/soap/mapping/registry.rb
r1426 r1444 438 438 vars[name] = Mapping._soap2obj(value, self) 439 439 end 440 Mapping.set_ instance_vars(obj, vars)440 Mapping.set_attributes(obj, vars) 441 441 end 442 442 trunk/lib/soap/mapping/wsdlencodedregistry.rb
r1438 r1444 169 169 elements.each do |element| 170 170 name = element.name.name 171 child_obj = obj.instance_variable_get('@' +name)171 child_obj = Mapping.get_attribute(obj, name) 172 172 soap_obj.add(name, 173 173 Mapping._obj2soap(child_obj, self, element.type || element.name)) trunk/lib/soap/mapping/wsdlliteralregistry.rb
r1438 r1444 31 31 @rubytype_factory = RubytypeFactory.new(:allow_original_mapping => false) 32 32 @schema_element_cache = {} 33 @schema_attribute_cache = {} 33 34 end 34 35 … … 85 86 o = SOAPElement.new(ele.name) 86 87 ele.local_complextype.each_element do |child_ele| 87 o.add(_obj2soap(Mapping. find_attribute(obj, child_ele.name.name),88 o.add(_obj2soap(Mapping.get_attribute(obj, child_ele.name.name), 88 89 child_ele)) 89 90 end … … 116 117 o = SOAPElement.new(type.name) 117 118 type.each_element do |child_ele| 118 o.add(_obj2soap(Mapping. find_attribute(obj, child_ele.name.name),119 o.add(_obj2soap(Mapping.get_attribute(obj, child_ele.name.name), 119 120 child_ele)) 120 121 end … … 142 143 elements, as_array = schema_element_definition(obj.class) 143 144 elements.each do |elename, type| 144 child = Mapping. find_attribute(obj, elename)145 name = ::XSD::QName.new(nil, elename)145 child = Mapping.get_attribute(obj, elename) 146 name = XSD::QName.new(nil, elename) 146 147 if as_array.include?(type) 147 148 child.each do |item| … … 158 159 if attributes 159 160 attributes.each do |attrname, param| 160 attr = Mapping. find_attribute(obj, 'attr_' + attrname)161 attr = Mapping.get_attribute(obj, 'attr_' + attrname) 161 162 ele.extraattr[attrname] = attr 162 163 end … … 166 167 def base2soap(obj, type) 167 168 soap_obj = nil 168 if type <= ::XSD::XSDString169 soap_obj = type.new( ::XSD::Charset.is_ces(obj, $KCODE) ?170 ::XSD::Charset.encoding_conv(obj, $KCODE, ::XSD::Charset.encoding) :169 if type <= XSD::XSDString 170 soap_obj = type.new(XSD::Charset.is_ces(obj, $KCODE) ? 171 XSD::Charset.encoding_conv(obj, $KCODE, XSD::Charset.encoding) : 171 172 obj) 172 173 else … … 190 191 def soapele2obj(node, obj_class = nil) 191 192 unless obj_class 192 typestr = ::XSD::CodeGen::GenSupport.safeconstname(node.elename.name)193 typestr = XSD::CodeGen::GenSupport.safeconstname(node.elename.name) 193 194 obj_class = Mapping.class_from_name(typestr) 194 195 end … … 237 238 end 238 239 end 239 Mapping.set_ instance_vars(obj, vars)240 Mapping.set_attributes(obj, vars) 240 241 end 241 242 242 243 def add_attributes2obj(node, obj) 243 Mapping.set_ instance_vars(obj, {'__soap_attribute' => {}})244 Mapping.set_attributes(obj, {'__soap_attribute' => {}}) 244 245 vars = {} 245 246 attributes = schema_attribute_definition(obj.class) 246 247 if attributes 247 248 attributes.each do |attrname, class_name| 248 attr = node.extraattr[ ::XSD::QName.new(nil, attrname)]249 attr = node.extraattr[XSD::QName.new(nil, attrname)] 249 250 next if attr.nil? or attr.empty? 250 251 klass = Mapping.class_from_name(class_name) … … 257 258 end 258 259 end 259 Mapping.set_ instance_vars(obj, vars)260 Mapping.set_attributes(obj, vars) 260 261 end 261 262 … … 263 264 # changed while a lifetime of a WSDLLiteralRegistry. 264 265 def schema_element_definition(klass) 265 if @schema_element_cache.key?(klass) 266 return @schema_element_cache[klass] 267 end 268 elements = {} 269 as_array = [] 270 klass.class_eval('@@schema_element').each do |name, class_name| 271 if /\[\]$/ =~ class_name 272 class_name = class_name.sub(/\[\]$/, '') 273 as_array << class_name 274 end 275 elements[name] = class_name 276 end 277 @schema_element_cache[klass] = [elements, as_array] 278 return @schema_element_cache[klass] 266 @schema_element_cache[klass] ||= Mapping.schema_element_definition(klass) 279 267 end 280 268 281 269 def schema_attribute_definition(klass) 282 klass.class_eval('@@schema_attribute')270 @schema_attribute_cache[klass] ||= Mapping.schema_attribute_definition(klass) 283 271 end 284 272 end trunk/test/wsdl/ref/expectedProduct.rb
r1431 r1444 8 8 # urn:product 9 9 class ProductBag 10 @@schema_type = "Product Bag"10 @@schema_type = "Product-Bag" 11 11 @@schema_ns = "urn:product" 12 12 @@schema_attribute = {"version" => "SOAP::SOAPString", "yesno" => "SOAP::SOAPString"} 13 @@schema_element = {"bag" => "Product[]", " Rating" => "SOAP::SOAPString[]", "ProductBag" => nil, "comment_1" => nil, "comment_2" => "Comment[]"}13 @@schema_element = {"bag" => "Product[]", "rating" => ["SOAP::SOAPString[]", XSD::QName.new("urn:product", "Rating")], "product_Bag" => [nil, XSD::QName.new("urn:product", "Product-Bag")], "comment_1" => nil, "comment_2" => ["Comment[]", XSD::QName.new(nil, "comment-2")]} 14 14 15 15 attr_accessor :bag 16 attr_accessor :product_Bag 16 17 attr_accessor :comment_1 17 18 attr_accessor :comment_2 … … 23 24 def Rating=(value) 24 25 @rating = value 25 end26 27 def ProductBag28 @productBag29 end30 31 def ProductBag=(value)32 @productBag = value33 26 end 34 27 … … 49 42 end 50 43 51 def initialize(bag = [], rating = [], product Bag = nil, comment_1 = [], comment_2 = [])44 def initialize(bag = [], rating = [], product_Bag = nil, comment_1 = [], comment_2 = []) 52 45 @bag = bag 53 46 @rating = rating 54 @product Bag = productBag47 @product_Bag = product_Bag 55 48 @comment_1 = comment_1 56 49 @comment_2 = comment_2 … … 73 66 @@schema_type = "Product" 74 67 @@schema_ns = "urn:product" 75 @@schema_element = {"name" => "SOAP::SOAPString", " Rating" => "SOAP::SOAPString"}68 @@schema_element = {"name" => "SOAP::SOAPString", "rating" => ["SOAP::SOAPString", XSD::QName.new("urn:product", "Rating")]} 76 69 77 70 attr_accessor :name trunk/test/wsdl/ref/product.wsdl
r1443 r1444 51 51 </element> 52 52 53 <element name="Product Bag">53 <element name="Product-Bag"> 54 54 <complexType> 55 55 <sequence> 56 56 <element name="bag" type="tns:Product" minOccurs="0" maxOccurs="unbounded"/> 57 57 <element ref="tns:Rating" minOccurs="0" maxOccurs="unbounded"/> 58 <element ref="tns:Product Bag"/>58 <element ref="tns:Product-Bag"/> 59 59 <element name="comment_1" minOccurs="0" maxOccurs="unbounded"> 60 60 <complexType> … … 66 66 </complexType> 67 67 </element> 68 <element name="comment _2" type="tns:Comment" minOccurs="0" maxOccurs="unbounded"/>68 <element name="comment-2" type="tns:Comment" minOccurs="0" maxOccurs="unbounded"/> 69 69 </sequence> 70 70 <attribute ref="tns:version"/>