Changeset 1411
- Timestamp:
- 02/02/05 18:40:38 (4 years ago)
- Files:
-
- trunk/lib/soap/mapping/wsdlencodedregistry.rb (modified) (3 diffs)
- trunk/lib/soap/mapping/wsdlliteralregistry.rb (modified) (8 diffs)
- trunk/lib/soap/rpc/element.rb (modified) (4 diffs)
- trunk/lib/soap/rpc/proxy.rb (modified) (12 diffs)
- trunk/lib/soap/rpc/router.rb (modified) (5 diffs)
- trunk/lib/soap/wsdlDriver.rb (modified) (10 diffs)
- trunk/lib/wsdl/operation.rb (modified) (2 diffs)
- trunk/lib/wsdl/soap/definitions.rb (modified) (3 diffs)
- trunk/lib/xsd/namedelements.rb (modified) (2 diffs)
- trunk/test/wsdl/datetime/DatetimeService.rb (modified) (1 diff)
- trunk/test/wsdl/datetime/test_datetime.rb (modified) (1 diff)
- trunk/test/wsdl/simpletype/test_simpletype.rb (modified) (3 diffs)
- trunk/test/wsdl/soap/test_soapbodyparts.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/mapping/wsdlencodedregistry.rb
r1407 r1411 21 21 attr_reader :definedtypes 22 22 attr_accessor :excn_handler_obj2soap 23 attr_accessor :excn_handler_soap2obj 23 24 24 25 def initialize(definedtypes, config = {}) … … 26 27 @config = config 27 28 @excn_handler_obj2soap = nil 29 @excn_handler_soap2obj = nil 28 30 # For mapping AnyType element. 29 31 @rubytype_factory = RubytypeFactory.new( … … 56 58 end 57 59 60 # map anything for now: must refer WSDL while mapping. [ToDo] 58 61 def soap2obj(node) 59 raise RuntimeError.new("#{self} is for obj2soap only")62 Mapping.soap2obj(node) 60 63 end 61 64 trunk/lib/soap/mapping/wsdlliteralregistry.rb
r1373 r1411 1 1 # SOAP4R - WSDL literal mapping registry. 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 require 'soap/mapping/typeMap' 12 12 require 'xsd/codegen/gensupport' 13 require 'xsd/namedelements' 13 14 14 15 … … 23 24 attr_accessor :excn_handler_soap2obj 24 25 25 def initialize(definedelements = nil, definedtypes = nil) 26 Empty = XSD::NamedElements.new.freeze 27 28 def initialize(definedelements = Empty, definedtypes = Empty) 26 29 @definedelements = definedelements 27 30 @definedtypes = definedtypes 31 @excn_handler_obj2soap = nil 32 @excn_handler_soap2obj = nil 28 33 @rubytype_factory = RubytypeFactory.new(:allow_original_mapping => false) 29 34 @schema_element_cache = {} … … 32 37 def obj2soap(obj, qname) 33 38 ret = nil 34 if !@definedelements.nil? &&ele = @definedelements[qname]39 if ele = @definedelements[qname] 35 40 ret = _obj2soap(obj, ele) 36 elsif !@definedtypes.nil? &&type = @definedtypes[qname]41 elsif type = @definedtypes[qname] 37 42 ret = obj2type(obj, type) 38 43 else … … 46 51 return ret if ret 47 52 end 48 raise MappingError.new(" Cannot map #{ obj.class.name } to SOAP/OM.")53 raise MappingError.new("cannot map #{obj.class.name} to SOAP/OM") 49 54 end 50 55 … … 63 68 end 64 69 end 65 raise MappingError.new(" Cannot map #{ node.type.name } to Ruby object.")70 raise MappingError.new("cannot map #{node.type.name} to Ruby object") 66 71 end 67 72 … … 76 81 o = base2soap(obj, type) 77 82 else 78 raise MappingError.new(" Cannot find type #{ele.type}.")83 raise MappingError.new("cannot find type #{ele.type}") 79 84 end 80 85 o.elename = ele.name … … 103 108 if type.restriction.enumeration.empty? 104 109 STDERR.puts( 105 "#{type.name}: simpleType which is not enum type not supported .")110 "#{type.name}: simpleType which is not enum type not supported") 106 111 return o 107 112 end trunk/lib/soap/rpc/element.rb
r1406 r1411 102 102 end 103 103 104 def each_param_name(*type) 105 @signature.each do |io_type, name, param_type| 106 if type.include?(io_type) 107 yield(name) 108 end 109 end 110 end 111 112 def each_in_param_name 113 each_param_name(IN, INOUT) do |name| 114 yield name 115 end 116 end 117 118 def each_out_param_name 119 each_param_name(OUT, INOUT) do |name| 120 yield name 121 end 104 def input_params 105 collect_params(IN, INOUT) 106 end 107 108 def output_params 109 collect_params(OUT, INOUT) 122 110 end 123 111 … … 183 171 184 172 private 173 174 def collect_params(*type) 175 names = [] 176 @signature.each do |io_type, name, param_type| 177 names << name if type.include?(io_type) 178 end 179 names 180 end 185 181 186 182 def init_param(param_def) … … 235 231 236 232 def each 237 each_param_name(IN, INOUT)do |name|233 input_params.each do |name| 238 234 unless @inparam[name] 239 235 raise ParameterError.new("parameter: #{name} was not given") … … 285 281 end 286 282 287 each_param_name(OUT, INOUT) do |param_name|288 unless @outparam[ param_name]289 raise ParameterError.new("parameter: #{ param_name} was not given")290 end 291 yield( param_name, @outparam[param_name])283 output_params.each do |name| 284 unless @outparam[name] 285 raise ParameterError.new("parameter: #{name} was not given") 286 end 287 yield(name, @outparam[name]) 292 288 end 293 289 end trunk/lib/soap/rpc/proxy.rb
r1406 r1411 85 85 opt[:request_use] ||= :encoded 86 86 opt[:response_use] ||= :encoded 87 @operation[name] = Operation.new(soapaction, name,param_def, opt)87 @operation[name] = Operation.new(soapaction, param_def, opt) 88 88 end 89 89 … … 93 93 opt[:request_use] ||= :literal 94 94 opt[:response_use] ||= :literal 95 @operation[name] = Operation.new(soapaction, name,param_def, opt)95 @operation[name] = Operation.new(soapaction, param_def, opt) 96 96 end 97 97 … … 130 130 end 131 131 132 def check_fault(body)133 if body.fault134 raise SOAP::FaultError.new(body.fault)135 end136 end137 138 private139 140 132 def route(req_header, req_body, reqopt, resopt) 141 133 req_env = SOAPEnvelope.new(req_header, req_body) … … 159 151 unmarshal(conn_data, resopt) 160 152 end 153 154 def check_fault(body) 155 if body.fault 156 raise SOAP::FaultError.new(body.fault) 157 end 158 end 159 160 private 161 161 162 162 def create_request_header … … 229 229 attr_reader :response_use 230 230 231 def initialize(soapaction, name,param_def, opt)231 def initialize(soapaction, param_def, opt) 232 232 @soapaction = soapaction 233 @name = name234 233 @request_style = opt[:request_style] 235 234 @response_style = opt[:response_style] … … 241 240 check_use(@response_use) 242 241 if @request_style == :rpc 243 request_qname = opt[:request_qname] or raise 242 @rpc_request_qname = opt[:request_qname] 243 if @rpc_request_qname.nil? 244 raise MethodDefinitionError.new("rpc_request_qname must be given") 245 end 244 246 @rpc_method_factory = 245 RPC::SOAPMethodRequest.new( request_qname, param_def, @soapaction)247 RPC::SOAPMethodRequest.new(@rpc_request_qname, param_def, @soapaction) 246 248 else 247 249 @doc_request_qnames = [] … … 321 323 def request_rpc_enc(values, mapping_registry) 322 324 method = @rpc_method_factory.dup 323 values = Mapping.obj2soap(values, mapping_registry).to_a 324 params = {} 325 idx = 0 326 method.each_in_param_name do |name| 327 params[name] = values[idx] || SOAPNil.new 328 idx += 1 329 end 330 method.set_param(params) 325 names = method.input_params 326 obj = create_request_obj(names, values) 327 soap = Mapping.obj2soap(obj, mapping_registry, @rpc_request_qname) 328 method.set_param(soap) 331 329 method 332 330 end … … 336 334 params = {} 337 335 idx = 0 338 method. each_in_param_namedo |name|336 method.input_params.each do |name| 339 337 params[name] = SOAPElement.from_obj(values[idx]) 340 338 idx += 1 … … 353 351 (0...values.size).collect { |idx| 354 352 item = values[idx] 355 unless item.respond_to?(:size) and item.size == 1356 raise ArgumentError.new(357 "values element is expected to be Hash-like object with one key")358 end359 353 qname = @doc_request_qnames[idx] 360 354 ele = SOAPElement.from_obj(item, qname.namespace) … … 374 368 def response_doc(body, mapping_registry) 375 369 if @response_use == :encoded 376 re sponse_doc_enc(body, mapping_registry)377 else 378 re sponse_doc_lit(body, mapping_registry)370 return *response_doc_enc(body, mapping_registry) 371 else 372 return *response_doc_lit(body, mapping_registry) 379 373 end 380 374 end … … 397 391 def response_rpc_lit(body, mapping_registry) 398 392 body.root_node.collect { |key, value| 399 value. to_obj393 value.respond_to?(:to_obj) ? value.to_obj : value.data 400 394 } 401 395 end … … 409 403 def response_doc_lit(body, mapping_registry) 410 404 body.collect { |key, value| 411 value. to_obj405 value.respond_to?(:to_obj) ? value.to_obj : value.data 412 406 } 407 end 408 409 def create_request_obj(names, params) 410 o = Object.new 411 for idx in 0 ... params.length 412 o.instance_variable_set('@' + names[idx], params[idx]) 413 end 414 o 413 415 end 414 416 end trunk/lib/soap/rpc/router.rb
r1406 r1411 393 393 def request_rpc_lit(request) 394 394 request.collect { |key, value| 395 value. to_obj395 value.respond_to?(:to_obj) ? value.to_obj : value.data 396 396 } 397 397 end … … 405 405 def request_doc_lit(body) 406 406 body.collect { |key, value| 407 value. to_obj407 value.respond_to?(:to_obj) ? value.to_obj : value.data 408 408 } 409 409 end … … 441 441 outparams = {} 442 442 i = 1 443 soap_response. each_out_param_namedo |outparam|443 soap_response.output_params.each do |outparam| 444 444 outparams[outparam] = Mapping.obj2soap(result[i], mapping_registry) 445 445 i += 1 … … 462 462 outparams = {} 463 463 i = 1 464 soap_response. each_out_param_namedo |outparam|464 soap_response.output_params.each do |outparam| 465 465 outparams[outparam] = SOAPElement.from_obj(result[i]) 466 466 i += 1 … … 485 485 (0...result.size).collect { |idx| 486 486 item = result[idx] 487 unless item.respond_to?(:size) and item.size == 1488 raise ArgumentError.new(489 "result element is expected to be Hash-like object with one key")490 end491 487 qname = @doc_response_qnames[idx] 492 488 ele = SOAPElement.from_obj(item, qname.namespace) trunk/lib/soap/wsdlDriver.rb
r1397 r1411 10 10 require 'wsdl/importer' 11 11 require 'xsd/qname' 12 require 'soap/element' 13 require 'soap/baseData' 14 require 'soap/streamHandler' 15 require 'soap/mimemessage' 16 require 'soap/mapping' 12 require 'xsd/codegen/gensupport' 17 13 require 'soap/mapping/wsdlencodedregistry' 18 14 require 'soap/mapping/wsdlliteralregistry' 19 require 'soap/rpc/rpc' 20 require 'soap/rpc/element' 21 require 'soap/rpc/proxy' 22 require 'soap/processor' 23 require 'soap/header/handlerset' 24 require 'xsd/codegen/gensupport' 15 require 'soap/rpc/driver' 25 16 26 17 … … 33 24 attr_reader :wsdl 34 25 35 def initialize(wsdl, logdev = nil) 36 @logdev = logdev 26 def initialize(wsdl) 37 27 @wsdl = import(wsdl) 38 28 end … … 42 32 end 43 33 34 def create_rpc_driver(servicename = nil, portname = nil) 35 port = find_port(servicename, portname) 36 drv = SOAP::RPC::Driver.new(port.soap_address.location) 37 init_driver(drv, port) 38 add_operation(drv, port) 39 drv 40 end 41 42 # depricated old interface 44 43 def create_driver(servicename = nil, portname = nil) 45 service = if servicename 46 @wsdl.service(XSD::QName.new(@wsdl.targetnamespace, servicename)) 47 else 48 @wsdl.services[0] 49 end 44 STDERR.puts "WSDLDriverFactory#create_driver is depricated." + 45 " Use create_rpc_driver instead." 46 port = find_port(servicename, portname) 47 WSDLDriver.new(@wsdl, port, @logdev) 48 end 49 50 # Backward compatibility. 51 alias createDriver create_driver 52 53 private 54 55 def find_port(servicename = nil, portname = nil) 56 service = port = nil 57 if servicename 58 service = @wsdl.service( 59 XSD::QName.new(@wsdl.targetnamespace, servicename)) 60 else 61 service = @wsdl.services[0] 62 end 50 63 if service.nil? 51 raise FactoryError.new("service #{ servicename} not found in WSDL")52 end 53 port =if portname54 service.ports[XSD::QName.new(@wsdl.targetnamespace, portname)]55 else56 service.ports[0]57 end64 raise FactoryError.new("service #{servicename} not found in WSDL") 65 end 66 if portname 67 port = service.ports[XSD::QName.new(@wsdl.targetnamespace, portname)] 68 else 69 port = service.ports[0] 70 end 58 71 if port.nil? 59 raise FactoryError.new("port #{ portname} not found in WSDL")72 raise FactoryError.new("port #{portname} not found in WSDL") 60 73 end 61 74 if port.soap_address.nil? 62 75 raise FactoryError.new("soap:address element not found in WSDL") 63 76 end 64 WSDLDriver.new(@wsdl, port, @logdev) 65 end 66 67 # Backward compatibility. 68 alias createDriver create_driver 69 70 private 71 77 port 78 end 79 80 def init_driver(drv, port) 81 wsdl_elements = @wsdl.collect_elements 82 wsdl_types = @wsdl.collect_complextypes + @wsdl.collect_simpletypes 83 rpc_decode_typemap = wsdl_types + 84 @wsdl.soap_rpc_complextypes(port.find_binding) 85 drv.proxy.mapping_registry = 86 Mapping::WSDLEncodedRegistry.new(rpc_decode_typemap) 87 drv.proxy.literal_mapping_registry = 88 Mapping::WSDLLiteralRegistry.new(wsdl_elements, wsdl_types) 89 end 90 91 def add_operation(drv, port) 92 # Convert a map which key is QName, to a Hash which key is String. 93 port.find_binding.operations.each do |op_bind| 94 op = op_bind.find_operation 95 96 soapaction = op_bind.soapoperation.soapaction 97 orgname = op.name.name 98 name = ::XSD::CodeGen::GenSupport.safemethodname(orgname) 99 param_def = create_param_def(op_bind) 100 opt = {} 101 opt[:request_style] = opt[:response_style] = 102 op_bind.soapoperation.operation_style || :document 103 opt[:request_use] = (op_bind.input.soapbody.use || 'literal').intern 104 opt[:response_use] = (op_bind.output.soapbody.use || 'literal').intern 105 if op_bind.soapoperation.operation_style == :rpc 106 qname = op.inputname 107 drv.add_rpc_operation(qname, soapaction, name, param_def, opt) 108 else 109 drv.add_document_operation(soapaction, name, param_def, opt) 110 end 111 if orgname != name and orgname.capitalize == name.capitalize 112 sclass = class << drv; self; end 113 sclass.__send__(:define_method, orgname, proc { |*arg| 114 __send__(name, *arg) 115 }) 116 end 117 end 118 end 119 72 120 def import(location) 73 121 WSDL::Importer.import(location) 122 end 123 124 def create_param_def(op_bind) 125 op = op_bind.find_operation 126 param_def = [] 127 inputparts = op.inputparts 128 if op_bind.input.soapbody.parts 129 inputparts = filter_parts(op_bind.input.soapbody.parts, inputparts) 130 end 131 inputparts.each do |part| 132 partqname = partqname(part) 133 param_def << param_def(::SOAP::RPC::SOAPMethod::IN, partqname) 134 end 135 outputparts = op.outputparts 136 if op_bind.output.soapbody.parts 137 outputparts = filter_parts(op_bind.output.soapbody.parts, outputparts) 138 end 139 if op_bind.soapoperation.operation_style == :rpc 140 part = outputparts.shift 141 param_def << param_def(::SOAP::RPC::SOAPMethod::RETVAL, partqname(part)) 142 outputparts.each do |part| 143 param_def << param_def(::SOAP::RPC::SOAPMethod::OUT, partqname(part)) 144 end 145 else 146 outputparts.each do |part| 147 param_def << param_def(::SOAP::RPC::SOAPMethod::OUT, partqname(part)) 148 end 149 end 150 param_def 151 end 152 153 def partqname(part) 154 if part.type 155 XSD::QName.new(@wsdl.targetnamespace, part.name) 156 else 157 part.element 158 end 159 end 160 161 def param_def(type, partqname) 162 [type, partqname.name, [nil, partqname.namespace, partqname.name]] 163 end 164 165 def filter_parts(partsdef, partssource) 166 parts = partsdef.split(/\s+/) 167 partssource.find_all { |part| parts.include?(part.name) } 74 168 end 75 169 end … … 227 321 req_header = create_request_header 228 322 req_body = create_request_body(op_info, *values) 229 opt = create_options({ 230 :soapaction => op_info.soapaction || @soapaction, 323 reqopt = create_options({ 324 :soapaction => op_info.soapaction || @soapaction}) 325 resopt = create_options({ 231 326 :decode_typemap => @rpc_decode_typemap}) 232 env = @proxy.invoke(req_header, req_body, opt) 327 env = @proxy.route(req_header, req_body, reqopt, resopt) 328 receive_headers(env.header) 233 329 raise EmptyResponseError.new("empty response") unless env 234 receive_headers(env.header)235 330 begin 236 331 @proxy.check_fault(env.body) … … 250 345 end 251 346 252 def document_call(name, param)347 def document_call(name, *values) 253 348 set_wiredump_file_base(name) 254 op_info = @operation[name] 255 req_header = header_from_obj(header_obj, op_info) 349 unless op_info = @operation[name] 350 raise RuntimeError, "method: #{name} not defined" 351 end 352 req_header = create_request_header 353 354 256 355 req_body = body_from_obj(body_obj, op_info) 257 356 env = @proxy.invoke(req_header, req_body, op_info.soapaction || @soapaction, @wsdl_types) … … 298 397 def set_wiredump_file_base(name) 299 398 if @wiredump_file_base 300 @proxy.set_wiredump_file_base(@wiredump_file_base + "_#{ name}")399 @proxy.set_wiredump_file_base(@wiredump_file_base + "_#{name}") 301 400 end 302 401 end … … 421 520 def add_method_interface(op_info) 422 521 name = ::XSD::CodeGen::GenSupport.safemethodname(op_info.op_name.name) 522 orgname = op_info.op_name.name 523 parts_names = op_info.bodyparts.collect { |part| part.name } 423 524 case op_info.style 424 525 when :document 425 add_document_method_interface(name) 526 if orgname != name and orgname.capitalize == name.capitalize 527 add_document_method_interface(orgname, parts_names) 528 end 529 add_document_method_interface(name, parts_names) 426 530 when :rpc 427 parts_names = op_info.bodyparts.collect { |part| part.name }428 orgname = op_info.op_name.name429 531 if orgname != name and orgname.capitalize == name.capitalize 430 532 add_rpc_method_interface(orgname, parts_names) … … 432 534 add_rpc_method_interface(name, parts_names) 433 535 else 434 raise RuntimeError.new(" Unknown style: #{op_info.style}")536 raise RuntimeError.new("unknown style: #{op_info.style}") 435 537 end 436 538 end … … 448 550 end 449 551 450 def add_document_method_interface(name )552 def add_document_method_interface(name, parts_names) 451 553 sclass = class << @host; self; end 452 sclass.__send__(:define_method, name, proc { |h, b| 453 @servant.document_send(name, h, b) 554 sclass.__send__(:define_method, name, proc { |*arg| 555 unless arg.size == parts_names.size 556 raise ArgumentError.new( 557 "wrong number of arguments (#{arg.size} for #{parts_names.size})") 558 end 559 @servant.document_call(name, *arg) 454 560 }) 455 561 @host.method(name) … … 477 583 478 584 end 479 480 trunk/lib/wsdl/operation.rb
r1369 r1411 47 47 48 48 def input_info 49 op_name = @name 50 optype_name = XSD::QName.new(targetnamespace, input.name ? input.name.name : @name.name) 51 NameInfo.new(op_name, optype_name, inputparts) 49 NameInfo.new(@name, inputname, inputparts) 52 50 end 53 51 54 52 def output_info 55 op_name = @name 56 optype_name = XSD::QName.new(targetnamespace, output.name ? output.name.name : @name.name) 57 NameInfo.new(op_name, optype_name, outputparts) 53 NameInfo.new(@name, outputname, outputparts) 58 54 end 59 55 … … 62 58 end 63 59 60 def inputname 61 XSD::QName.new(targetnamespace, input.name ? input.name.name : @name.name) 62 end 63 64 64 def outputparts 65 65 sort_parts(output.find_message.parts) 66 end 67 68 def outputname 69 XSD::QName.new(targetnamespace, 70 output.name ? output.name.name : @name.name + "Response") 66 71 end 67 72 trunk/lib/wsdl/soap/definitions.rb
r1238 r1411 112 112 operation = op_bind.find_operation 113 113 if op_bind.input 114 type = XMLSchema::ComplexType.new(operation _input_name(operation))114 type = XMLSchema::ComplexType.new(operation.inputname) 115 115 message = messages[operation.input.message] 116 116 type.sequence_elements = elements_from_message(message) … … 118 118 end 119 119 if op_bind.output 120 type = XMLSchema::ComplexType.new(operation _output_name(operation))120 type = XMLSchema::ComplexType.new(operation.outputname) 121 121 message = messages[operation.output.message] 122 122 type.sequence_elements = elements_from_message(message) … … 126 126 end 127 127 types 128 end129 130 def operation_input_name(operation)131 operation.input.name || operation.name132 end133 134 def operation_output_name(operation)135 operation.output.name ||136 XSD::QName.new(operation.name.namespace, operation.name.name + "Response")137 128 end 138 129 trunk/lib/xsd/namedelements.rb
r1285 r1411 1 1 # XSD4R - WSDL named element collection. 2 # Copyright (C) 2002, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.2 # Copyright (C) 2002, 2003, 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>. 3 3 4 4 # This program is copyrighted free software by NAKAMURA, Hiroshi. You can … … 22 22 o.elements = @elements.dup 23 23 o 24 end 25 26 def freeze 27 super 28 @elements.freeze 29 self 24 30 end 25 31 trunk/test/wsdl/datetime/DatetimeService.rb
r1395 r1411 10 10 11 11 Methods = [ 12 ["now ", "now", [12 ["nowRequest", "now", [ 13 13 ["in", "now", 14 14 [SOAP::SOAPDateTime]], trunk/test/wsdl/datetime/test_datetime.rb
r1178 r1411 39 39 @client.endpoint_url = "http://localhost:#{Port}/" 40 40 @client.generate_explicit_type = true 41 @client.wiredump_dev = STDOUT if $DEBUG 41 42 end 42 43 trunk/test/wsdl/simpletype/test_simpletype.rb
r1187 r1411 11 11 class Server < ::SOAP::RPC::StandaloneServer 12 12 def on_init 13 add_method(self, 'ruby', 'version', 'date') 13 add_document_method(self, 'urn:example.com:simpletype', 'ruby', 14 XSD::QName.new('urn:example.com:simpletype', 'ruby'), 15 XSD::QName.new('http://www.w3.org/2001/XMLSchema', 'string')) 14 16 end 15 17 16 def ruby(version, date) 18 def ruby(ruby) 19 version = ruby["version"] 20 date = ruby["date"] 17 21 "#{version} (#{date})" 18 22 end … … 39 43 @client.endpoint_url = "http://localhost:#{Port}/" 40 44 @client.generate_explicit_type = false 45 @client.wiredump_dev = STDOUT if $DEBUG 41 46 end 42 47 … … 72 77 73 78 def test_ping 74 header, body = @client.ping(nil,{:version => "1.9", :date => "2004-01-01T00:00:00Z"})75 assert_equal("1.9 (2004-01-01T00:00:00Z)", body)79 ret = @client.ping({:version => "1.9", :date => "2004-01-01T00:00:00Z"}) 80 assert_equal("1.9 (2004-01-01T00:00:00Z)", ret) 76 81 end 77 82 end trunk/test/wsdl/soap/test_soapbodyparts.rb
r1159 r1411 75 75 76 76 def test_soapbodyparts 77 assert_equal([" 2", "1"], @client.foo("1", "2"))78 assert_equal([" 1", "2"], @client.foo("2", "1"))77 assert_equal(["1", "2"], @client.foo("1", "2")) 78 assert_equal(["2", "1"], @client.foo("2", "1")) 79 79 assert_equal(["2", "3"], @client.bar("2", "3")) 80 80 assert_equal(["1", "2", "3"], @client.baz("1", "2", "3"))