# 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
# 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
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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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.
Generated with the Darkfish Rdoc Generator 1.1.6.