Files

Class Index [+]

Quicksearch

SOAP::Mapping::WSDLLiteralRegistry

Attributes

definedelements[R]
definedtypes[R]

Public Class Methods

new(definedtypes = XSD::NamedElements::Empty, definedelements = XSD::NamedElements::Empty) click to toggle source
    # File lib/soap/mapping/wsdlliteralregistry.rb, line 25
25:   def initialize(definedtypes = XSD::NamedElements::Empty,
26:       definedelements = XSD::NamedElements::Empty)
27:     super()
28:     @definedtypes = definedtypes
29:     @definedelements = definedelements
30:   end

Public Instance Methods

obj2soap(obj, qname, obj_class = nil) click to toggle source
    # File lib/soap/mapping/wsdlliteralregistry.rb, line 32
32:   def obj2soap(obj, qname, obj_class = nil)
33:     soap_obj = nil
34:     if obj.is_a?(SOAPElement)
35:       soap_obj = obj
36:     elsif eledef = @definedelements[qname]
37:       soap_obj = obj2elesoap(obj, eledef)
38:     elsif type = @definedtypes[qname]
39:       soap_obj = obj2typesoap(obj, type)
40:     else
41:       soap_obj = any2soap(obj, qname, obj_class)
42:     end
43:     return soap_obj if soap_obj
44:     if @excn_handler_obj2soap
45:       soap_obj = @excn_handler_obj2soap.call(obj) { |yield_obj|
46:         Mapping.obj2soap(yield_obj, nil, nil, MAPPING_OPT)
47:       }
48:       return soap_obj if soap_obj
49:     end
50:     raise MappingError.new("cannot map #{obj.class.name} as #{qname}")
51:   end
soap2obj(node, obj_class = nil) click to toggle source

node should be a SOAPElement

    # File lib/soap/mapping/wsdlliteralregistry.rb, line 54
54:   def soap2obj(node, obj_class = nil)
55:     cause = nil
56:     begin
57:       return any2obj(node, obj_class)
58:     rescue MappingError
59:       cause = $!
60:     end
61:     if @excn_handler_soap2obj
62:       begin
63:         return @excn_handler_soap2obj.call(node) { |yield_node|
64:             Mapping.soap2obj(yield_node, nil, nil, MAPPING_OPT)
65:           }
66:       rescue Exception
67:       end
68:     end
69:     if node.respond_to?(:type)
70:       raise MappingError.new("cannot map #{node.type.name} to Ruby object", cause)
71:     else
72:       raise MappingError.new("cannot map #{node.elename.name} to Ruby object", cause)
73:     end
74:   end

Private Instance Methods

add_definedattributes2soap(obj, ele, typedef) click to toggle source
     # File lib/soap/mapping/wsdlliteralregistry.rb, line 231
231:   def add_definedattributes2soap(obj, ele, typedef)
232:     if typedef.attributes
233:       typedef.attributes.each do |at|
234:         value = get_xmlattr_value(obj, at.name)
235:         ele.extraattr[at.name] = value unless value.nil?
236:       end
237:     end
238:   end
complexobj2sequencesoap(obj, soap, type, nillable, is_choice) click to toggle source
     # File lib/soap/mapping/wsdlliteralregistry.rb, line 138
138:   def complexobj2sequencesoap(obj, soap, type, nillable, is_choice)
139:     added = false
140:     type.elements.each do |child_ele|
141:       case child_ele
142:       when WSDL::XMLSchema::Any
143:         any = Mapping.get_attributes_for_any(obj)
144:         SOAPElement.from_objs(any).each do |child|
145:           soap.add(child)
146:         end
147:         ele_added = true
148:       when WSDL::XMLSchema::Element
149:         ele_added = complexobj2soapchildren(obj, soap, child_ele, nillable)
150:       when WSDL::XMLSchema::Sequence
151:         ele_added = complexobj2sequencesoap(obj, soap, child_ele, nillable, false)
152:       when WSDL::XMLSchema::Choice
153:         ele_added = complexobj2sequencesoap(obj, soap, child_ele, true, true)
154:       else
155:         raise MappingError.new("unknown type: #{child_ele}")
156:       end
157:       added = true if ele_added
158:       break if is_choice and ele_added
159:     end
160:     added
161:   end
complexobj2soap(obj, type) click to toggle source
     # File lib/soap/mapping/wsdlliteralregistry.rb, line 132
132:   def complexobj2soap(obj, type)
133:     ele = SOAPElement.new(type.name)
134:     complexobj2sequencesoap(obj, ele, type, type.choice?, type.choice?)
135:     ele
136:   end
complexobj2soapchildren(obj, soap, child_ele, nillable = false) click to toggle source
     # File lib/soap/mapping/wsdlliteralregistry.rb, line 163
