| Class | SOAP::RPC::Router |
| In: |
soap/rpc/router.rb
|
| Parent: | Object |
| actor | [R] | |
| allow_unqualified_element | [RW] | |
| default_encodingstyle | [RW] | |
| headerhandler | [R] | |
| mapping_registry | [RW] |
# File soap/rpc/router.rb, line 32 def initialize(actor) @actor = actor @receiver = {} @method_name = {} @method = {} @allow_unqualified_element = false @default_encodingstyle = nil @mapping_registry = nil @headerhandler = Header::HandlerSet.new end
# File soap/rpc/router.rb, line 43 def add_method(receiver, qname, soapaction, name, param_def) fqname = fqname(qname) @receiver[fqname] = receiver @method_name[fqname] = name @method[fqname] = RPC::SOAPMethodRequest.new(qname, param_def, soapaction) end
Create fault response string.
# File soap/rpc/router.rb, line 89 def create_fault_response(e, charset = nil) header = SOAPHeader.new body = SOAPBody.new(fault(e)) env = SOAPEnvelope.new(header, body) opt = options opt[:external_content] = nil opt[:charset] = charset response_string = Processor.marshal(env, opt) conn_data = StreamHandler::ConnectionData.new(response_string) conn_data.is_fault = true if ext = opt[:external_content] mime = MIMEMessage.new ext.each do |k, v| mime.add_attachment(v.data) end mime.add_part(conn_data.send_string + "\r\n") mime.close conn_data.send_string = mime.content_str conn_data.send_contenttype = mime.headers['content-type'].str end conn_data end
# File soap/rpc/router.rb, line 50 def route(conn_data) soap_response = nil begin env = unmarshal(conn_data) if env.nil? raise ArgumentError.new("Illegal SOAP marshal format.") end receive_headers(env.header) soap_request = env.body.request unless soap_request.is_a?(SOAPStruct) raise RPCRoutingError.new("Not an RPC style.") end soap_response = dispatch(soap_request) rescue Exception soap_response = fault($!) conn_data.is_fault = true end opt = options opt[:external_content] = nil header = call_headers body = SOAPBody.new(soap_response) env = SOAPEnvelope.new(header, body) response_string = Processor.marshal(env, opt) conn_data.send_string = response_string if ext = opt[:external_content] mime = MIMEMessage.new ext.each do |k, v| mime.add_attachment(v.data) end mime.add_part(conn_data.send_string + "\r\n") mime.close conn_data.send_string = mime.content_str conn_data.send_contenttype = mime.headers['content-type'].str end conn_data end