| Class | SOAP::WSDLDriver::Servant__ |
| In: |
soap/wsdlDriver.rb
|
| Parent: | Object |
| allow_unqualified_element | [RW] | |
| default_encodingstyle | [RW] | |
| generate_explicit_type | [RW] | |
| headerhandler | [R] | |
| mapping_registry | [RW] | |
| options | [R] | |
| port | [R] | |
| streamhandler | [R] | |
| wsdl_mapping_registry | [RW] |
# File soap/wsdlDriver.rb, line 169 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 + @wsdl.collect_simpletypes @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) @headerhandler = Header::HandlerSet.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 257 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) req_env = SOAPEnvelope.new(req_header, req_body) opt = create_options res_env = invoke(req_env, op_info, opt) if res_env.body.fault raise ::SOAP::FaultError.new(res_env.body.fault) end res_body_obj = res_env.body.response ? Mapping.soap2obj(res_env.body.response, @mapping_registry) : nil return res_env.header, res_body_obj end
# File soap/wsdlDriver.rb, line 206 def endpoint_url=(endpoint_url) @streamhandler.endpoint_url = endpoint_url @streamhandler.reset end
# File soap/wsdlDriver.rb, line 215 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 = call_headers req_body = SOAPBody.new(method) req_env = SOAPEnvelope.new(req_header, req_body) 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_env = invoke(req_env, op_info, opt) receive_headers(res_env.header) if res_env.body.fault raise ::SOAP::FaultError.new(res_env.body.fault) end rescue ::SOAP::FaultError => e Mapping.fault2exception(e) end ret = res_env.body.response ? Mapping.soap2obj(res_env.body.response, @mapping_registry) : nil if res_env.body.outparams outparams = res_env.body.outparams.collect { |outparam| Mapping.soap2obj(outparam) } return [ret].concat(outparams) else return ret end end