diff options
Diffstat (limited to 'actionwebservice/lib/action_web_service/protocol')
5 files changed, 27 insertions, 12 deletions
diff --git a/actionwebservice/lib/action_web_service/protocol/abstract.rb b/actionwebservice/lib/action_web_service/protocol/abstract.rb index 3819aa2ade..be5bda2d41 100644 --- a/actionwebservice/lib/action_web_service/protocol/abstract.rb +++ b/actionwebservice/lib/action_web_service/protocol/abstract.rb @@ -4,6 +4,9 @@ module ActionWebService # :nodoc: end class AbstractProtocol # :nodoc: + def setup(controller) + end + def decode_action_pack_request(action_pack_request) end diff --git a/actionwebservice/lib/action_web_service/protocol/discovery.rb b/actionwebservice/lib/action_web_service/protocol/discovery.rb index a911c7d017..3d4e0818da 100644 --- a/actionwebservice/lib/action_web_service/protocol/discovery.rb +++ b/actionwebservice/lib/action_web_service/protocol/discovery.rb @@ -16,7 +16,7 @@ module ActionWebService # :nodoc: private def discover_web_service_request(action_pack_request) (self.class.read_inheritable_attribute("web_service_protocols") || []).each do |protocol| - protocol = protocol.new + protocol = protocol.create(self) request = protocol.decode_action_pack_request(action_pack_request) return request unless request.nil? end @@ -25,7 +25,7 @@ module ActionWebService # :nodoc: def create_web_service_client(api, protocol_name, endpoint_uri, options) (self.class.read_inheritable_attribute("web_service_protocols") || []).each do |protocol| - protocol = protocol.new + protocol = protocol.create(self) client = protocol.protocol_client(api, protocol_name, endpoint_uri, options) return client unless client.nil? end diff --git a/actionwebservice/lib/action_web_service/protocol/soap_protocol.rb b/actionwebservice/lib/action_web_service/protocol/soap_protocol.rb index 3e5bad0086..e6bb5488ab 100644 --- a/actionwebservice/lib/action_web_service/protocol/soap_protocol.rb +++ b/actionwebservice/lib/action_web_service/protocol/soap_protocol.rb @@ -7,13 +7,21 @@ module ActionWebService # :nodoc: def self.included(base) base.register_protocol(SoapProtocol) base.class_inheritable_option(:wsdl_service_name) + base.class_inheritable_option(:wsdl_namespace) end class SoapProtocol < AbstractProtocol # :nodoc: DefaultEncoding = 'utf-8' - def marshaler - @marshaler ||= SoapMarshaler.new + attr :marshaler + + def initialize(namespace=nil) + namespace ||= 'urn:ActionWebService' + @marshaler = SoapMarshaler.new namespace + end + + def self.create(controller) + SoapProtocol.new(controller.wsdl_namespace) end def decode_action_pack_request(action_pack_request) @@ -47,7 +55,7 @@ module ActionWebService # :nodoc: def encode_request(method_name, params, param_types) param_types.each{ |type| marshaler.register_type(type) } if param_types - qname = XSD::QName.new(marshaler.type_namespace, method_name) + qname = XSD::QName.new(marshaler.namespace, method_name) param_def = [] if param_types params = param_types.zip(params).map do |type, param| @@ -79,7 +87,7 @@ module ActionWebService # :nodoc: return_binding = marshaler.register_type(return_type) marshaler.annotate_arrays(return_binding, return_value) end - qname = XSD::QName.new(marshaler.type_namespace, method_name) + qname = XSD::QName.new(marshaler.namespace, method_name) if return_value.nil? response = SOAP::RPC::SOAPMethodResponse.new(qname, nil) else diff --git a/actionwebservice/lib/action_web_service/protocol/soap_protocol/marshaler.rb b/actionwebservice/lib/action_web_service/protocol/soap_protocol/marshaler.rb index 78eee620eb..b36e029669 100644 --- a/actionwebservice/lib/action_web_service/protocol/soap_protocol/marshaler.rb +++ b/actionwebservice/lib/action_web_service/protocol/soap_protocol/marshaler.rb @@ -17,11 +17,11 @@ module ActionWebService end class SoapMarshaler - attr :type_namespace + attr :namespace attr :registry - def initialize(type_namespace=nil) - @type_namespace = type_namespace || 'urn:ActionWebService' + def initialize(namespace=nil) + @namespace = namespace || 'urn:ActionWebService' @registry = Registry.new @type2binding = {} register_static_factories @@ -46,7 +46,7 @@ module ActionWebService qname ||= soap_base_type_name(mapping[0]) type_binding = SoapBinding.new(self, qname, type_type, mapping) else - qname = XSD::QName.new(@type_namespace, soap_type_name(type_class.name)) + qname = XSD::QName.new(@namespace, soap_type_name(type_class.name)) @registry.add(type_class, SOAP::SOAPStruct, typed_struct_factory(type_class), @@ -58,7 +58,7 @@ module ActionWebService array_binding = nil if type.array? array_mapping = @registry.find_mapped_soap_class(Array) - qname = XSD::QName.new(@type_namespace, soap_type_name(type.element_type.type_class.name) + 'Array') + qname = XSD::QName.new(@namespace, soap_type_name(type.element_type.type_class.name) + 'Array') array_binding = SoapBinding.new(self, qname, type, array_mapping, type_binding) end @@ -88,7 +88,7 @@ module ActionWebService def typed_struct_factory(type_class) if Object.const_defined?('ActiveRecord') if type_class.ancestors.include?(ActiveRecord::Base) - qname = XSD::QName.new(@type_namespace, soap_type_name(type_class.name)) + qname = XSD::QName.new(@namespace, soap_type_name(type_class.name)) type_class.instance_variable_set('@qname', qname) return SoapActiveRecordStructFactory.new end diff --git a/actionwebservice/lib/action_web_service/protocol/xmlrpc_protocol.rb b/actionwebservice/lib/action_web_service/protocol/xmlrpc_protocol.rb index dec94ccad0..f09f89142a 100644 --- a/actionwebservice/lib/action_web_service/protocol/xmlrpc_protocol.rb +++ b/actionwebservice/lib/action_web_service/protocol/xmlrpc_protocol.rb @@ -12,6 +12,10 @@ module ActionWebService # :nodoc: end class XmlRpcProtocol < AbstractProtocol # :nodoc: + def self.create(controller) + XmlRpcProtocol.new + end + def decode_action_pack_request(action_pack_request) service_name = action_pack_request.parameters['action'] decode_request(action_pack_request.raw_post, service_name) |