Changeset 1604
- Timestamp:
- 08/04/05 23:20:55 (3 years ago)
- Files:
-
- trunk/lib/soap/baseData.rb (modified) (10 diffs)
- trunk/lib/soap/generator.rb (modified) (1 diff)
- trunk/lib/soap/mapping/mapping.rb (modified) (10 diffs)
- trunk/lib/soap/mapping/wsdlliteralregistry.rb (modified) (5 diffs)
- trunk/lib/xsd/codegen/gensupport.rb (modified) (5 diffs)
- trunk/lib/xsd/ns.rb (modified) (1 diff)
- trunk/lib/xsd/qname.rb (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/baseData.rb
r1603 r1604 45 45 46 46 def initialize(*arg) 47 super (*arg)47 super 48 48 @encodingstyle = nil 49 @elename = XSD::QName .new49 @elename = XSD::QName::EMPTY 50 50 @id = nil 51 51 @precedents = [] … … 83 83 84 84 def initialize(*arg) 85 super (*arg)85 super 86 86 end 87 87 end … … 96 96 97 97 def initialize(*arg) 98 super (*arg)98 super 99 99 end 100 100 end … … 115 115 def initialize(obj = nil) 116 116 super() 117 @type = XSD::QName .new117 @type = XSD::QName::EMPTY 118 118 @refid = nil 119 119 @obj = nil … … 179 179 def initialize 180 180 super() 181 @type = XSD::QName .new181 @type = XSD::QName::EMPTY 182 182 end 183 183 … … 400 400 def initialize(type = nil) 401 401 super() 402 @type = type || XSD::QName .new402 @type = type || XSD::QName::EMPTY 403 403 @array = [] 404 404 @data = [] … … 754 754 755 755 if value.is_a?(SOAPType) 756 value.elename = value.elename.dup_name('item') 757 756 value.elename = ITEM_NAME 758 757 # Sync type 759 758 unless @type.name … … 761 760 SOAPArray.create_arytype(value.type.name, @rank)) 762 761 end 763 764 unless value.type 765 value.type = @type 766 end 762 value.type ||= @type 767 763 end 768 764 … … 794 790 else 795 791 new_obj = block.call(ele) 796 new_obj.elename = new_obj.elename.dup_name('item')792 new_obj.elename = ITEM_NAME 797 793 new_obj 798 794 end … … 845 841 846 842 private 843 844 ITEM_NAME = XSD::QName.new(nil, 'item') 847 845 848 846 def retrieve(idxary) trunk/lib/soap/generator.rb
r1596 r1604 72 72 add_reftarget(obj.elename.name, obj) 73 73 ref = SOAPReference.new(obj) 74 ref.elename .name = obj.elename.name74 ref.elename = ref.elename.dup_name(obj.elename.name) 75 75 obj.precedents.clear # Avoid cyclic delay. 76 76 obj.encodingstyle = parent.encodingstyle trunk/lib/soap/mapping/mapping.rb
r1597 r1604 23 23 # TraverseSupport breaks following thread variables. 24 24 # Thread.current[:SOAPMarshalDataKey] 25 # Thread.current[:SOAPExternalCES]26 25 module TraverseSupport 27 26 def mark_marshalled_obj(obj, soap_obj) … … 41 40 def self.obj2soap(obj, registry = nil, type = nil, opt = EMPTY_OPT) 42 41 registry ||= Mapping::DefaultRegistry 43 prekey = Thread.current[:SOAPMarshalDataKey] 44 preces = Thread.current[:SOAPExternalCES] 45 begin 42 soap_obj = nil 43 protect_threadvars(:SOAPMarshalDataKey, :SOAPExternalCES, :SOAPMarshalNoReference) do 46 44 Thread.current[:SOAPMarshalDataKey] = {} 47 45 Thread.current[:SOAPExternalCES] = opt[:external_ces] || $KCODE 46 Thread.current[:SOAPMarshalNoReference] = opt[:no_reference] 48 47 soap_obj = _obj2soap(obj, registry, type) 49 ensure50 Thread.current[:SOAPMarshalDataKey] = prekey51 Thread.current[:SOAPExternalCES] = preces52 48 end 53 49 soap_obj … … 56 52 def self.soap2obj(node, registry = nil, klass = nil, opt = EMPTY_OPT) 57 53 registry ||= Mapping::DefaultRegistry 58 prekey = Thread.current[:SOAPMarshalDataKey] 59 preces = Thread.current[:SOAPExternalCES] 60 begin 54 obj = nil 55 protect_threadvars(:SOAPMarshalDataKey, :SOAPExternalCES, :SOAPMarshalNoReference) do 61 56 Thread.current[:SOAPMarshalDataKey] = {} 62 57 Thread.current[:SOAPExternalCES] = opt[:external_ces] || $KCODE 58 Thread.current[:SOAPMarshalNoReference] = opt[:no_reference] 63 59 obj = _soap2obj(node, registry, klass) 64 ensure65 Thread.current[:SOAPMarshalDataKey] = prekey66 Thread.current[:SOAPExternalCES] = preces67 60 end 68 61 obj … … 73 66 type = XSD::QName.new(type_ns, typename) 74 67 soap_ary = SOAPArray.new(ValueArrayName, 1, type) 75 prekey = Thread.current[:SOAPMarshalDataKey] 76 preces = Thread.current[:SOAPExternalCES] 77 begin 68 protect_threadvars(:SOAPMarshalDataKey, :SOAPExternalCES, :SOAPMarshalNoReference) do 78 69 Thread.current[:SOAPMarshalDataKey] = {} 79 70 Thread.current[:SOAPExternalCES] = opt[:external_ces] || $KCODE 71 Thread.current[:SOAPMarshalNoReference] = opt[:no_reference] 80 72 ary.each do |ele| 81 73 soap_ary.add(_obj2soap(ele, registry, type)) 82 74 end 83 ensure84 Thread.current[:SOAPMarshalDataKey] = prekey85 Thread.current[:SOAPExternalCES] = preces86 75 end 87 76 soap_ary … … 92 81 type = XSD::QName.new(type_ns, typename) 93 82 md_ary = SOAPArray.new(ValueArrayName, rank, type) 94 prekey = Thread.current[:SOAPMarshalDataKey] 95 preces = Thread.current[:SOAPExternalCES] 96 begin 83 protect_threadvars(:SOAPMarshalDataKey, :SOAPExternalCES, :SOAPMarshalNoReference) do 97 84 Thread.current[:SOAPMarshalDataKey] = {} 98 85 Thread.current[:SOAPExternalCES] = opt[:external_ces] || $KCODE 86 Thread.current[:SOAPMarshalNoReference] = opt[:no_reference] 99 87 add_md_ary(md_ary, ary, [], registry) 100 ensure101 Thread.current[:SOAPMarshalDataKey] = prekey102 Thread.current[:SOAPExternalCES] = preces103 88 end 104 89 md_ary … … 136 121 137 122 def self._obj2soap(obj, registry, type = nil) 138 if referent = Thread.current[:SOAPMarshalDataKey][obj.__id__] 123 if referent = Thread.current[:SOAPMarshalDataKey][obj.__id__] and 124 !Thread.current[:SOAPMarshalNoReference] 139 125 SOAPReference.new(referent) 140 126 elsif registry … … 151 137 target = node.__getobj__ 152 138 # target.id is not Object#id but SOAPReference#id 153 if referent = Thread.current[:SOAPMarshalDataKey][target.id] 139 if referent = Thread.current[:SOAPMarshalDataKey][target.id] and 140 !Thread.current[:SOAPMarshalNoReference] 154 141 return referent 155 142 else … … 250 237 251 238 def self.class2qname(klass) 252 name = if klass.class_variables.include?('@@schema_type') 253 klass.class_eval('@@schema_type') 254 else 255 nil 256 end 257 namespace = if klass.class_variables.include?('@@schema_ns') 258 klass.class_eval('@@schema_ns') 259 else 260 nil 261 end 239 name = schema_type_definition(klass) 240 namespace = schema_ns_definition(klass) 262 241 XSD::QName.new(namespace, name) 263 242 end … … 335 314 end 336 315 316 def self.schema_type_definition(klass) 317 class_schema_variable(:schema_type, klass) 318 end 319 320 def self.schema_ns_definition(klass) 321 class_schema_variable(:schema_ns, klass) 322 end 323 337 324 def self.schema_element_definition(klass) 338 return nil unless klass.class_variables.include?('@@schema_element') 325 schema_element = class_schema_variable(:schema_element, klass) or return nil 326 schema_ns = schema_ns_definition(klass) 339 327 elements = [] 340 328 as_array = [] 341 schema_ns = klass.class_eval('@@schema_ns') 342 klass.class_eval('@@schema_element').each do |varname, definition| 329 schema_element.each do |varname, definition| 343 330 class_name, name = definition 344 331 if /\[\]$/ =~ class_name … … 352 339 353 340 def self.schema_attribute_definition(klass) 354 return nil unless klass.class_variables.include?('@@schema_attribute') 355 klass.class_eval('@@schema_attribute') 341 class_schema_variable(:schema_attribute, klass) 356 342 end 357 343 358 344 class << Mapping 359 345 private 346 347 def class_schema_variable(sym, klass) 348 var = "@@#{sym}" 349 klass.class_variables.include?(var) ? klass.class_eval(var) : nil 350 end 351 352 def protect_threadvars(*symbols) 353 backup = {} 354 begin 355 symbols.each do |sym| 356 backup[sym] = Thread.current[sym] 357 end 358 yield 359 ensure 360 symbols.each do |sym| 361 Thread.current[sym] = backup[sym] 362 end 363 end 364 end 365 360 366 def add_md_ary(md_ary, ary, indices, registry) 361 367 for idx in 0..(ary.size - 1) trunk/lib/soap/mapping/wsdlliteralregistry.rb
r1597 r1604 46 46 if @excn_handler_obj2soap 47 47 soap_obj = @excn_handler_obj2soap.call(obj) { |yield_obj| 48 Mapping. _obj2soap(yield_obj, self)48 Mapping.obj2soap(yield_obj, nil, nil, MAPPING_OPT) 49 49 } 50 50 return soap_obj if soap_obj … … 63 63 begin 64 64 return @excn_handler_soap2obj.call(node) { |yield_node| 65 Mapping. _soap2obj(yield_node, self)65 Mapping.soap2obj(yield_node, nil, nil, MAPPING_OPT) 66 66 } 67 67 rescue Exception … … 76 76 77 77 private 78 79 MAPPING_OPT = { :no_reference => true } 78 80 79 81 def obj2elesoap(obj, ele) … … 162 164 # SOAPStruct, etc. is used instead of SOAPElement. 163 165 begin 164 ele = Mapping.obj2soap(obj )166 ele = Mapping.obj2soap(obj, nil, nil, MAPPING_OPT) 165 167 ele.elename = qname 166 168 ele … … 268 270 soapele2plainobj(node) 269 271 else 270 obj = Mapping. _soap2obj(node, Mapping::DefaultRegistry, obj_class)272 obj = Mapping.soap2obj(node, nil, obj_class, MAPPING_OPT) 271 273 add_attributes2plainobj(node, obj) 272 274 obj trunk/lib/xsd/codegen/gensupport.rb
r1539 r1604 1 1 # XSD4R - Code generation support 2 # Copyright (C) 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.2 # Copyright (C) 2004, 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>. 3 3 4 4 # This program is copyrighted free software by NAKAMURA, Hiroshi. You can … … 11 11 12 12 # from the file 'keywords' in 1.9. 13 KEYWORD = %w( 13 KEYWORD = {} 14 %w( 14 15 __LINE__ 15 16 __FILE__ … … 52 53 while 53 54 yield 54 ) 55 ).each { |k| KEYWORD[k] = nil } 55 56 56 57 module GenSupport … … 97 98 98 99 def safevarname(name) 99 safename = name.scan(/[a-zA-Z0-9_]+/).join('_') 100 safename = uncapitalize(safename) 100 safename = uncapitalize(name.scan(/[a-zA-Z0-9_]+/).join('_')) 101 101 if /^[a-z]/ !~ safename or keyword?(safename) 102 safename = "v_#{safename}" 102 "v_#{safename}" 103 else 104 safename 103 105 end 104 safename105 106 end 106 107 module_function :safevarname … … 112 113 113 114 def keyword?(word) 114 KEYWORD. include?(word)115 KEYWORD.key?(word) 115 116 end 116 117 module_function :keyword? trunk/lib/xsd/ns.rb
r1520 r1604 73 73 name.name 74 74 elsif @ns2tag.key?(name.namespace) 75 @ns2tag[name.namespace] + ':' << name.name75 "#{@ns2tag[name.namespace]}:#{name.name}" 76 76 else 77 77 raise FormatError.new("namespace: #{name.namespace} not defined yet") trunk/lib/xsd/qname.rb
r1540 r1604 32 32 33 33 def match(rhs) 34 unless self.class === rhs35 return false36 end37 34 if rhs.namespace and (rhs.namespace != @namespace) 38 35 return false … … 45 42 46 43 def ==(rhs) 47 (self.class === rhs && @namespace == rhs.namespace && @name == rhs.name)44 !rhs.nil? and @namespace == rhs.namespace and @name == rhs.name 48 45 end 49 46 … … 74 71 self.new($1, $2) 75 72 end 73 74 EMPTY = QName.new.freeze 76 75 end 77 76