Class WS::Marshaling::SoapMarshaler
In: vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/soap_marshaling.rb
Parent: AbstractMarshaler

Methods

Attributes

registry  [R] 
type_namespace  [RW] 

Public Class methods

[Source]

    # File vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/soap_marshaling.rb, line 15
15:       def initialize(type_namespace='')
16:         @type_namespace = type_namespace
17:         @registry = SOAP::Mapping::Registry.new
18:         @spec2binding = {}
19:       end

Public Instance methods

[Source]

    # File vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/soap_marshaling.rb, line 21
21:       def marshal(param)
22:         annotate_arrays(param.info.data, param.value)
23:         if param.value.is_a?(Exception)
24:           detail = SOAP::Mapping::SOAPException.new(param.value)
25:           soap_obj = SOAP::SOAPFault.new(
26:             SOAP::SOAPString.new('Server'),
27:             SOAP::SOAPString.new(param.value.to_s),
28:             SOAP::SOAPString.new(self.class.name),
29:             SOAP::Mapping.obj2soap(detail))
30:         else
31:           soap_obj = SOAP::Mapping.obj2soap(param.value, @registry)
32:         end
33:         SoapForeignObject.new(param, soap_obj)
34:       end

[Source]

    # File vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/soap_marshaling.rb, line 52
52:       def register_type(spec)
53:         if @spec2binding.has_key?(spec)
54:           return @spec2binding[spec]
55:         end
56: 
57:         klass = BaseTypes.canonical_param_type_class(spec)
58:         if klass.is_a?(Array)
59:           type_class = klass[0]
60:         else
61:           type_class = klass
62:         end
63: 
64:         type_binding = nil
65:         if (mapping = @registry.find_mapped_soap_class(type_class) rescue nil)
66:           qname = mapping[2] ? mapping[2][:type] : nil
67:           qname ||= soap_base_type_name(mapping[0])
68:           type_binding = SoapBinding.new(self, qname, type_class, mapping)
69:         else
70:           qname = XSD::QName.new(@type_namespace, soap_type_name(type_class.name))
71:           @registry.add(type_class,
72:                         SOAP::SOAPStruct,
73:                         typed_struct_factory(type_class),
74:                         { :type => qname })
75:           mapping = @registry.find_mapped_soap_class(type_class)
76:           type_binding = SoapBinding.new(self, qname, type_class, mapping)
77:         end
78:         
79:         array_binding = nil
80:         if klass.is_a?(Array)
81:           array_mapping = @registry.find_mapped_soap_class(Array) rescue nil
82:           if (array_mapping && !array_mapping[1].is_a?(SoapTypedArrayFactory)) || array_mapping.nil?
83:             @registry.set(Array,
84:                           SOAP::SOAPArray,
85:                           SoapTypedArrayFactory.new)
86:             array_mapping = @registry.find_mapped_soap_class(Array)
87:           end
88:           qname = XSD::QName.new(@type_namespace, soap_type_name(type_class.name) + 'Array')
89:           array_binding = SoapBinding.new(self, qname, Array, array_mapping, type_binding)
90:         end
91: 
92:         @spec2binding[spec] = array_binding ? array_binding : type_binding
93:         @spec2binding[spec]
94:       end

[Source]

    # File vendor/actionwebservice/lib/action_web_service/vendor/ws/marshaling/soap_marshaling.rb, line 36
36:       def unmarshal(obj)
37:         param = obj.param
38:         soap_object = obj.soap_object
39:         soap_type = soap_object ? soap_object.type : nil
40:         value = soap_object ? SOAP::Mapping.soap2obj(soap_object, @registry) : nil
41:         param.value = value
42:         param.info.type = value.class
43:         mapping = @registry.find_mapped_soap_class(param.info.type) rescue nil
44:         if soap_type && soap_type.name == 'Array' && soap_type.namespace == SoapEncodingNS
45:           param.info.data = SoapBinding.new(self, soap_object.arytype, Array, mapping)
46:         else
47:           param.info.data = SoapBinding.new(self, soap_type, value.class, mapping)
48:         end
49:         param
50:       end

[Validate]