Class: ActionService::Protocol::XmlRpc::XmlRpcProtocol
- Inherits:
-
AbstractProtocol
- Object
- AbstractProtocol
- ActionService::Protocol::XmlRpc::XmlRpcProtocol
- Defined in:
- lib/action_service/protocol/xmlrpc.rb
Defined Under Namespace
Classes: Helper
Instance Attribute Summary
Attributes inherited from AbstractProtocol
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(container_class) ⇒ XmlRpcProtocol
constructor
A new instance of XmlRpcProtocol.
- #marshal_exception(exception) ⇒ Object
- #marshal_response(protocol_request, return_value) ⇒ Object
- #unmarshal_request(protocol_request) ⇒ Object
Constructor Details
#initialize(container_class) ⇒ XmlRpcProtocol
Returns a new instance of XmlRpcProtocol.
48 49 50 51 |
# File 'lib/action_service/protocol/xmlrpc.rb', line 48 def initialize(container_class) super(container_class) container_class.write_inheritable_hash('default_system_exports', XmlRpcProtocol => method(:xmlrpc_default_system_handler)) end |
Class Method Details
.create_protocol_request(container_class, action_pack_request) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/action_service/protocol/xmlrpc.rb', line 30 def self.create_protocol_request(container_class, action_pack_request) parser = Helper.instance.get_parser service_name = action_pack_request.parameters['action'] methodname, params = parser.parseMethodCall(action_pack_request.raw_post) protocol = XmlRpcProtocol.new(container_class) content_type = action_pack_request.env['HTTP_CONTENT_TYPE'] content_type ||= 'text/xml' request = ProtocolRequest.new(protocol, action_pack_request.raw_post, service_name.to_sym, methodname, content_type) request.values = params request rescue nil end |
Instance Method Details
#marshal_exception(exception) ⇒ Object
87 88 89 90 91 |
# File 'lib/action_service/protocol/xmlrpc.rb', line 87 def marshal_exception(exception) create = Helper.instance.get_create raw_response = create.methodResponse(false, exception) ProtocolResponse.new(self, raw_response, 'text/xml') end |
#marshal_response(protocol_request, return_value) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/action_service/protocol/xmlrpc.rb', line 65 def marshal_response(protocol_request, return_value) create = Helper.instance.get_create signature = protocol_request.return_signature if signature signature = array_types(signature) protocol_request.check_parameter_types([return_value], signature) return_value = fixup_values_for_return(return_value) raw_response = create.methodResponse(true, return_value) else # XML-RPC doesn't have the concept of a void method, nor does it # support a nil return value, so return true if we would have returned # nil if protocol_request.checked? raw_response = create.methodResponse(true, true) else return_value = true if return_value.nil? raw_response = create.methodResponse(true, return_value) end end ProtocolResponse.new(self, raw_response, 'text/xml') end |
#unmarshal_request(protocol_request) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/action_service/protocol/xmlrpc.rb', line 53 def unmarshal_request(protocol_request) values = protocol_request.values signature = protocol_request.signature if signature signature = array_types(signature) protocol_request.check_parameter_types(values, signature) values else protocol_request.checked? ? [] : values end end |