Parent

Included Modules

Files

Class/Module Index [+]

Quicksearch

SOAP::RPC::Router

Attributes

actor[R]
external_ces[RW]
filterchain[R]
generate_explicit_type[RW]
literal_mapping_registry[RW]
mappingRegistry[RW]
mappingRegistry=[RW]
mapping_registry[RW]
use_default_namespace[RW]

Public Class Methods

new(actor) click to toggle source
# File lib/soap/rpc/router.rb, line 37
def initialize(actor)
  @actor = actor
  @mapping_registry = nil
  @headerhandler = Header::HandlerSet.new
  @literal_mapping_registry = ::SOAP::Mapping::LiteralRegistry.new
  @generate_explicit_type = true
  @use_default_namespace = false
  @external_ces = nil
  @operation_by_soapaction = {}
  @operation_by_qname = {}
  @headerhandlerfactory = []
  @filterchain = Filter::FilterChain.new
end

Public Instance Methods

add_document_method(receiver, soapaction, name, param_def, opt = {}) click to toggle source
add_document_operation(receiver, soapaction, name, param_def, opt = {}) click to toggle source
# File lib/soap/rpc/router.rb, line 125
def add_document_operation(receiver, soapaction, name, param_def, opt = {})
  #
  # adopt workaround for doc/lit wrapper method
  # (you should consider to simply use rpc/lit service)
  #
  #unless soapaction
  #  raise RPCRoutingError.new("soapaction is a must for document method")
  #end
  ensure_styleuse_option(opt, :document, :literal)
  op = ApplicationScopeOperation.new(soapaction, receiver, name, param_def,
    opt)
  if opt[:request_style] != :document
    raise RPCRoutingError.new("illegal request_style given")
  end
  assign_operation(soapaction, first_input_part_qname(param_def), op)
end
Also aliased as: add_document_method
add_document_request_operation(factory, soapaction, name, param_def, opt = {}) click to toggle source
# File lib/soap/rpc/router.rb, line 143
def add_document_request_operation(factory, soapaction, name, param_def, opt = {})
  #
  # adopt workaround for doc/lit wrapper method
  # (you should consider to simply use rpc/lit service)
  #
  #unless soapaction
  #  raise RPCRoutingError.new("soapaction is a must for document method")
  #end
  ensure_styleuse_option(opt, :document, :literal)
  op = RequestScopeOperation.new(soapaction, receiver, name, param_def, opt)
  if opt[:request_style] != :document
    raise RPCRoutingError.new("illegal request_style given")
  end
  assign_operation(soapaction, first_input_part_qname(param_def), op)
end
add_headerhandler(handler) click to toggle source
# File lib/soap/rpc/router.rb, line 61
def add_headerhandler(handler)
  @headerhandler.add(handler)
end
add_method(receiver, qname, soapaction, name, param_def, opt = {}) click to toggle source
Alias for: add_rpc_operation
add_request_headerhandler(factory) click to toggle source

header handler interface

# File lib/soap/rpc/router.rb, line 54
def add_request_headerhandler(factory)
  unless factory.respond_to?(:create)
    raise TypeError.new("factory must respond to 'create'")
  end
  @headerhandlerfactory << factory
end
add_rpc_method(receiver, qname, soapaction, name, param_def, opt = {}) click to toggle source
Alias for: add_rpc_operation
add_rpc_operation(receiver, qname, soapaction, name, param_def, opt = {}) click to toggle source

operation definition interface

# File lib/soap/rpc/router.rb, line 102
def add_rpc_operation(receiver, qname, soapaction, name, param_def, opt = {})
  ensure_styleuse_option(opt, :rpc, :encoded)
  opt[:request_qname] = qname
  op = ApplicationScopeOperation.new(soapaction, receiver, name, param_def,
    opt)
  if opt[:request_style] != :rpc
    raise RPCRoutingError.new("illegal request_style given")
  end
  assign_operation(soapaction, qname, op)
