Files

Class Index [+]

Quicksearch

SOAP::Mapping::WSDLEncodedRegistry

Constants

MapKeyName
MapValueName

Attributes

definedelements[R]
definedtypes[R]

Public Class Methods

new(definedtypes = XSD::NamedElements::Empty) click to toggle source
    # File lib/soap/mapping/wsdlencodedregistry.rb, line 24
24:   def initialize(definedtypes = XSD::NamedElements::Empty)
25:     super()
26:     @definedtypes = definedtypes
27:     # @definedelements = definedelements  needed?
28:     # For mapping AnyType element.
29:     @rubytype_factory = RubytypeFactory.new(
30:       :allow_untyped_struct => true,
31:       :allow_original_mapping => true
32:     )
33:   end

Public Instance Methods

obj2soap(obj, qname = nil) click to toggle source
    # File lib/soap/mapping/wsdlencodedregistry.rb, line 35
35:   def obj2soap(obj, qname = nil)
36:     soap_obj = nil
37:     if type = @definedtypes[qname]
38:       soap_obj = obj2typesoap(obj, type)
39:     else
40:       soap_obj = any2soap(obj, qname)
41:     end
42:     return soap_obj if soap_obj
43:     if @excn_handler_obj2soap
44:       soap_obj = @excn_handler_obj2soap.call(obj) { |yield_obj|
45:         Mapping._obj2soap(yield_obj, self)
46:       }
47:       return soap_obj if soap_obj
48:     end
49:     if qname
50:       raise MappingError.new("cannot map #{obj.class.name} as #{qname}")
51:     else
52:       raise MappingError.new("cannot map #{obj.class.name} to SOAP/OM")
53:     end
54:   end
soap2obj(node, obj_class = nil) click to toggle source

map anything for now: must refer WSDL while mapping. [ToDo]

    # File lib/soap/mapping/wsdlencodedregistry.rb, line 57
57:   def soap2obj(node, obj_class = nil)
58:     cause = nil
59:     begin
60:       unless obj_class
61:         typestr = Mapping.safeconstname(node.elename.name)
62:         obj_class = Mapping.class_from_name(typestr)
63:       end
64:       return Mapping._soap2obj(node, Mapping::DefaultRegistry, obj_class)
65:     rescue MappingError
66:       cause = $!
67:     end
68:     if @excn_handler_soap2obj
69:       begin
70:         return @excn_handler_soap2obj.call(node) { |yield_node|
71:             Mapping._soap2obj(yield_node, self)
72:           }
73:       rescue Exception
74:       end
75:     end
76:     raise MappingError.new("cannot map #{node.type.name} to Ruby object", cause)
77:   end

Private Instance Methods

any2soap(obj, qname) click to toggle source
    # File lib/soap/mapping/wsdlencodedregistry.rb, line 81
81:   def any2soap(obj, qname)
82:     ele = nil
83:     if obj.nil?
84:       ele = SOAPNil.new
85:     elsif qname.nil? or qname == XSD::AnyTypeName
86:       ele = @rubytype_factory.obj2soap(nil, obj, nil, self)
87:     elsif obj.is_a?(XSD::NSDBase)
88:       ele = soap2soap(obj, qname)
89:     elsif type = TypeMap[qname]
90:       ele = base2soap(obj, type)
91:     end
92:     add_attributes2soap(obj, ele) unless ele.nil?
93:     ele
94:   end
array2soap(obj, type_qname, type) click to toggle source
     # File lib/soap/mapping/wsdlencodedregistry.rb, line 166
166:   def array2soap(obj, type_qname, type)
167:     return SOAPNil.new if obj.nil?      # ToDo: check nillable.
168:     arytype = type.child_type
169:     soap_obj = SOAPArray.new(ValueArrayName, 1, arytype)
170:     unless obj.nil?
171:       mark_marshalled_obj(obj, soap_obj)
172:       obj.each do |item|
173:         soap_obj.add(Mapping._obj2soap(item, self, arytype))
174:       end
175:     end
176:     soap_obj
177:   end
complexobj2soap(obj, type) click to toggle source
     # File lib/soap/mapping/wsdlencodedregistry.rb, line 140
