Changeset 1701
- Timestamp:
- 08/09/06 21:43:03 (2 years ago)
- Files:
-
- trunk/lib/soap/rpc/proxy.rb (modified) (6 diffs)
- trunk/lib/wsdl/operationBinding.rb (modified) (1 diff)
- trunk/test/wsdl/overload (added)
- trunk/test/wsdl/overload/overload.wsdl (added)
- trunk/test/wsdl/overload/test_overload.rb (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/rpc/proxy.rb
r1670 r1701 1 1 # SOAP4R - RPC Proxy library. 2 # Copyright (C) 2000, 2003-200 5NAKAMURA, Hiroshi <nahi@ruby-lang.org>.2 # Copyright (C) 2000, 2003-2006 NAKAMURA, Hiroshi <nahi@ruby-lang.org>. 3 3 4 4 # This program is copyrighted free software by NAKAMURA, Hiroshi. You can … … 45 45 initialize_streamhandler(@protocol_option) 46 46 @operation = {} 47 @operation_by_qname = {} 48 @operation_by_soapaction = {} 47 49 @mandatorycharset = nil 48 50 @allow_unqualified_element = true … … 85 87 opt[:request_use] ||= :encoded 86 88 opt[:response_use] ||= :encoded 87 @operation[name] = Operation.new(soapaction, param_def, opt) 89 op = Operation.new(soapaction, param_def, opt) 90 assign_operation(name, qname, soapaction, op) 88 91 end 89 92 … … 101 104 opt[:attributeformdefault] = true 102 105 end 103 @operation[name] = Operation.new(soapaction, param_def, opt) 106 op = Operation.new(soapaction, param_def, opt) 107 assign_operation(name, nil, soapaction, op) 104 108 end 105 109 … … 115 119 116 120 def call(name, *params) 117 unless op_info = @operation[name] 118 raise MethodDefinitionError, "method: #{name} not defined" 119 end 121 # name must be used only for lookup 122 op_info = lookup_operation(name) 120 123 mapping_opt = create_mapping_opt 121 124 req_header = create_request_header … … 285 288 end 286 289 290 def assign_operation(name, qname, soapaction, op) 291 assigned = false 292 if name and !name.empty? 293 @operation[name] = op 294 assigned = true 295 end 296 if qname 297 @operation_by_qname[qname] = op 298 assigned = true 299 end 300 if soapaction and !soapaction.empty? 301 @operation_by_soapaction[soapaction] = op 302 assigned = true 303 end 304 unless assigned 305 raise MethodDefinitionError.new("cannot assign operation") 306 end 307 end 308 309 def lookup_operation(name_or_qname_or_soapaction) 310 if op = @operation[name_or_qname_or_soapaction] 311 return op 312 end 313 if op = @operation_by_qname[name_or_qname_or_soapaction] 314 return op 315 end 316 if op = @operation_by_soapaction[name_or_qname_or_soapaction] 317 return op 318 end 319 raise MethodDefinitionError.new( 320 "operation: #{name_or_qname_or_soapaction} not supported") 321 end 322 287 323 class Operation 288 324 attr_reader :soapaction trunk/lib/wsdl/operationBinding.rb
r1520 r1701 38 38 39 39 def find_operation 40 porttype.operations[@name] or raise RuntimeError.new("#{@name} not found") 40 porttype.operations.each do |op| 41 next if op.name != @name 42 next if op.input and @input and op.input.name != @input.name 43 next if op.output and @output and op.output.name != @output.name 44 return op 45 end 46 raise RuntimeError.new("#{@name} not found") 41 47 end 42 48