163:   def complexobj2soapchildren(obj, soap, child_ele, nillable = false)
164:     if child_ele.map_as_array?
165:       complexobj2soapchildren_array(obj, soap, child_ele, nillable)
166:     else
167:       complexobj2soapchildren_single(obj, soap, child_ele, nillable)
168:     end
169:   end
complexobj2soapchildren_array(obj, soap, child_ele, nillable) click to toggle source
     # File lib/soap/mapping/wsdlliteralregistry.rb, line 171
171:   def complexobj2soapchildren_array(obj, soap, child_ele, nillable)
172:     child = Mapping.get_attribute(obj, child_ele.name.name)
173:     if child.nil? and obj.is_a?(::Array)
174:       child = obj
175:     end
176:     if child.nil?
177:       return false if nillable
178:       if child_soap = nil2soap(child_ele)
179:         soap.add(child_soap)
180:         return true
181:       else
182:         return false
183:       end
184:     end
185:     unless child.respond_to?(:each)
186:       return false
187:     end
188:     child.each do |item|
189:       if item.is_a?(SOAPElement)
190:         soap.add(item)
191:       else
192:         child_soap = obj2elesoap(item, child_ele)
193:         soap.add(child_soap)
194:       end
195:     end
196:     true
197:   end
complexobj2soapchildren_single(obj, soap, child_ele, nillable) click to toggle source
     # File lib/soap/mapping/wsdlliteralregistry.rb, line 199
199:   def complexobj2soapchildren_single(obj, soap, child_ele, nillable)
200:     child = Mapping.get_attribute(obj, child_ele.name.name)
201:     case child
202:     when NilClass
203:       return false if nillable
204:       if child_soap = nil2soap(child_ele)
205:         soap.add(child_soap)
206:         true
207:       else
208:         false
209:       end
210:     when SOAPElement
211:       soap.add(child)
212:       true
213:     else
214:       child_soap = obj2elesoap(child, child_ele)
215:       soap.add(child_soap)
216:       true
217:     end
218:   end
nil2soap(ele) click to toggle source
     # File lib/soap/mapping/wsdlliteralregistry.rb, line 220
220:   def nil2soap(ele)
221:     if ele.nillable
222:       obj2elesoap(nil, ele)     # add an empty element
223:     elsif ele.minoccurs == 0
224:       nil       # intends no element
225:     else
226:       warn("nil not allowed: #{ele.name.name}")
227:       nil
228:     end
229:   end
obj2elesoap(obj, eledef) click to toggle source
     # File lib/soap/mapping/wsdlliteralregistry.rb, line 78
 78:   def obj2elesoap(obj, eledef)
 79:     ele = nil
 80:     qualified = (eledef.elementform == 'qualified')
 81:     if obj.is_a?(SOAPNil)
 82:       ele = obj
 83:     elsif eledef.type
 84:       if type = @definedtypes[eledef.type]
 85:         ele = obj2typesoap(obj, type)
 86:       elsif type = TypeMap[eledef.type]
 87:         ele = base2soap(obj, type)
 88:       else
 89:         raise MappingError.new("cannot find type #{eledef.type}")
 90:       end
 91:     elsif eledef.local_complextype
 92:       ele = obj2typesoap(obj, eledef.local_complextype)
 93:     elsif eledef.local_simpletype
 94:       ele = obj2typesoap(obj, eledef.local_simpletype)
 95:     else
 96:       raise MappingError.new('illegal schema?')
 97:     end
 98:     ele.elename = eledef.name
 99:     ele.qualified = qualified
100:     ele
101:   end
obj2typesoap(obj, type) click to toggle source
     # File lib/soap/mapping/wsdlliteralregistry.rb, line 103
103:   def obj2typesoap(obj, type)
104:     ele = nil
105:     if type.is_a?(::WSDL::XMLSchema::SimpleType)
106:       ele = simpleobj2soap(obj, type)
107:     else # complexType
108:       if type.simplecontent
109:         ele = simpleobj2soap(obj, type.simplecontent)
110:       else
111:         ele = complexobj2soap(obj, type)
112:       end
113:       add_definedattributes2soap(obj, ele, type)
114:     end
115:     ele
116:   end
simpleobj2soap(obj, type) click to toggle source
     # File lib/soap/mapping/wsdlliteralregistry.rb, line 118
118:   def simpleobj2soap(obj, type)
119:     type.check_lexical_format(obj)
120:     return SOAPNil.new if obj.nil?
121:     if type.base
122:       ele = base2soap(obj, TypeMap[type.base])
123:     elsif type.list
124:       value = obj.is_a?(Array) ? obj.join(" ") : obj.to_s
125:       ele = base2soap(value, SOAP::SOAPString)
126:     else
127:       raise MappingError.new("unsupported simpleType: #{type}")
128:     end
129:     ele
130:   end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.