Changeset 1581
- Timestamp:
- 07/19/05 23:21:02 (3 years ago)
- Files:
-
- trunk/lib/soap/encodingstyle/aspDotNetHandler.rb (modified) (1 diff)
- trunk/lib/soap/encodingstyle/literalHandler.rb (modified) (1 diff)
- trunk/lib/soap/mapping/mapping.rb (modified) (1 diff)
- 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) (4 diffs)
- trunk/lib/soap/rpc/proxy.rb (modified) (1 diff)
- trunk/lib/wsdl/soap/classDefCreator.rb (modified) (1 diff)
- trunk/lib/wsdl/soap/complexType.rb (modified) (1 diff)
- trunk/test/wsdl/rpc/test-rpc-lit.wsdl (modified) (2 diffs)
- trunk/test/wsdl/rpc/test_rpc_lit.rb (modified) (6 diffs)
- trunk/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb (modified) (1 diff)
- trunk/test/wsdl/soap/wsdl2ruby/section/test_section.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/encodingstyle/aspDotNetHandler.rb
r1580 r1581 45 45 generator.encode_tag(name, attrs) 46 46 data.each do |key, value| 47 if !value.elename.namespace48 value.elename.namespace = data.elename.namespace49 end50 47 generator.encode_child(ns, value, data) 51 48 end trunk/lib/soap/encodingstyle/literalHandler.rb
r1580 r1581 57 57 generator.encode_tag(name, attrs) 58 58 data.each do |key, value| 59 if !value.elename.namespace60 value.elename.namespace = data.elename.namespace61 end62 59 generator.encode_child(ns, value, data) 63 60 end trunk/lib/soap/mapping/mapping.rb
r1580 r1581 310 310 if /\[\]$/ =~ class_name 311 311 class_name = class_name.sub(/\[\]$/, '') 312 as_array << class_name313 end 314 elements << [name ? name.name : varname, class_name]312 as_array << (name ? name.name : varname) 313 end 314 elements << [name || XSD::QName.new(nil, varname), class_name] 315 315 end 316 316 [elements, as_array] trunk/lib/soap/mapping/registry.rb
r1565 r1581 88 88 @__xmlele.each do |k, v| 89 89 return v if k == qname 90 end 91 # fallback 92 @__xmlele.each do |k, v| 93 return v if k.name == qname.name 90 94 end 91 95 nil trunk/lib/soap/mapping/wsdlencodedregistry.rb
r1580 r1581 235 235 vars = {} 236 236 node.each do |name, value| 237 item = elements.find { |k, v| k == name }237 item = elements.find { |k, v| k.name == name } 238 238 if item 239 class_name = item[1]239 elename, class_name = item 240 240 if klass = Mapping.class_from_name(class_name) 241 241 # klass must be a SOAPBasetype or a class trunk/lib/soap/mapping/wsdlliteralregistry.rb
r1580 r1581 210 210 if elements 211 211 elements.each do |elename, type| 212 child = Mapping.get_attribute(obj, elename) 213 unless child.nil? 214 name = XSD::QName.new(nil, elename) 215 if as_array.include?(type) 212 if child = Mapping.get_attribute(obj, elename.name) 213 if as_array.include?(elename.name) 216 214 child.each do |item| 217 ele.add(obj2soap(item, name))215 ele.add(obj2soap(item, elename)) 218 216 end 219 217 else 220 ele.add(obj2soap(child, name)) 218 ele.add(obj2soap(child, elename)) 219 end 220 elsif obj.is_a?(::Array) and as_array.include?(elename.name) 221 obj.each do |item| 222 ele.add(obj2soap(item, elename)) 221 223 end 222 224 end … … 291 293 vars = {} 292 294 node.each do |name, value| 293 item = elements.find { |k, v| k == name }295 item = elements.find { |k, v| k.name == name } 294 296 if item 295 class_name = item[1]297 elename, class_name = item 296 298 if klass = Mapping.class_from_name(class_name) 297 299 # klass must be a SOAPBasetype or a class … … 319 321 child = any2obj(value) 320 322 end 321 if as_array.include?( class_name)323 if as_array.include?(elename.name) 322 324 (vars[name] ||= []) << child 323 325 else … … 348 350 def add_elements2plainobj(node, obj) 349 351 node.each do |name, value| 350 obj.__add_xmlele_value( XSD::QName.new(nil, name), any2obj(value))352 obj.__add_xmlele_value(value.elename, any2obj(value)) 351 353 end 352 354 end trunk/lib/soap/rpc/proxy.rb
r1580 r1581 398 398 ele = Mapping.obj2soap(values[idx], mapping_registry) 399 399 ele.elename = @doc_request_qnames[idx] 400 if ele.respond_to?(:qualified)401 ele.qualified = @doc_request_qualified[idx]402 end403 400 ele 404 401 } trunk/lib/wsdl/soap/classDefCreator.rb
r1580 r1581 259 259 end 260 260 261 DEFAULT_ITEM_NAME = XSD::QName.new(nil, 'item') 262 261 263 def dump_arraydef(complextype) 262 264 qname = complextype.name 263 265 c = XSD::CodeGen::ClassDef.new(create_class_name(qname), '::Array') 264 266 c.comment = "#{qname}" 265 type = complextype.child_type 266 c.def_classvar('schema_type', ndq(type.name)) 267 c.def_classvar('schema_ns', ndq(type.namespace)) 267 child_type = complextype.child_type 268 c.def_classvar('schema_type', ndq(child_type.name)) 269 c.def_classvar('schema_ns', ndq(child_type.namespace)) 270 child_element = complextype.find_aryelement 271 schema_element = [] 272 if child_type == XSD::AnyTypeName 273 type = nil 274 elsif child_element and (klass = element_basetype(child_element)) 275 type = klass.name 276 elsif child_type 277 type = create_class_name(child_type) 278 else 279 type = nil 280 end 281 if child_element 282 if child_element.map_as_array? 283 type << '[]' if type 284 end 285 child_element_name = child_element.name 286 else 287 child_element_name = DEFAULT_ITEM_NAME 288 end 289 schema_element << [child_element_name.name, child_element_name, type] 290 c.def_classvar('schema_element', 291 '[' + 292 schema_element.collect { |varname, name, type| 293 '[' + 294 ( 295 if name 296 varname.dump + ', [' + ndq(type) + ', ' + dqname(name) + ']' 297 else 298 varname.dump + ', ' + ndq(type) 299 end 300 ) + 301 ']' 302 }.join(', ') + 303 ']' 304 ) 268 305 c.dump 269 306 end trunk/lib/wsdl/soap/complexType.rb
r1538 r1581 115 115 end 116 116 117 def find_aryelement 118 unless compoundtype == :TYPE_ARRAY 119 raise RuntimeError.new("Assert: not for array") 120 end 121 if complexcontent 122 if check_array_content(complexcontent.content) 123 return complexcontent.content.elements[0] 124 end 125 elsif check_array_content(content) 126 return content.elements[0] 127 end 128 nil # use default item name 129 end 130 117 131 private 118 132 119 133 def check_array_content(content) 120 content.elements.size == 1 and content.elements[0].maxoccurs != '1' 134 content and content.elements.size == 1 and 135 content.elements[0].maxoccurs != '1' 121 136 end 122 137 trunk/test/wsdl/rpc/test-rpc-lit.wsdl
r1569 r1581 4 4 targetNamespace="http://whitemesa.net/wsdl/rpc-lit-test" 5 5 xmlns="http://schemas.xmlsoap.org/wsdl/" 6 xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"7 6 xmlns:soap11="http://schemas.xmlsoap.org/wsdl/soap/" 8 7 xmlns:xsd="http://www.w3.org/2001/XMLSchema" … … 327 326 </binding> 328 327 329 <binding name="Soap12TestRpcLitBinding" type="tns:SoapTestPortTypeRpc">330 <soap12:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>331 332 <!-- echoStruct rpc operation -->333 <operation name="echoStruct">334 <soap12:operation/>335 <input>336 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />337 </input>338 <output>339 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />340 </output>341 </operation>342 343 <!-- echoStructArray rpc operation -->344 <operation name="echoStructArray">345 <soap12:operation/>346 <input>347 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />348 </input>349 <output>350 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />351 </output>352 </operation>353 354 <!-- echoStructAsSimpleTypes rpc operation -->355 <operation name="echoStructAsSimpleTypes">356 <soap12:operation/>357 <input>358 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />359 </input>360 <output>361 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />362 </output>363 </operation>364 365 <!-- echoSimpleTypesAsStruct rpc operation -->366 <operation name="echoSimpleTypesAsStruct">367 <soap12:operation/>368 <input>369 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />370 </input>371 <output>372 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />373 </output>374 </operation>375 376 <!-- echoNestedStruct rpc operation -->377 <operation name="echoNestedStruct">378 <soap12:operation/>379 <input>380 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />381 </input>382 <output>383 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />384 </output>385 </operation>386 387 <!-- echoNestedArray rpc operation -->388 <operation name="echoNestedArray">389 <soap12:operation/>390 <input>391 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />392 </input>393 <output>394 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />395 </output>396 </operation>397 398 <!-- echoStringArray rpc operation -->399 <operation name="echoStringArray">400 <soap12:operation/>401 <input>402 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />403 </input>404 <output>405 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />406 </output>407 </operation>408 409 <!-- echoIntegerArray rpc operation -->410 <operation name="echoIntegerArray">411 <soap12:operation/>412 <input>413 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />414 </input>415 <output>416 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />417 </output>418 </operation>419 420 <!-- echoBoolean rpc operation -->421 <operation name="echoBoolean">422 <soap12:operation/>423 <input>424 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />425 </input>426 <output>427 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />428 </output>429 </operation>430 431 <!-- echoString rpc operation -->432 <operation name="echoString">433 <soap12:operation/>434 <input>435 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />436 </input>437 <output>438 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" />439 </output>440 </operation>441 442 </binding>443 444 328 <service name="WhiteMesaSoapRpcLitTestSvc"> 445 329 446 <port name="Soap12TestRpcLitPort" binding="tns:Soap12TestRpcLitBinding">447 <soap12:address location="http://www.whitemesa.net/soap12/test-rpc-lit"/>448 </port>449 330 <port name="Soap11TestRpcLitPort" binding="tns:Soap11TestRpcLitBinding"> 450 331 <soap11:address location="http://www.whitemesa.net/test-rpc-lit"/> trunk/test/wsdl/rpc/test_rpc_lit.rb
r1574 r1581 1 1 require 'test/unit' 2 require 'wsdl/parser'3 2 require 'wsdl/soap/wsdl2ruby' 4 3 require 'soap/rpc/standaloneServer' … … 32 31 33 32 def echoStringArray(strings) 34 strings 33 # strings.stringItem => Array 34 ArrayOfstring[*strings.stringItem] 35 35 end 36 36 end … … 48 48 def teardown 49 49 teardown_server 50 File.unlink(pathname('RPC-Literal-TestDefinitions.rb')) 51 File.unlink(pathname('RPC-Literal-TestDefinitionsDriver.rb')) 50 unless $DEBUG 51 File.unlink(pathname('RPC-Literal-TestDefinitions.rb')) 52 File.unlink(pathname('RPC-Literal-TestDefinitionsDriver.rb')) 53 end 52 54 @client.reset_stream if @client 53 55 end … … 68 70 gen.opt['force'] = true 69 71 gen.run 70 require pathname('RPC-Literal-TestDefinitions.rb') 71 require pathname('RPC-Literal-TestDefinitionsDriver.rb') 72 backupdir = Dir.pwd 73 begin 74 Dir.chdir(DIR) 75 require pathname('RPC-Literal-TestDefinitions.rb') 76 require pathname('RPC-Literal-TestDefinitionsDriver.rb') 77 ensure 78 Dir.chdir(backupdir) 79 end 72 80 end 73 81 … … 91 99 92 100 def test_wsdl 93 wsdl = File.join(DIR,'test-rpc-lit.wsdl')101 wsdl = pathname('test-rpc-lit.wsdl') 94 102 @client = ::SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver 95 103 @client.endpoint_url = "http://localhost:#{Port}/" 96 104 @client.wiredump_dev = STDOUT if $DEBUG 97 assert_equal(["a", "b", "c"], @client.echoStringArray(["a", "b", "c"]).item) 105 # response contains only 1 part. 106 result = @client.echoStringArray(ArrayOfstring["a", "b", "c"])[0] 107 assert_equal(["a", "b", "c"], result.stringItem) 98 108 end 99 109 … … 101 111 drv = SoapTestPortTypeRpc.new("http://localhost:#{Port}/") 102 112 drv.wiredump_dev = STDOUT if $DEBUG 103 assert_equal(["a", "b", "c"], drv.echoStringArray(["a", "b", "c"])) 113 result = drv.echoStringArray(ArrayOfstring["a", "b", "c"])[0] 114 assert_equal(["a", "b", "c"], result.stringItem) 104 115 end 105 116 end trunk/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb
r1486 r1581 39 39 @@schema_type = "section" 40 40 @@schema_ns = "urn:mysample" 41 @@schema_element = [["item", ["Section", XSD::QName.new(nil, "item")]]] 41 42 end trunk/test/wsdl/soap/wsdl2ruby/section/test_section.rb
r1470 r1581 12 12 13 13 def teardown 14 File.unlink(pathname("mysample.rb")) 14 File.unlink(pathname("mysample.rb")) unless $DEBUG 15 15 end 16 16