aboutsummaryrefslogtreecommitdiffstats
path: root/actionwebservice/lib/action_web_service/protocol
diff options
context:
space:
mode:
Diffstat (limited to 'actionwebservice/lib/action_web_service/protocol')
-rw-r--r--actionwebservice/lib/action_web_service/protocol/abstract.rb3
-rw-r--r--actionwebservice/lib/action_web_service/protocol/discovery.rb4
-rw-r--r--actionwebservice/lib/action_web_service/protocol/soap_protocol.rb16
-rw-r--r--actionwebservice/lib/action_web_service/protocol/soap_protocol/marshaler.rb12
-rw-r--r--actionwebservice/lib/action_web_service/protocol/xmlrpc_protocol.rb4
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)