Class | WSDL::Definitions |
In: |
lib/wsdl/soap/definitions.rb
lib/wsdl/definitions.rb |
Parent: | Info |
importedschema | [R] | |
imports | [R] | |
location | [RW] | |
name | [R] | |
targetnamespace | [R] |
# File lib/wsdl/soap/definitions.rb, line 26 26: def self.array_complextype 27: type = XMLSchema::ComplexType.new(::SOAP::ValueArrayName) 28: type.complexcontent = XMLSchema::ComplexContent.new 29: type.complexcontent.base = ::SOAP::ValueArrayName 30: attr = XMLSchema::Attribute.new 31: attr.ref = ::SOAP::AttrArrayTypeName 32: anytype = XSD::AnyTypeName.dup 33: anytype.name += '[]' 34: attr.arytype = anytype 35: type.complexcontent.attributes << attr 36: type 37: end
# File lib/wsdl/soap/definitions.rb, line 62 62: def self.exception_complextype 63: type = XMLSchema::ComplexType.new(XSD::QName.new( 64: ::SOAP::Mapping::RubyCustomTypeNamespace, 'SOAPException')) 65: excn_name = XMLSchema::Element.new(XSD::QName.new(nil, 'excn_type_name'), XSD::XSDString::Type) 66: cause = XMLSchema::Element.new(XSD::QName.new(nil, 'cause'), XSD::AnyTypeName) 67: backtrace = XMLSchema::Element.new(XSD::QName.new(nil, 'backtrace'), ::SOAP::ValueArrayName) 68: message = XMLSchema::Element.new(XSD::QName.new(nil, 'message'), XSD::XSDString::Type) 69: type.all_elements = [excn_name, cause, backtrace, message] 70: type 71: end
# File lib/wsdl/soap/definitions.rb, line 49 49: def self.fault_complextype 50: type = XMLSchema::ComplexType.new(::SOAP::EleFaultName) 51: faultcode = XMLSchema::Element.new(::SOAP::EleFaultCodeName, XSD::XSDQName::Type) 52: faultstring = XMLSchema::Element.new(::SOAP::EleFaultStringName, XSD::XSDString::Type) 53: faultactor = XMLSchema::Element.new(::SOAP::EleFaultActorName, XSD::XSDAnyURI::Type) 54: faultactor.minoccurs = 0 55: detail = XMLSchema::Element.new(::SOAP::EleFaultDetailName, XSD::AnyTypeName) 56: detail.minoccurs = 0 57: type.all_elements = [faultcode, faultstring, faultactor, detail] 58: type.final = 'extension' 59: type 60: end
# File lib/wsdl/definitions.rb, line 24 24: def initialize 25: super 26: @name = nil 27: @targetnamespace = nil 28: @location = nil 29: @importedschema = {} 30: 31: @types = nil 32: @imports = [] 33: @messages = XSD::NamedElements.new 34: @porttypes = XSD::NamedElements.new 35: @bindings = XSD::NamedElements.new 36: @services = XSD::NamedElements.new 37: 38: @anontypes = XSD::NamedElements.new 39: @root = self 40: end
# File lib/wsdl/definitions.rb, line 237 237: def self.parse_element(element) 238: if element == DefinitionsName 239: Definitions.new 240: else 241: nil 242: end 243: end
# File lib/wsdl/soap/definitions.rb, line 18 18: def self.soap_rpc_complextypes 19: types = XSD::NamedElements.new 20: types << array_complextype 21: types << fault_complextype 22: types << exception_complextype 23: types 24: end
ToDo: simpletype must be accepted…
# File lib/wsdl/definitions.rb, line 106 106: def add_type(complextype) 107: @anontypes << complextype 108: end
# File lib/wsdl/definitions.rb, line 162 162: def binding(name) 163: binding = @bindings[name] 164: return binding if binding 165: @imports.each do |import| 166: binding = import.content.binding(name) if self.class === import.content 167: return binding if binding 168: end 169: nil 170: end
# File lib/wsdl/definitions.rb, line 126 126: def bindings 127: result = @bindings.dup 128: @imports.each do |import| 129: result.concat(import.content.bindings) if self.class === import.content 130: end 131: result 132: end
# File lib/wsdl/definitions.rb, line 53 53: def collect_attributes 54: result = XSD::NamedElements.new 55: if @types 56: @types.schemas.each do |schema| 57: result.concat(schema.collect_attributes) 58: end 59: end 60: @imports.each do |import| 61: result.concat(import.content.collect_attributes) 62: end 63: result 64: end
# File lib/wsdl/definitions.rb, line 79 79: def collect_complextypes 80: result = @anontypes.dup 81: if @types 82: @types.schemas.each do |schema| 83: result.concat(schema.collect_complextypes) 84: end 85: end 86: @imports.each do |import| 87: result.concat(import.content.collect_complextypes) 88: end 89: result 90: end
# File lib/wsdl/definitions.rb, line 66 66: def collect_elements 67: result = XSD::NamedElements.new 68: if @types 69: @types.schemas.each do |schema| 70: result.concat(schema.collect_elements) 71: end 72: end 73: @imports.each do |import| 74: result.concat(import.content.collect_elements) 75: end 76: result 77: end
# File lib/wsdl/soap/definitions.rb, line 78 78: def collect_faulttypes 79: result = [] 80: collect_fault_messages.each do |name| 81: faultparts = message(name).parts 82: if faultparts.size != 1 83: raise RuntimeError.new("expecting fault message to have only 1 part") 84: end 85: if result.index(faultparts[0].type).nil? 86: result << faultparts[0].type 87: end 88: end 89: result 90: end
# File lib/wsdl/definitions.rb, line 92 92: def collect_simpletypes 93: result = XSD::NamedElements.new 94: if @types 95: @types.schemas.each do |schema| 96: result.concat(schema.collect_simpletypes) 97: end 98: end 99: @imports.each do |import| 100: result.concat(import.content.collect_simpletypes) 101: end 102: result 103: end
# File lib/wsdl/definitions.rb, line 42 42: def inspect 43: sprintf("#<%s:0x%x %s>", self.class.name, __id__, @name || '(unnamed)') 44: end
# File lib/wsdl/definitions.rb, line 142 142: def message(name) 143: message = @messages[name] 144: return message if message 145: @imports.each do |import| 146: message = import.content.message(name) if self.class === import.content 147: return message if message 148: end 149: nil 150: end
# File lib/wsdl/definitions.rb, line 110 110: def messages 111: result = @messages.dup 112: @imports.each do |import| 113: result.concat(import.content.messages) if self.class === import.content 114: end 115: result 116: end
# File lib/wsdl/definitions.rb, line 226 226: def parse_attr(attr, value) 227: case attr 228: when NameAttrName 229: @name = XSD::QName.new(targetnamespace, value.source) 230: when TargetNamespaceAttrName 231: self.targetnamespace = value.source 232: else 233: nil 234: end 235: end
# File lib/wsdl/definitions.rb, line 192 192: def parse_element(element) 193: case element 194: when ImportName 195: o = Import.new 196: @imports << o 197: o 198: when TypesName 199: o = Types.new 200: @types = o 201: o 202: when MessageName 203: o = Message.new 204: @messages << o 205: o 206: when PortTypeName 207: o = PortType.new 208: @porttypes << o 209: o 210: when BindingName 211: o = Binding.new 212: @bindings << o 213: o 214: when ServiceName 215: o = Service.new 216: @services << o 217: o 218: when DocumentationName 219: o = Documentation.new 220: o 221: else 222: nil 223: end 224: end
# File lib/wsdl/definitions.rb, line 152 152: def porttype(name) 153: porttype = @porttypes[name] 154: return porttype if porttype 155: @imports.each do |import| 156: porttype = import.content.porttype(name) if self.class === import.content 157: return porttype if porttype 158: end 159: nil 160: end
# File lib/wsdl/definitions.rb, line 182 182: def porttype_binding(name) 183: binding = @bindings.find { |item| item.type == name } 184: return binding if binding 185: @imports.each do |import| 186: binding = import.content.porttype_binding(name) if self.class === import.content 187: return binding if binding 188: end 189: nil 190: end
# File lib/wsdl/definitions.rb, line 118 118: def porttypes 119: result = @porttypes.dup 120: @imports.each do |import| 121: result.concat(import.content.porttypes) if self.class === import.content 122: end 123: result 124: end
# File lib/wsdl/definitions.rb, line 172 172: def service(name) 173: service = @services[name] 174: return service if service 175: @imports.each do |import| 176: service = import.content.service(name) if self.class === import.content 177: return service if service 178: end 179: nil 180: end
# File lib/wsdl/definitions.rb, line 134 134: def services 135: result = @services.dup 136: @imports.each do |import| 137: result.concat(import.content.services) if self.class === import.content 138: end 139: result 140: end
# File lib/wsdl/soap/definitions.rb, line 73 73: def soap_rpc_complextypes(binding) 74: types = rpc_operation_complextypes(binding) 75: types + self.class.soap_rpc_complextypes 76: end
# File lib/wsdl/definitions.rb, line 46 46: def targetnamespace=(targetnamespace) 47: @targetnamespace = targetnamespace 48: if @name 49: @name = XSD::QName.new(@targetnamespace, @name.name) 50: end 51: end
# File lib/wsdl/soap/definitions.rb, line 94 94: def collect_fault_messages 95: result = [] 96: porttypes.each do |porttype| 97: porttype.operations.each do |operation| 98: operation.fault.each do |fault| 99: if result.index(fault.message).nil? 100: result << fault.message 101: end 102: end 103: end 104: end 105: result 106: end
# File lib/wsdl/soap/definitions.rb, line 134 134: def elements_from_message(message) 135: message.parts.collect { |part| 136: if part.element 137: collect_elements[part.element] 138: elsif part.name.nil? or part.type.nil? 139: raise RuntimeError.new("part of a message must be an element or typed") 140: else 141: qname = XSD::QName.new(nil, part.name) 142: XMLSchema::Element.new(qname, part.type) 143: end 144: } 145: end
# File lib/wsdl/soap/definitions.rb, line 130 130: def op_bind_rpc?(op_bind) 131: op_bind.soapoperation_style == :rpc 132: end
# File lib/wsdl/soap/definitions.rb, line 108 108: def rpc_operation_complextypes(binding) 109: types = XSD::NamedElements.new 110: binding.operations.each do |op_bind| 111: if op_bind_rpc?(op_bind) 112: operation = op_bind.find_operation 113: if op_bind.input 114: type = XMLSchema::ComplexType.new(op_bind.soapoperation_name) 115: message = messages[operation.input.message] 116: type.sequence_elements = elements_from_message(message) 117: types << type 118: end 119: if op_bind.output 120: type = XMLSchema::ComplexType.new(operation.outputname) 121: message = messages[operation.output.message] 122: type.sequence_elements = elements_from_message(message) 123: types << type 124: end 125: end 126: end 127: types 128: end