In: |
soap/wsdlDriver.rb
|
Parent: | Object |
allow_unqualified_element | [RW] | |
default_encodingstyle | [RW] | |
generate_explicit_type | [RW] | |
mapping_registry | [RW] | |
options | [R] | |
port | [R] | |
streamhandler | [R] | |
wsdl_mapping_registry | [RW] |
# File soap/wsdlDriver.rb, line 164 def initialize(host, wsdl, port, logdev) @host = host @wsdl = wsdl @port = port @logdev = logdev @options = setup_options @mapping_registry = nil # for rpc unmarshal @wsdl_mapping_registry = nil # for rpc marshal @default_encodingstyle = EncodingNamespace @allow_unqualified_element = true @generate_explicit_type = false @wiredump_file_base = nil @mandatorycharset = nil @wsdl_elements = @wsdl.collect_elements @wsdl_types = @wsdl.collect_complextypes @rpc_decode_typemap = @wsdl_types + @wsdl.soap_rpc_complextypes(port.find_binding) @wsdl_mapping_registry = Mapping::WSDLRegistry.new(@rpc_decode_typemap) @doc_mapper = Mapper.new(@wsdl_elements, @wsdl_types) endpoint_url = @port.soap_address.location @streamhandler = HTTPPostStreamHandler.new(endpoint_url, @options["protocol.http"] ||= Property.new) # Convert a map which key is QName, to a Hash which key is String. @operations = {} @port.inputoperation_map.each do |op_name, op_info| @operations[op_name.name] = op_info add_method_interface(op_info) end end
req_header: [[element, mustunderstand, encodingstyle(QName/String)], …] req_body: SOAPBasetype/SOAPCompoundtype
# File soap/wsdlDriver.rb, line 245 def document_send(name, header_obj, body_obj) log(INFO) { "document_send: sending document '#{ name }'." } op_info = @operations[name] req_header = header_from_obj(header_obj, op_info) req_body = body_from_obj(body_obj, op_info) opt = create_options res_header, res_body = invoke(req_header, req_body, op_info, opt) if res_body.fault raise SOAP::FaultError.new(res_body.fault) end res_body_obj = res_body.response ? Mapping.soap2obj(res_body.response, @mapping_registry) : nil return res_header, res_body_obj end
# File soap/wsdlDriver.rb, line 200 def endpoint_url=(endpoint_url) @streamhandler.endpoint_url = endpoint_url @streamhandler.reset end
# File soap/wsdlDriver.rb, line 205 def rpc_send(method_name, *params) log(INFO) { "call: calling method '#{ method_name }'." } log(DEBUG) { "call: parameters '#{ params.inspect }'." } op_info = @operations[method_name] method = create_method_struct(op_info, params) req_header = nil req_body = SOAPBody.new(method) if @wiredump_file_base @streamhandler.wiredump_file_base = @wiredump_file_base + '_' << method_name end begin opt = create_options opt[:decode_typemap] = @rpc_decode_typemap res_header, res_body = invoke(req_header, req_body, op_info, opt) if res_body.fault raise SOAP::FaultError.new(res_body.fault) end rescue SOAP::FaultError => e Mapping.fault2exception(e) end ret = res_body.response ? Mapping.soap2obj(res_body.response, @mapping_registry) : nil if res_body.outparams outparams = res_body.outparams.collect { |outparam| Mapping.soap2obj(outparam) } return [ret].concat(outparams) else return ret end end