Class SOAP::RPC::Router
In: soap/rpc/router.rb
Parent: Object

Methods

Included Modules

SOAP

Attributes

actor  [R] 
allow_unqualified_element  [RW] 
default_encodingstyle  [RW] 
headerhandler  [R] 
mapping_registry  [RW] 

Public Class methods

[Source]

# 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

Public Instance methods

[Source]

# 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.

[Source]

# 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

[Source]

# 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

[Validate]