Is there a way to provide access to the session from an XML-RPC
server?
I am currently writing an XML-RPC server in Rails, and am using layered
dispatching. Unfortunately, everything works great except session is
always null in the ActionWebService controllers.
Is it possible to get session working with layered dispatch in
ActionWebService?
In case anyone else spends a WEEK trying to get XML-RPC sessions
working like I did.
I combined another post in this Google group about HTTP authentication
with my approach. This uses 401 Basic authentication, and returns a
session_id which can be passed as a Cookie in subsequent requests. Not
completely XMLRPC stds-compliant, but works for Rails/Perl/Java.
The missing link was I have to call new(session) in my layered
dispatcher:
class RpcController < ApplicationController
wsdl_service_name 'RPC'
web_service_dispatching_mode :layered
# Must use the {BLOCK} mode of layered dispatch, and explicitly
# pass the session ID into the new() method
web_service(:auth) { AuthService.new(session) }
end
Then, in apis/auth_service.rb:
class AuthService < XmlRpcService
web_service_api AuthAPI
# methods here...
end
And finally, my base XMLRPC ActionWebService class,
apis/xml_rpc_service.rb:
class XmlRpcService < ApplicationController
def initialize(session)
logger.debug "new=#{session}"
@session = session
end
end
I setup all my layered WebService classes to inherit from this.
Just had to find the right combination of black magic...