Changeset 1719
- Timestamp:
- 09/09/06 10:51:37 (2 years ago)
- Files:
-
- trunk/lib/soap/encodingstyle/handler.rb (modified) (1 diff)
- trunk/lib/soap/encodingstyle/literalHandler.rb (modified) (1 diff)
- trunk/lib/soap/encodingstyle/soapHandler.rb (modified) (2 diffs)
- trunk/lib/soap/mapping/mapping.rb (modified) (2 diffs)
- trunk/lib/soap/mapping/wsdlliteralregistry.rb (modified) (3 diffs)
- trunk/lib/wsdl/soap/classDefCreator.rb (modified) (7 diffs)
- trunk/test/wsdl/qualified/test_unqualified.rb (modified) (4 diffs)
- trunk/test/wsdl/ref/expectedProduct.rb (modified) (3 diffs)
- trunk/test/wsdl/rpc/test_rpc_lit.rb (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/encodingstyle/handler.rb
r1672 r1719 94 94 def decode_epilogue 95 95 end 96 97 def encode_qname(attrs, ns, qname) 98 unless qname.namespace.nil? 99 SOAPGenerator.assign_ns(attrs, ns, qname.namespace) 100 ns.name(qname) 101 else 102 qname.name 103 end 104 end 96 105 end 97 106 trunk/lib/soap/encodingstyle/literalHandler.rb
r1636 r1719 30 30 attrs = {} 31 31 name = generator.encode_name(ns, data, attrs) 32 data.extraattr.each do |k, v| 32 data.extraattr.each do |key, value| 33 next if !@generate_explicit_type and key == XSD::AttrTypeName 33 34 # ToDo: check generator.attributeformdefault here 34 if k.is_a?(XSD::QName) 35 if k.namespace 36 SOAPGenerator.assign_ns(attrs, ns, k.namespace) 37 k = ns.name(k) 38 else 39 k = k.name 40 end 41 end 42 attrs[k] = v 35 if key.is_a?(XSD::QName) 36 key = encode_qname(attrs, ns, key) 37 end 38 if value.is_a?(XSD::QName) 39 value = encode_qname(attrs, ns, value) 40 end 41 attrs[key] = value 43 42 end 44 43 case data trunk/lib/soap/encodingstyle/soapHandler.rb
r1682 r1719 292 292 293 293 data.extraattr.each do |key, value| 294 SOAPGenerator.assign_ns(attrs, ns, key.namespace) 295 attrs[ns.name(key)] = encode_attr_value(generator, ns, key, value) 294 if key.is_a?(XSD::QName) 295 keytag = encode_qname(attrs, ns, key) 296 end 297 attrs[keytag] = encode_attr_value(generator, ns, key, value) 296 298 end 297 299 if data.id … … 302 304 303 305 def encode_attr_value(generator, ns, qname, value) 304 if value.is_a?(SOAPType) 306 case value 307 when SOAPType 305 308 ref = SOAPReference.new(value) 306 309 generator.add_reftarget(qname.name, value) 307 310 ref.refidstr 311 when XSD::QName 312 encode_qname(attrs, ns, value) 308 313 else 309 314 value.to_s trunk/lib/soap/mapping/mapping.rb
r1697 r1719 398 398 399 399 class SchemaDefinition 400 attr_reader :elements 401 402 def initialize(*arg) 403 super 400 attr_reader :ns, :type, :elements 401 402 def initialize(ns, type) 403 @ns = ns 404 @type = type 404 405 @elements = [] 405 406 @choice = false … … 433 434 def parse_schema_element_definition(klass, schema_element) 434 435 schema_ns = schema_ns_definition(klass) 435 definition = SchemaDefinition.new 436 schema_type = schema_type_definition(klass) 437 definition = SchemaDefinition.new(schema_ns, schema_type) 436 438 if schema_element[0] == :choice 437 439 schema_element.shift trunk/lib/soap/mapping/wsdlliteralregistry.rb
r1712 r1719 281 281 (obj.class.class_variables.include?('@@schema_qualified') and 282 282 obj.class.class_eval('@@schema_qualified')) 283 add_elements2soap(obj, ele)284 ele285 end286 287 def mappingobj2soap(obj, qname)288 ele = SOAPElement.new(qname)289 obj.__xmlele.each do |key, value|290 if value.is_a?(::Array)291 value.each do |item|292 ele.add(obj2soap(item, key))293 end294 else295 ele.add(obj2soap(value, key))296 end297 end298 ele299 end300 301 def add_elements2soap(obj, ele)302 283 definition = schema_element_definition(obj.class) 284 ele.extraattr[XSD::AttrTypeName] = 285 XSD::QName.new(definition.ns, definition.type) 303 286 any = nil 304 287 if definition.have_any? … … 326 309 end 327 310 end 311 ele 312 end 313 314 def mappingobj2soap(obj, qname) 315 ele = SOAPElement.new(qname) 316 obj.__xmlele.each do |key, value| 317 if value.is_a?(::Array) 318 value.each do |item| 319 ele.add(obj2soap(item, key)) 320 end 321 else 322 ele.add(obj2soap(value, key)) 323 end 324 end 325 ele 328 326 end 329 327 … … 332 330 if attributes 333 331 attributes.each do |qname, param| 334 at tr= obj.__send__(332 at = obj.__send__( 335 333 XSD::CodeGen::GenSupport.safemethodname('xmlattr_' + qname.name)) 336 ele.extraattr[qname] = at tr334 ele.extraattr[qname] = at 337 335 end 338 336 elsif obj.respond_to?(:__xmlattr) trunk/lib/wsdl/soap/classDefCreator.rb
r1693 r1719 38 38 result = "require 'xsd/qname'\n" 39 39 if type 40 result =dump_classdef(type.name, type)40 result << dump_classdef(type.name, type) 41 41 else 42 42 str = dump_element … … 69 69 @elements.collect { |ele| 70 70 if ele.local_complextype 71 qualified = ele.elementform == 'qualified'71 qualified = (ele.elementform == 'qualified') 72 72 dump_complextypedef(ele.name, ele.local_complextype, qualified) 73 73 elsif ele.local_simpletype … … 101 101 def dump_simpletypedef(qname, simpletype) 102 102 if simpletype.restriction 103 dump_simpletypedef_restriction(qname, simpletype .restriction)103 dump_simpletypedef_restriction(qname, simpletype) 104 104 elsif simpletype.list 105 dump_simpletypedef_list(qname, simpletype .list)105 dump_simpletypedef_list(qname, simpletype) 106 106 else 107 107 raise RuntimeError.new("unknown kind of simpletype: #{simpletype}") … … 109 109 end 110 110 111 def dump_simpletypedef_restriction(qname, restriction) 111 def dump_simpletypedef_restriction(qname, typedef) 112 restriction = typedef.restriction 112 113 if restriction.enumeration.empty? 113 114 # not supported. minlength? … … 117 118 c = ClassDef.new(classname, '::String') 118 119 c.comment = "#{qname}" 119 c.def_classvar('schema_type', ndq(qname.name)) 120 if typedef.name.nil? 121 # local simpletype of a element 122 c.def_classvar('schema_type', ndq(nil)) 123 else 124 # named simpletype 125 c.def_classvar('schema_type', ndq(qname.name)) 126 end 120 127 c.def_classvar('schema_ns', ndq(qname.namespace)) 121 128 define_classenum_restriction(c, classname, restriction.enumeration) … … 123 130 end 124 131 125 def dump_simpletypedef_list(qname, list) 132 def dump_simpletypedef_list(qname, typedef) 133 list = typedef.list 126 134 c = ClassDef.new(create_class_name(qname), '::Array') 127 135 c.comment = "#{qname}" … … 204 212 end 205 213 c.comment = "#{qname}" 206 c.def_classvar('schema_type', ndq(qname.name)) 214 if typedef.name.nil? 215 # local complextype of a element 216 c.def_classvar('schema_type', ndq(nil)) 217 else 218 # named complextype 219 c.def_classvar('schema_type', ndq(qname.name)) 220 end 207 221 c.def_classvar('schema_ns', ndq(qname.namespace)) 208 222 c.def_classvar('schema_qualified', dq('true')) if qualified trunk/test/wsdl/qualified/test_unqualified.rb
r1653 r1719 86 86 end 87 87 88 LOGIN_REQUEST_QUALIFIED =88 LOGIN_REQUEST_QUALIFIED_UNTYPED = 89 89 %q[<?xml version="1.0" encoding="utf-8" ?> 90 90 <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" … … 93 93 <env:Body> 94 94 <n1:login xmlns:n1="urn:lp"> 95 <username>NaHi</username> 96 <password>passwd</password> 97 <timezone>JST</timezone> 98 </n1:login> 99 </env:Body> 100 </env:Envelope>] 101 102 LOGIN_REQUEST_QUALIFIED_TYPED = 103 %q[<?xml version="1.0" encoding="utf-8" ?> 104 <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 105 xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 106 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 107 <env:Body> 108 <n1:login xmlns:n1="urn:lp" 109 xsi:type="n1:login"> 95 110 <username>NaHi</username> 96 111 <password>passwd</password> … … 114 129 @client.login(:timezone => 'JST', :password => 'passwd', 115 130 :username => 'NaHi') 116 assert_equal(LOGIN_REQUEST_QUALIFIED, parse_requestxml(str)) 131 # untyped because of passing a Hash 132 assert_equal(LOGIN_REQUEST_QUALIFIED_UNTYPED, parse_requestxml(str)) 117 133 end 118 134 … … 130 146 @client.wiredump_dev = str = '' 131 147 @client.login(Login.new('NaHi', 'passwd', 'JST')) 132 assert_equal(LOGIN_REQUEST_QUALIFIED , parse_requestxml(str))148 assert_equal(LOGIN_REQUEST_QUALIFIED_TYPED, parse_requestxml(str)) 133 149 end 134 150 trunk/test/wsdl/ref/expectedProduct.rb
r1699 r1719 3 3 # {urn:ref}Rating 4 4 class Rating < ::String 5 @@schema_type = "Rating"5 @@schema_type = nil 6 6 @@schema_ns = "urn:ref" 7 7 … … 13 13 # {urn:ref}Product-Bag 14 14 class ProductBag 15 @@schema_type = "Product-Bag"15 @@schema_type = nil 16 16 @@schema_ns = "urn:ref" 17 17 @@schema_attribute = { … … 89 89 # {urn:ref}yesno 90 90 class Yesno < ::String 91 @@schema_type = "yesno"91 @@schema_type = nil 92 92 @@schema_ns = "urn:ref" 93 93 trunk/test/wsdl/rpc/test_rpc_lit.rb
r1713 r1719 165 165 ECHO_STRING_ARRAY_REQUEST = 166 166 %q[<?xml version="1.0" encoding="utf-8" ?> 167 <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 168 xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 167 <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 169 168 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 170 169 <env:Body> … … 197 196 drv = SoapTestPortTypeRpcLit.new("http://localhost:#{Port}/") 198 197 drv.wiredump_dev = str = '' 198 drv.generate_explicit_type = false 199 199 # response contains only 1 part. 200 200 result = drv.echoStringArray(ArrayOfstring["a", "b", "c"])[0] … … 206 206 ECHO_STRING_ARRAY_INLINE_REQUEST = 207 207 %q[<?xml version="1.0" encoding="utf-8" ?> 208 <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 209 xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 208 <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 210 209 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 211 210 <env:Body> … … 238 237 drv = SoapTestPortTypeRpcLit.new("http://localhost:#{Port}/") 239 238 drv.wiredump_dev = str = '' 239 drv.generate_explicit_type = false 240 240 # response contains only 1 part. 241 241 result = drv.echoStringArrayInline(ArrayOfstringInline["a", "b", "c"])[0] … … 247 247 ECHO_NESTED_STRUCT_REQUEST = 248 248 %q[<?xml version="1.0" encoding="utf-8" ?> 249 <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 250 xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 249 <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 251 250 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 252 251 <env:Body> … … 291 290 @client.endpoint_url = "http://localhost:#{Port}/" 292 291 @client.wiredump_dev = str = '' 292 @client.generate_explicit_type = false 293 293 # response contains only 1 part. 294 294 result = @client.echoNestedStruct(SOAPStructStruct.new("str", 1, 1.0, SOAPStruct.new("str", 1, 1.0)))[0] … … 306 306 drv = SoapTestPortTypeRpcLit.new("http://localhost:#{Port}/") 307 307 drv.wiredump_dev = str = '' 308 drv.generate_explicit_type = false 308 309 # response contains only 1 part. 309 310 result = drv.echoNestedStruct(SOAPStructStruct.new("str", 1, 1.0, SOAPStruct.new("str", 1, 1.0)))[0] … … 320 321 ECHO_STRUCT_ARRAY_REQUEST = 321 322 %q[<?xml version="1.0" encoding="utf-8" ?> 322 <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 323 xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 323 <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 324 324 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 325 325 <env:Body> … … 368 368 @client.endpoint_url = "http://localhost:#{Port}/" 369 369 @client.wiredump_dev = str = '' 370 @client.generate_explicit_type = false 370 371 # response contains only 1 part. 371 372 e = SOAPStruct.new("str", 2, 2.1) … … 378 379 drv = SoapTestPortTypeRpcLit.new("http://localhost:#{Port}/") 379 380 drv.wiredump_dev = str = '' 381 drv.generate_explicit_type = false 380 382 # response contains only 1 part. 381 383 e = SOAPStruct.new("str", 2, 2.1)