| Class | SOAP::RPC::SOAPMethod |
| In: |
lib/soap/rpc/element.rb
|
| Parent: | SOAPStruct |
| RETVAL | = | 'retval' |
| IN | = | 'in' |
| OUT | = | 'out' |
| INOUT | = | 'inout' |
| inparam | [R] | |
| outparam | [R] | |
| param_def | [R] | |
| retval_class_name | [R] | |
| retval_name | [R] |
# File lib/soap/rpc/element.rb, line 162
162: def SOAPMethod.create_doc_param_def(req_qnames, res_qnames)
163: req_qnames = [req_qnames] if req_qnames.is_a?(XSD::QName)
164: res_qnames = [res_qnames] if res_qnames.is_a?(XSD::QName)
165: param_def = []
166: req_qnames.each do |qname|
167: param_def << [IN, qname.name, [nil, qname.namespace, qname.name]]
168: end
169: res_qnames.each do |qname|
170: param_def << [OUT, qname.name, [nil, qname.namespace, qname.name]]
171: end
172: param_def
173: end
# File lib/soap/rpc/element.rb, line 153
153: def SOAPMethod.create_rpc_param_def(param_names)
154: param_def = []
155: param_names.each do |param_name|
156: param_def.push([IN, param_name, nil])
157: end
158: param_def.push([RETVAL, 'return', nil])
159: param_def
160: end
# File lib/soap/rpc/element.rb, line 140
140: def SOAPMethod.derive_rpc_param_def(obj, name, *param)
141: if param.size == 1 and param[0].is_a?(Array)
142: return param[0]
143: end
144: if param.empty?
145: method = obj.method(name)
146: param_names = (1..method.arity.abs).collect { |i| "p#{i}" }
147: else
148: param_names = param
149: end
150: create_rpc_param_def(param_names)
151: end
# File lib/soap/rpc/element.rb, line 83
83: def initialize(qname, param_def = nil)
84: super(nil)
85: @elename = qname
86: @encodingstyle = nil
87:
88: @param_def = param_def
89:
90: @signature = []
91: @inparam_names = []
92: @inoutparam_names = []
93: @outparam_names = []
94:
95: @inparam = {}
96: @outparam = {}
97: @retval_name = nil
98: @retval_class_name = nil
99:
100: init_param(@param_def) if @param_def
101: end
# File lib/soap/rpc/element.rb, line 130
130: def SOAPMethod.param_count(param_def, *type)
131: count = 0
132: param_def.each do |io_type, name, param_type|
133: if type.include?(io_type)
134: count += 1
135: end
136: end
137: count
138: end
# File lib/soap/rpc/element.rb, line 103
103: def have_outparam?
104: @outparam_names.size > 0
105: end
# File lib/soap/rpc/element.rb, line 107
107: def input_params
108: collect_params(IN, INOUT)
109: end
# File lib/soap/rpc/element.rb, line 111
111: def output_params
112: collect_params(OUT, INOUT)
113: end
# File lib/soap/rpc/element.rb, line 123
123: def set_outparam(params)
124: params.each do |param, data|
125: @outparam[param] = data
126: data.elename.name = param
127: end
128: end
# File lib/soap/rpc/element.rb, line 115
115: def set_param(params)
116: params.each do |param, data|
117: @inparam[param] = data
118: data.elename.name = param
119: data.parent = self
120: end
121: end
# File lib/soap/rpc/element.rb, line 177
177: def collect_params(*type)
178: names = []
179: @signature.each do |io_type, name, param_type|
180: names << name if type.include?(io_type)
181: end
182: names
183: end
# File lib/soap/rpc/element.rb, line 185
185: def init_param(param_def)
186: param_def.each do |io_type, name, param_type|
187: case io_type
188: when IN
189: @signature.push([IN, name, param_type])
190: @inparam_names.push(name)
191: when OUT
192: @signature.push([OUT, name, param_type])
193: @outparam_names.push(name)
194: when INOUT
195: @signature.push([INOUT, name, param_type])
196: @inoutparam_names.push(name)
197: when RETVAL
198: if @retval_name
199: raise MethodDefinitionError.new('duplicated retval')
200: end
201: @retval_name = name
202: @retval_class_name = nil
203: if param_type
204: if param_type[0].is_a?(String)
205: @retval_class_name = Mapping.class_from_name(param_type[0])
206: else
207: @retval_class_name = param_type[0]
208: end
209: end
210: else
211: raise MethodDefinitionError.new("unknown type: #{io_type}")
212: end
213: end
214: end