140:   def complexobj2soap(obj, type)
141:     case type.compoundtype
142:     when :TYPE_STRUCT
143:       struct2soap(obj, type.name, type)
144:     when :TYPE_ARRAY
145:       array2soap(obj, type.name, type)
146:     when :TYPE_MAP
147:       map2soap(obj, type.name, type)
148:     when :TYPE_SIMPLE
149:       simpleobj2soap(obj, type.simplecontent)
150:     when :TYPE_EMPTY
151:       raise MappingError.new("should be empty") unless obj.nil?
152:       SOAPNil.new
153:     else
154:       raise MappingError.new("unknown compound type: #{type.compoundtype}")
155:     end
156:   end
elements2soap(obj, soap_obj, elements) click to toggle source
     # File lib/soap/mapping/wsdlencodedregistry.rb, line 199
199:   def elements2soap(obj, soap_obj, elements)
200:     elements.each do |element|
201:       name = element.name.name
202:       child_obj = Mapping.get_attribute(obj, name)
203:       soap_obj.add(name,
204:         Mapping._obj2soap(child_obj, self, element.type || element.name))
205:     end
206:   end
map2soap(obj, type_qname, type) click to toggle source
     # File lib/soap/mapping/wsdlencodedregistry.rb, line 181
181:   def map2soap(obj, type_qname, type)
182:     return SOAPNil.new if obj.nil?      # ToDo: check nillable.
183:     keytype = type.child_type(MapKeyName) || XSD::AnyTypeName
184:     valuetype = type.child_type(MapValueName) || XSD::AnyTypeName
185:     soap_obj = SOAPStruct.new(MapQName)
186:     unless obj.nil?
187:       mark_marshalled_obj(obj, soap_obj)
188:       obj.each do |key, value|
189:         elem = SOAPStruct.new
190:         elem.add("key", Mapping._obj2soap(key, self, keytype))
191:         elem.add("value", Mapping._obj2soap(value, self, valuetype))
192:         # ApacheAxis allows only 'item' here.
193:         soap_obj.add("item", elem)
194:       end
195:     end
196:     soap_obj
197:   end
obj2typesoap(obj, type) click to toggle source
     # File lib/soap/mapping/wsdlencodedregistry.rb, line 117
117:   def obj2typesoap(obj, type)
118:     if type.is_a?(::WSDL::XMLSchema::SimpleType)
119:       simpleobj2soap(obj, type)
120:     else
121:       complexobj2soap(obj, type)
122:     end
123:   end
simpleobj2soap(obj, type) click to toggle source
     # File lib/soap/mapping/wsdlencodedregistry.rb, line 125
125:   def simpleobj2soap(obj, type)
126:     type.check_lexical_format(obj)
127:     return SOAPNil.new if obj.nil?      # TODO: check nillable.
128:     if type.base
129:       ele = base2soap(obj, TypeMap[type.base])
130:       ele.type = type.name
131:     elsif type.list
132:       value = obj.is_a?(Array) ? obj.join(" ") : obj.to_s
133:       ele = base2soap(value, SOAP::SOAPString)
134:     else
135:       raise MappingError.new("unsupported simpleType: #{type}")
136:     end
137:     ele
138:   end
soap2soap(obj, type_qname) click to toggle source
     # File lib/soap/mapping/wsdlencodedregistry.rb, line 96
 96:   def soap2soap(obj, type_qname)
 97:     if obj.is_a?(SOAPBasetype)
 98:       obj
 99:     elsif obj.is_a?(SOAPStruct) && (type = @definedtypes[type_qname])
100:       soap_obj = obj
101:       mark_marshalled_obj(obj, soap_obj)
102:       elements2soap(obj, soap_obj, type.elements)
103:       soap_obj
104:     elsif obj.is_a?(SOAPArray) && (type = @definedtypes[type_qname])
105:       soap_obj = obj
106:       contenttype = type.child_type
107:       mark_marshalled_obj(obj, soap_obj)
108:       obj.replace do |ele|
109:         Mapping._obj2soap(ele, self, contenttype)
110:       end
111:       soap_obj
112:     else
113:       nil
114:     end
115:   end
struct2soap(obj, type_qname, type) click to toggle source
     # File lib/soap/mapping/wsdlencodedregistry.rb, line 158
158:   def struct2soap(obj, type_qname, type)
159:     return SOAPNil.new if obj.nil?      # ToDo: check nillable.
160:     soap_obj = SOAPStruct.new(type_qname)
161:     mark_marshalled_obj(obj, soap_obj)
162:     elements2soap(obj, soap_obj, type.elements)
163:     soap_obj
164:   end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.