end
Also aliased as: add_method, add_rpc_method
add_rpc_request_operation(factory, qname, soapaction, name, param_def, opt = {}) click to toggle source
# File lib/soap/rpc/router.rb, line 115
def add_rpc_request_operation(factory, qname, soapaction, name, param_def, opt = {})
  ensure_styleuse_option(opt, :rpc, :encoded)
  opt[:request_qname] = qname
  op = RequestScopeOperation.new(soapaction, factory, name, param_def, opt)
  if opt[:request_style] != :rpc
    raise RPCRoutingError.new("illegal request_style given")
  end
  assign_operation(soapaction, qname, op)
end
add_rpc_request_servant(factory, namespace) click to toggle source

servant definition interface

# File lib/soap/rpc/router.rb, line 68
def add_rpc_request_servant(factory, namespace)
  unless factory.respond_to?(:create)
    raise TypeError.new("factory must respond to 'create'")
  end
  obj = factory.create        # a dummy instance for introspection
  ::SOAP::RPC.defined_methods(obj).each do |name|
    begin
      qname = XSD::QName.new(namespace, name)
      param_def = ::SOAP::RPC::SOAPMethod.derive_rpc_param_def(obj, name)
      opt = create_styleuse_option(:rpc, :encoded)
      add_rpc_request_operation(factory, qname, nil, name, param_def, opt)
    rescue SOAP::RPC::MethodDefinitionError => e
      p e if $DEBUG
    end
  end
end
add_rpc_servant(obj, namespace) click to toggle source
# File lib/soap/rpc/router.rb, line 85
def add_rpc_servant(obj, namespace)
  ::SOAP::RPC.defined_methods(obj).each do |name|
    begin
      qname = XSD::QName.new(namespace, name)
      param_def = ::SOAP::RPC::SOAPMethod.derive_rpc_param_def(obj, name)
      opt = create_styleuse_option(:rpc, :encoded)
      add_rpc_operation(obj, qname, nil, name, param_def, opt)
    rescue SOAP::RPC::MethodDefinitionError => e
      p e if $DEBUG
    end
  end
end
Also aliased as: add_servant
add_servant(obj, namespace) click to toggle source
Alias for: add_rpc_servant
create_fault_response(e) click to toggle source

Create fault response string.

# File lib/soap/rpc/router.rb, line 200
def create_fault_response(e)
  env = SOAPEnvelope.new(SOAPHeader.new, SOAPBody.new(fault(e, nil), true))
  opt = {}
  opt[:external_content] = nil
  @filterchain.reverse_each do |filter|
    env = filter.on_outbound(env, opt)
    break unless env
  end
  response_string = Processor.marshal(env, opt)
  conn_data = StreamHandler::ConnectionData.new(response_string)
  conn_data.is_fault = true
  if ext = opt[:external_content]
    mimeize(conn_data, ext)
  end
  conn_data
end
route(conn_data) click to toggle source
# File lib/soap/rpc/router.rb, line 159
def route(conn_data)
  # we cannot set request_default_encodingsyle before parsing the content.
  env = unmarshal(conn_data)
  if env.nil?
    raise ArgumentError.new("illegal SOAP marshal format")
  end
  op = lookup_operation(conn_data.soapaction, env.body)
  headerhandler = @headerhandler.dup
  @headerhandlerfactory.each do |f|
    headerhandler.add(f.create)
  end
  soap_response = default_encodingstyle = nil
  begin
    receive_headers(headerhandler, env.header)
    soap_response =
      op.call(env.body, @mapping_registry, @literal_mapping_registry,
        create_mapping_opt)
    conn_data.is_fault = true if soap_response.is_a?(SOAPFault)
    default_encodingstyle = op.response_default_encodingstyle
  rescue Exception => e
    # If a wsdl fault was raised by service, the fault declaration details
    # is kept in wsdl_fault. Otherwise (exception is a program fault)
    # wsdl_fault is nil
    wsdl_fault_details = op.faults && op.faults[e.class.name]
    soap_response = fault(e, wsdl_fault_details)
    conn_data.is_fault = true
    default_encodingstyle = nil
  end
  header = call_headers(headerhandler)
  if op.response_use.nil?
    conn_data.send_string = ''
    conn_data.is_nocontent = true
    conn_data
  else
    body = SOAPBody.new(soap_response, conn_data.is_fault)
    env = SOAPEnvelope.new(header, body)
    marshal(conn_data, env, default_encodingstyle)
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.