Class | SOAP::WSDLDriverFactory |
In: |
lib/soap/wsdlDriver.rb
|
Parent: | Object |
wsdl | [R] |
# File lib/soap/wsdlDriver.rb, line 27 27: def initialize(wsdl) 28: @wsdl = import(wsdl) 29: @methoddefcreator = WSDL::SOAP::MethodDefCreator.new(@wsdl) 30: end
depricated old interface
# File lib/soap/wsdlDriver.rb, line 45 45: def create_driver(servicename = nil, portname = nil) 46: warn("WSDLDriverFactory#create_driver is depricated. Use create_rpc_driver instead.") 47: port = find_port(servicename, portname) 48: WSDLDriver.new(@wsdl, port, nil) 49: end
# File lib/soap/wsdlDriver.rb, line 36 36: def create_rpc_driver(servicename = nil, portname = nil) 37: port = find_port(servicename, portname) 38: drv = SOAP::RPC::Driver.new(port.soap_address.location) 39: init_driver(drv, port) 40: add_operation(drv, port) 41: drv 42: end
# File lib/soap/wsdlDriver.rb, line 95 95: def add_operation(drv, port) 96: port.find_binding.operations.each do |op_bind| 97: op_name = op_bind.soapoperation_name 98: soapaction = op_bind.soapaction || '' 99: orgname = op_name.name 100: name = XSD::CodeGen::GenSupport.safemethodname(orgname) 101: param_def = create_param_def(op_bind) 102: opt = { 103: :request_style => op_bind.soapoperation_style, 104: :response_style => op_bind.soapoperation_style, 105: :request_use => op_bind.input.soapbody_use, 106: :response_use => op_bind.output.soapbody_use, 107: :elementformdefault => false, 108: :attributeformdefault => false 109: } 110: if op_bind.soapoperation_style == :rpc 111: drv.add_rpc_operation(op_name, soapaction, name, param_def, opt) 112: else 113: drv.add_document_operation(soapaction, name, param_def, opt) 114: end 115: if orgname != name and orgname.capitalize == name.capitalize 116: ::SOAP::Mapping.define_singleton_method(drv, orgname) do |*arg| 117: __send__(name, *arg) 118: end 119: end 120: end 121: end
# File lib/soap/wsdlDriver.rb, line 127 127: def create_param_def(op_bind) 128: op = op_bind.find_operation 129: if op_bind.soapoperation_style == :rpc 130: param_def = @methoddefcreator.collect_rpcparameter(op) 131: else 132: param_def = @methoddefcreator.collect_documentparameter(op) 133: end 134: # the first element of typedef in param_def is a String like 135: # "::SOAP::SOAPStruct". turn this String to a class. 136: param_def.collect { |io, name, typedef| 137: typedef[0] = Mapping.class_from_name(typedef[0]) 138: [io, name, typedef] 139: } 140: end
# File lib/soap/wsdlDriver.rb, line 154 154: def filter_parts(partsdef, partssource) 155: parts = partsdef.split(/\s+/) 156: partssource.find_all { |part| parts.include?(part.name) } 157: end
# File lib/soap/wsdlDriver.rb, line 56 56: def find_port(servicename = nil, portname = nil) 57: service = port = nil 58: if servicename 59: service = @wsdl.service( 60: XSD::QName.new(@wsdl.targetnamespace, servicename)) 61: else 62: service = @wsdl.services[0] 63: end 64: if service.nil? 65: raise FactoryError.new("service #{servicename} not found in WSDL") 66: end 67: if portname 68: port = service.ports[XSD::QName.new(@wsdl.targetnamespace, portname)] 69: if port.nil? 70: raise FactoryError.new("port #{portname} not found in WSDL") 71: end 72: else 73: port = service.ports.find { |port| !port.soap_address.nil? } 74: if port.nil? 75: raise FactoryError.new("no ports have soap:address") 76: end 77: end 78: if port.soap_address.nil? 79: raise FactoryError.new("soap:address element not found in WSDL") 80: end 81: port 82: end
# File lib/soap/wsdlDriver.rb, line 123 123: def import(location) 124: WSDL::Importer.import(location) 125: end
# File lib/soap/wsdlDriver.rb, line 84 84: def init_driver(drv, port) 85: wsdl_elements = @wsdl.collect_elements 86: wsdl_types = @wsdl.collect_complextypes + @wsdl.collect_simpletypes 87: rpc_decode_typemap = wsdl_types + 88: @wsdl.soap_rpc_complextypes(port.find_binding) 89: drv.proxy.mapping_registry = 90: Mapping::WSDLEncodedRegistry.new(rpc_decode_typemap) 91: drv.proxy.literal_mapping_registry = 92: Mapping::WSDLLiteralRegistry.new(wsdl_types, wsdl_elements) 93: end
# File lib/soap/wsdlDriver.rb, line 150 150: def param_def(type, name, klass, partqname) 151: [type, name, [klass, partqname.namespace, partqname.name]] 152: end