Class | SOAP::RPC::Driver |
In: |
lib/soap/rpc/driver.rb
|
Parent: | Object |
options | [R] | |
proxy | [R] | |
soapaction | [RW] |
# File lib/soap/rpc/driver.rb, line 27 27: def __attr_proxy(symbol, assignable = false) 28: name = symbol.to_s 29: define_method(name) { 30: @proxy.__send__(name) 31: } 32: if assignable 33: aname = name + '=' 34: define_method(aname) { |rhs| 35: @proxy.__send__(aname, rhs) 36: } 37: end 38: end
# File lib/soap/rpc/driver.rb, line 40 40: def __attr_proxy(symbol, assignable = false) 41: name = symbol.to_s 42: module_eval "def \#{name}\n@proxy.\#{name}\nend\n" 43: if assignable 44: module_eval "def \#{name}=(value)\n@proxy.\#{name} = value\nend\n" 45: end 46: end
# File lib/soap/rpc/driver.rb, line 110 110: def initialize(endpoint_url, namespace = nil, soapaction = nil) 111: @namespace = namespace 112: @soapaction = soapaction 113: @options = setup_options 114: @wiredump_file_base = nil 115: @proxy = Proxy.new(endpoint_url, @soapaction, @options) 116: end
# File lib/soap/rpc/driver.rb, line 149 149: def add_document_method(name, soapaction, req_qname, res_qname) 150: param_def = SOAPMethod.create_doc_param_def(req_qname, res_qname) 151: @proxy.add_document_method(soapaction, name, param_def) 152: add_document_method_interface(name, param_def) 153: end
# File lib/soap/rpc/driver.rb, line 160 160: def add_document_operation(soapaction, name, param_def, opt = {}) 161: @proxy.add_document_operation(soapaction, name, param_def, opt) 162: add_document_method_interface(name, param_def) 163: end
Alias for add_rpc_method_with_soapaction_as
# File lib/soap/rpc/driver.rb, line 124 124: def add_rpc_method(name, *params) 125: add_rpc_method_with_soapaction_as(name, name, @soapaction, *params) 126: end
# File lib/soap/rpc/driver.rb, line 128 128: def add_rpc_method_as(name, name_as, *params) 129: add_rpc_method_with_soapaction_as(name, name_as, @soapaction, *params) 130: end
# File lib/soap/rpc/driver.rb, line 132 132: def add_rpc_method_with_soapaction(name, soapaction, *params) 133: add_rpc_method_with_soapaction_as(name, name, soapaction, *params) 134: end
# File lib/soap/rpc/driver.rb, line 136 136: def add_rpc_method_with_soapaction_as(name, name_as, soapaction, *params) 137: param_def = SOAPMethod.create_rpc_param_def(params) 138: qname = XSD::QName.new(@namespace, name_as) 139: @proxy.add_rpc_method(qname, soapaction, name, param_def) 140: add_rpc_method_interface(name, param_def) 141: end
# File lib/soap/rpc/driver.rb, line 155 155: def add_rpc_operation(qname, soapaction, name, param_def, opt = {}) 156: @proxy.add_rpc_operation(qname, soapaction, name, param_def, opt) 157: add_rpc_method_interface(name, param_def) 158: end
# File lib/soap/rpc/driver.rb, line 178 178: def call(name, *params) 179: set_wiredump_file_base(name) 180: @proxy.call(name, *params) 181: end
# File lib/soap/rpc/driver.rb, line 82 82: def httpproxy=(httpproxy) 83: options["protocol.http.proxy"] = httpproxy 84: end
# File lib/soap/rpc/driver.rb, line 74 74: def inspect 75: "#<#{self.class}:#{@proxy.inspect}>" 76: end
# File lib/soap/rpc/driver.rb, line 165 165: def invoke(headers, body) 166: if headers and !headers.is_a?(SOAPHeader) 167: headers = create_header(headers) 168: end 169: set_wiredump_file_base(body.elename.name) 170: env = @proxy.invoke(headers, body) 171: if env.nil? 172: return nil, nil 173: else 174: return env.header, env.body 175: end 176: end
# File lib/soap/rpc/driver.rb, line 118 118: def loadproperty(propertyname) 119: unless options.loadproperty(propertyname) 120: raise LoadError.new("No such property to load -- #{propertyname}") 121: end 122: end
# File lib/soap/rpc/driver.rb, line 94 94: def mandatorycharset 95: options["protocol.mandatorycharset"] 96: end
# File lib/soap/rpc/driver.rb, line 98 98: def mandatorycharset=(mandatorycharset) 99: options["protocol.mandatorycharset"] = mandatorycharset 100: end
# File lib/soap/rpc/driver.rb, line 86 86: def wiredump_dev 87: options["protocol.http.wiredump_dev"] 88: end
# File lib/soap/rpc/driver.rb, line 90 90: def wiredump_dev=(wiredump_dev) 91: options["protocol.http.wiredump_dev"] = wiredump_dev 92: end
# File lib/soap/rpc/driver.rb, line 102 102: def wiredump_file_base 103: options["protocol.wiredump_file_base"] 104: end
# File lib/soap/rpc/driver.rb, line 106 106: def wiredump_file_base=(wiredump_file_base) 107: options["protocol.wiredump_file_base"] = wiredump_file_base 108: end
# File lib/soap/rpc/driver.rb, line 222 222: def add_document_method_interface(name, param_def) 223: param_count = RPC::SOAPMethod.param_count(param_def, RPC::SOAPMethod::IN) 224: add_method_interface(name, param_count) 225: end
# File lib/soap/rpc/driver.rb, line 228 228: def add_method_interface(name, param_count) 229: ::SOAP::Mapping.define_singleton_method(self, name) do |*arg| 230: unless arg.size == param_count 231: raise ArgumentError.new( 232: "wrong number of arguments (#{arg.size} for #{param_count})") 233: end 234: call(name, *arg) 235: end 236: self.method(name) 237: end
# File lib/soap/rpc/driver.rb, line 239 239: def add_method_interface(name, param_count) 240: instance_eval "def \#{name}(*arg)\nunless arg.size == \#{param_count}\nraise ArgumentError.new(\n\"wrong number of arguments (\\\#{arg.size} for \#{param_count})\")\nend\ncall(\#{name.dump}, *arg)\nend\n" 241: self.method(name) 242: end
# File lib/soap/rpc/driver.rb, line 216 216: def add_rpc_method_interface(name, param_def) 217: param_count = RPC::SOAPMethod.param_count(param_def, 218: RPC::SOAPMethod::IN, RPC::SOAPMethod::INOUT) 219: add_method_interface(name, param_count) 220: end
# File lib/soap/rpc/driver.rb, line 191 191: def create_header(headers) 192: header = SOAPHeader.new() 193: headers.each do |content, mustunderstand, encodingstyle| 194: header.add(SOAPHeaderItem.new(content, mustunderstand, encodingstyle)) 195: end 196: header 197: end
# File lib/soap/rpc/driver.rb, line 185 185: def set_wiredump_file_base(name) 186: if @wiredump_file_base 187: @proxy.set_wiredump_file_base("#{@wiredump_file_base}_#{name}") 188: end 189: end
# File lib/soap/rpc/driver.rb, line 199 199: def setup_options 200: if opt = Property.loadproperty(::SOAP::PropertyName) 201: opt = opt["client"] 202: end 203: opt ||= Property.new 204: opt.add_hook("protocol.mandatorycharset") do |key, value| 205: @proxy.mandatorycharset = value 206: end 207: opt.add_hook("protocol.wiredump_file_base") do |key, value| 208: @wiredump_file_base = value 209: end 210: opt["protocol.http.charset"] ||= XSD::Charset.xml_encoding_label 211: opt["protocol.http.proxy"] ||= Env::HTTP_PROXY 212: opt["protocol.http.no_proxy"] ||= Env::NO_PROXY 213: opt 214: end