Changeset 1805
- Timestamp:
- 05/24/07 22:26:37 (1 year ago)
- Files:
-
- trunk/lib/soap/encodingstyle/literalHandler.rb (modified) (3 diffs)
- trunk/lib/soap/encodingstyle/soapHandler.rb (modified) (3 diffs)
- trunk/lib/soap/mapping/encodedregistry.rb (modified) (3 diffs)
- trunk/lib/soap/mapping/factory.rb (modified) (1 diff)
- trunk/lib/soap/mapping/literalregistry.rb (modified) (5 diffs)
- trunk/lib/soap/mapping/mapping.rb (modified) (4 diffs)
- trunk/lib/soap/mapping/schemadefinition.rb (modified) (4 diffs)
- trunk/lib/soap/mapping/wsdlencodedregistry.rb (modified) (1 diff)
- trunk/lib/wsdl/soap/classDefCreator.rb (modified) (1 diff)
- trunk/lib/wsdl/soap/literalMappingRegistryCreator.rb (modified) (4 diffs)
- trunk/lib/wsdl/soap/mappingRegistryCreatorSupport.rb (modified) (3 diffs)
- trunk/test/soap/literalArrayMapping/test_definedarray.rb (modified) (1 diff)
- trunk/test/wsdl/document/test_rpc.rb (modified) (1 diff)
- trunk/test/wsdl/qualified/test_unqualified.rb (modified) (1 diff)
- trunk/test/wsdl/simplecontent/simplecontent.wsdl (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/encodingstyle/literalHandler.rb
r1799 r1805 165 165 166 166 def decode_tag_end(ns, node) 167 textbufstr = @textbuf.join 168 @textbuf.clear 167 169 o = node.node 168 170 if o.is_a?(SOAPUnknown) 169 if /\A\s*\z/ =~ @textbuf.join171 if /\A\s*\z/ =~ textbufstr 170 172 newnode = o.as_element 171 173 else … … 175 177 o = node.node 176 178 end 177 178 decode_textbuf(o) 179 decode_textbuf(o, textbufstr) 179 180 end 180 181 … … 228 229 private 229 230 230 def decode_textbuf(node) 231 textbufstr = @textbuf.join 232 @textbuf.clear 231 def decode_textbuf(node, textbufstr) 233 232 case node 234 233 when XSD::XSDString, SOAPElement trunk/lib/soap/encodingstyle/soapHandler.rb
r1799 r1805 187 187 188 188 def decode_tag_end(ns, node) 189 textbufstr = @textbuf.join 190 @textbuf.clear 189 191 o = node.node 190 192 if o.is_a?(SOAPUnknown) 191 newnode = if /\A\s*\z/ =~ @textbuf.join193 newnode = if /\A\s*\z/ =~ textbufstr 192 194 o.as_struct 193 195 else … … 200 202 o = node.node 201 203 end 202 decode_textbuf(o )204 decode_textbuf(o, textbufstr) 203 205 # unlink definedtype 204 206 o.definedtype = nil … … 464 466 end 465 467 466 def decode_textbuf(node) 467 textbufstr = @textbuf.join 468 @textbuf.clear 468 def decode_textbuf(node, textbufstr) 469 469 case node 470 470 when XSD::XSDHexBinary, XSD::XSDBase64Binary trunk/lib/soap/mapping/encodedregistry.rb
r1788 r1805 364 364 if klass 365 365 klass_definition = schema_definition_from_class(klass) 366 if definition and definition.class_for.ancestors.include?(klass)366 if definition and (definition.class_for < klass) 367 367 klass = definition.class_for 368 368 else … … 486 486 487 487 def typedobj2soap(value, klass) 488 if klass and klass. ancestors.include?(::SOAP::SOAPBasetype)488 if klass and klass.include?(::SOAP::SOAPBasetype) 489 489 base2soap(value, klass) 490 490 else … … 529 529 raise MappingError.new("unknown class: #{klass}") 530 530 end 531 if klass. ancestors.include?(::SOAP::SOAPBasetype)531 if klass.include?(::SOAP::SOAPBasetype) 532 532 obj = base2obj(value, klass) 533 533 else trunk/lib/soap/mapping/factory.rb
r1726 r1805 64 64 else 65 65 klass = Mapping.class_from_name(eledef.type) 66 if klass && klass. ancestors.include?(::SOAP::SOAPBasetype)66 if klass && klass.include?(::SOAP::SOAPBasetype) 67 67 value = klass.new(child) 68 68 else trunk/lib/soap/mapping/literalregistry.rb
r1788 r1805 71 71 def any2soap(obj, qname) 72 72 ele = nil 73 if definition = schema_definition_from_class(obj.class) 73 if obj.is_a?(SOAP::Mapping::Object) 74 ele = mappingobj2soap(obj, qname) 75 elsif definition = schema_definition_from_elename(qname) 74 76 ele = stubobj2soap(obj, qname, definition) 75 elsif obj.is_a?(SOAP::Mapping::Object) 76 ele = mappingobj2soap(obj, qname) 77 elsif obj.is_a?(Hash) 77 elsif definition = schema_definition_from_class(obj.class) 78 ele = stubobj2soap(obj, qname, definition) 79 else 80 ele = anyobj2soap(obj, qname) 81 end 82 ele 83 end 84 85 def anyobj2soap(obj, qname) 86 ele = nil 87 case obj 88 when Hash 78 89 ele = SOAPElement.from_obj(obj, nil) 79 90 ele.elename = qname 80 elsif obj.is_a?(Array)91 when Array 81 92 # treat as a list of simpletype 82 93 ele = SOAPElement.new(qname, obj.join(" ")) 83 elsif obj.is_a?(XSD::QName)94 when XSD::QName 84 95 ele = SOAPElement.new(qname) 85 96 ele.text = obj … … 111 122 if definition.attributes 112 123 definition.attributes.each do |qname, param| 113 at = obj.__send__( 114 XSD::CodeGen::GenSupport.safemethodname('xmlattr_' + qname.name)) 124 at = Mapping.get_attribute(obj, XSD::CodeGen::GenSupport.safemethodname('xmlattr_' + qname.name)) 115 125 ele.extraattr[qname] = at 116 126 end … … 172 182 end 173 183 end 184 add_attributes2soap(obj, ele) 174 185 ele 175 186 end … … 247 258 def elesoapchild2obj(value, eledef) 248 259 if eledef.mapped_class 249 child_definition = schema_definition_from_class(eledef.mapped_class)250 if child_definition251 any2obj(value, child_definition.class_for)252 else253 if eledef.mapped_class.ancestors.include?(::SOAP::SOAPBasetype)254 base2obj(value, eledef.mapped_class)260 if eledef.mapped_class.include?(::SOAP::SOAPBasetype) 261 base2obj(value, eledef.mapped_class) 262 else 263 child_definition = schema_definition_from_class(eledef.mapped_class) 264 if child_definition 265 any2obj(value, child_definition.class_for) 255 266 else 256 267 any2obj(value, eledef.mapped_class) … … 278 289 if class_name 279 290 klass = Mapping.class_from_name(class_name) 280 if klass. ancestors.include?(::SOAP::SOAPBasetype)291 if klass.include?(::SOAP::SOAPBasetype) 281 292 child = klass.new(attr).data 282 293 end trunk/lib/soap/mapping/mapping.rb
r1800 r1805 300 300 end 301 301 302 EMPTY_ATTRIBUTES = {}.freeze 302 303 def self.get_attributes_for_any(obj) 303 304 if obj.respond_to?(:__xmlele_any) 304 obj.__xmlele_any 305 obj.__xmlele_any || EMPTY_ATTRIBUTES 305 306 else 306 307 get_attributes(obj) … … 315 316 return obj[attr_name] || obj[attr_name.intern] 316 317 else 318 if obj.respond_to?(attr_name) 319 return obj.__send__(attr_name) 320 end 317 321 iv = obj.instance_variables 318 322 name = XSD::CodeGen::GenSupport.safevarname(attr_name) … … 322 326 return obj.instance_variable_get("@#{attr_name}") 323 327 end 324 if obj.is_a?(::Struct) or obj.is_a?(Marshallable) 325 if obj.respond_to?(name) 326 return obj.__send__(name) 327 elsif obj.respond_to?(attr_name) 328 return obj.__send__(attr_name) 329 end 328 if obj.respond_to?(name) 329 return obj.__send__(name) 330 330 end 331 331 nil … … 438 438 definition.elements = parse_schema_definition(schema_element, default_ns) 439 439 # needed? 440 if klass .ancestors.include?(::Array)440 if klass < ::Array 441 441 definition.elements.set_array 442 442 end trunk/lib/soap/mapping/schemadefinition.rb
r1790 r1805 35 35 36 36 module SchemaComplexTypeDefinition 37 include Enumerable 38 39 def initialize 40 @content = [] 41 @element_cache = {} 42 end 43 37 44 def is_concrete_definition 38 45 true 46 end 47 48 def <<(ele) 49 @content << ele 50 end 51 52 def each 53 @content.each do |ele| 54 yield ele 55 end 56 end 57 58 def size 59 @content.size 39 60 end 40 61 … … 48 69 49 70 def find_element(qname) 71 @element_cache[qname] ||= search_element(qname) 72 end 73 74 private 75 76 def search_element(qname) 50 77 each do |ele| 51 78 if ele.respond_to?(:find_element) … … 64 91 end 65 92 66 class SchemaEmptyDefinition < ::Array93 class SchemaEmptyDefinition 67 94 include SchemaComplexTypeDefinition 68 95 69 96 def initialize 70 97 super() 71 freeze98 @content.freeze 72 99 end 73 100 end 74 101 75 class SchemaSequenceDefinition < ::Array102 class SchemaSequenceDefinition 76 103 include SchemaComplexTypeDefinition 104 105 def initialize 106 super() 107 end 77 108 78 109 def choice? … … 90 121 end 91 122 92 class SchemaChoiceDefinition < ::Array123 class SchemaChoiceDefinition 93 124 include SchemaComplexTypeDefinition 125 126 def initialize 127 super() 128 end 94 129 95 130 def choice? trunk/lib/soap/mapping/wsdlencodedregistry.rb
r1739 r1805 227 227 if item and item.mapped_class 228 228 # klass must be a SOAPBasetype or a class 229 if item.mapped_class. ancestors.include?(::SOAP::SOAPBasetype)229 if item.mapped_class.include?(::SOAP::SOAPBasetype) 230 230 if value.respond_to?(:data) 231 231 child = item.mapped_class.new(value.data).data trunk/lib/wsdl/soap/classDefCreator.rb
r1802 r1805 106 106 107 107 def dump_complextype 108 @complextypes.collect { |type|108 definitions = @complextypes.collect { |type| 109 109 dump_complextypedef(type.name, type) if type.abstract 110 }.compact .join("\n") +111 @complextypes.collect { |type|110 }.compact 111 definitions += @complextypes.collect { |type| 112 112 dump_complextypedef(type.name, type) unless type.abstract 113 }.compact.join("\n") 113 }.compact 114 definitions.join("\n") 114 115 end 115 116 trunk/lib/wsdl/soap/literalMappingRegistryCreator.rb
r1790 r1805 64 64 qualified = (ele.elementform == 'qualified') 65 65 if ele.local_complextype 66 dump_complextypedef(ele.name, ele.local_complextype, qualified)66 dump_complextypedef(ele.name, ele.local_complextype, nil, qualified) 67 67 elsif ele.local_simpletype 68 dump_simpletypedef(ele.name, ele.local_simpletype, qualified) 68 dump_simpletypedef(ele.name, ele.local_simpletype, nil, qualified) 69 elsif ele.type 70 if typedef = @complextypes[ele.type] 71 dump_complextypedef(ele.type, typedef, ele.name, qualified) 72 elsif typedef = @simpletypes[ele.type] 73 dump_simpletypedef(ele.type, typedef, ele.name, qualified) 74 else 75 nil 76 end 69 77 else 70 78 nil … … 93 101 end 94 102 95 def dump_complextypedef(qname, typedef, qualified = false)103 def dump_complextypedef(qname, typedef, as_element = nil, qualified = false) 96 104 case typedef.compoundtype 97 105 when :TYPE_STRUCT, :TYPE_EMPTY 98 dump_struct_typemap(qname, typedef, qualified)106 dump_struct_typemap(qname, typedef, as_element, qualified) 99 107 when :TYPE_ARRAY 100 108 dump_array_typemap(qname, typedef) 101 109 when :TYPE_SIMPLE 102 dump_simple_typemap(qname, typedef )110 dump_simple_typemap(qname, typedef, as_element, qualified) 103 111 when :TYPE_MAP 104 112 # mapped as a general Hash … … 110 118 end 111 119 112 def dump_struct_typemap(qname, typedef, qualified = false)120 def dump_struct_typemap(qname, typedef, as_element = nil, qualified = false) 113 121 var = {} 114 122 var[:class] = create_class_name(qname, @modulepath) 115 if typedef.name.nil? 116 # local complextype of a element 123 if as_element 124 var[:schema_name] = as_element.name 125 var[:schema_ns] = as_element.namespace 126 elsif typedef.name.nil? 117 127 var[:schema_name] = qname.name 118 else119 # named complextype128 var[:schema_ns] = qname.namespace 129 else 120 130 var[:schema_type] = qname.name 121 end122 var[:schema_ns] = qname.namespace131 var[:schema_ns] = qname.namespace 132 end 123 133 var[:schema_qualified] = qualified.to_s 124 134 … … 172 182 end 173 183 174 def dump_simple_typemap(qname, type_or_element )184 def dump_simple_typemap(qname, type_or_element, as_element, qualified) 175 185 var = {} 176 186 var[:class] = create_class_name(qname, @modulepath) 177 var[:schema_ns] = qname.namespace 178 var[:schema_type] = qname.name 187 if as_element 188 var[:schema_name] = as_element.name 189 var[:schema_ns] = as_element.namespace 190 elsif type_or_element.name.nil? 191 var[:schema_name] = qname.name 192 var[:schema_ns] = qname.namespace 193 else 194 var[:schema_type] = qname.name 195 var[:schema_ns] = qname.namespace 196 end 179 197 unless type_or_element.attributes.empty? 180 198 var[:schema_attribute] = define_attribute(type_or_element.attributes) trunk/lib/wsdl/soap/mappingRegistryCreatorSupport.rb
r1788 r1805 198 198 end 199 199 200 def dump_simpletypedef(qname, simpletype, qualified = false)200 def dump_simpletypedef(qname, simpletype, as_element = nil, qualified = false) 201 201 if simpletype.restriction 202 dump_simpletypedef_restriction(qname, simpletype, qualified)202 dump_simpletypedef_restriction(qname, simpletype, as_element, qualified) 203 203 elsif simpletype.list 204 dump_simpletypedef_list(qname, simpletype, qualified)204 dump_simpletypedef_list(qname, simpletype, as_element, qualified) 205 205 elsif simpletype.union 206 dump_simpletypedef_union(qname, simpletype, qualified)206 dump_simpletypedef_union(qname, simpletype, as_element, qualified) 207 207 else 208 208 raise RuntimeError.new("unknown kind of simpletype: #{simpletype}") … … 210 210 end 211 211 212 def dump_simpletypedef_restriction(qname, typedef, qualified)212 def dump_simpletypedef_restriction(qname, typedef, as_element, qualified) 213 213 restriction = typedef.restriction 214 214 if restriction.enumeration.empty? … … 218 218 var = {} 219 219 var[:class] = create_class_name(qname, @modulepath) 220 var[:schema_ns] = qname.namespace 221 if typedef.name.nil? 220 if as_element 222 221 var[:schema_type] = nil 222 var[:schema_ns] = as_element.namespace 223 elsif typedef.name.nil? 224 var[:schema_type] = nil 225 var[:schema_ns] = qname.namespace 223 226 else 224 227 var[:schema_type] = qname.name 228 var[:schema_ns] = qname.namespace 225 229 end 226 230 dump_entry(@varname, var) 227 231 end 228 232 229 def dump_simpletypedef_list(qname, typedef, qualified)233 def dump_simpletypedef_list(qname, typedef, as_element, qualified) 230 234 nil 231 235 end 232 236 233 def dump_simpletypedef_union(qname, typedef, qualified)237 def dump_simpletypedef_union(qname, typedef, as_element, qualified) 234 238 nil 235 239 end trunk/test/soap/literalArrayMapping/test_definedarray.rb
r1794 r1805 23 23 def test_amazonresponse 24 24 drv = AWSECommerceServicePortType.new 25 drv.wiredump_dev = STDOUT if $DEBUG 25 26 drv.test_loopback_response << File.read(pathname('amazonresponse.xml')) 26 27 obj = drv.itemSearch(ItemSearch.new) 27 assert_equal(3, obj.items [0].item[0].tracks.size)28 assert_equal(3, obj.items.item.tracks.disc.size) 28 29 end 29 30 end trunk/test/wsdl/document/test_rpc.rb
r1794 r1805 191 191 192 192 echo = {'struct1' => {'m_string' => 'mystring1', 'm_datetime' => '2005-03-17T19:47:31+01:00'}, 193 'struct -2' => {'m_string' => 'mystring2', 'm_datetime' => '2005-03-17T19:47:32+02:00'}}193 'struct_2' => {'m_string' => 'mystring2', 'm_datetime' => '2005-03-17T19:47:32+02:00'}} 194 194 ret = @client.echo(echo) 195 195 timeformat = "%Y-%m-%dT%H:%M:%S" trunk/test/wsdl/qualified/test_unqualified.rb
r1794 r1805 106 106 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 107 107 <env:Body> 108 <n1:login xmlns:n1="urn:lp" 109 xsi:type="n1:login"> 108 <n1:login xmlns:n1="urn:lp"> 110 109 <username>NaHi</username> 111 110 <password>passwd</password> trunk/test/wsdl/simplecontent/simplecontent.wsdl
r1742 r1805 33 33 </complexType> 34 34 35 <element name="PhoneNumberElement" type="tns:PhoneNumber" /> 35 36 <complexType name="PhoneNumber"> 36 37 <simpleContent>