soap4r_es 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/wsdl2ruby.rb +140 -0
- data/bin/wsdl2ruby_rails.rb +140 -0
- data/bin/xsd2ruby.rb +92 -0
- data/lib/soap/attachment.rb +109 -0
- data/lib/soap/attrproxy.rb +35 -0
- data/lib/soap/baseData.rb +1095 -0
- data/lib/soap/element.rb +278 -0
- data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
- data/lib/soap/encodingstyle/handler.rb +121 -0
- data/lib/soap/encodingstyle/literalHandler.rb +196 -0
- data/lib/soap/encodingstyle/soapHandler.rb +560 -0
- data/lib/soap/filter/filterchain.rb +52 -0
- data/lib/soap/filter/handler.rb +32 -0
- data/lib/soap/filter/streamhandler.rb +30 -0
- data/lib/soap/filter.rb +14 -0
- data/lib/soap/generator.rb +299 -0
- data/lib/soap/header/handler.rb +64 -0
- data/lib/soap/header/handlerset.rb +78 -0
- data/lib/soap/header/mappinghandler.rb +48 -0
- data/lib/soap/header/simplehandler.rb +45 -0
- data/lib/soap/httpconfigloader.rb +140 -0
- data/lib/soap/mapping/encodedregistry.rb +541 -0
- data/lib/soap/mapping/factory.rb +389 -0
- data/lib/soap/mapping/literalregistry.rb +392 -0
- data/lib/soap/mapping/mapping.rb +577 -0
- data/lib/soap/mapping/registry.rb +297 -0
- data/lib/soap/mapping/rubytypeFactory.rb +446 -0
- data/lib/soap/mapping/schemadefinition.rb +171 -0
- data/lib/soap/mapping/typeMap.rb +107 -0
- data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
- data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
- data/lib/soap/mapping.rb +13 -0
- data/lib/soap/marshal.rb +60 -0
- data/lib/soap/mimemessage.rb +243 -0
- data/lib/soap/nestedexception.rb +43 -0
- data/lib/soap/netHttpClient.rb +242 -0
- data/lib/soap/ns.rb +39 -0
- data/lib/soap/parser.rb +253 -0
- data/lib/soap/processor.rb +67 -0
- data/lib/soap/property.rb +330 -0
- data/lib/soap/proxy.rb +15 -0
- data/lib/soap/rpc/cgistub.rb +249 -0
- data/lib/soap/rpc/driver.rb +222 -0
- data/lib/soap/rpc/element.rb +375 -0
- data/lib/soap/rpc/httpserver.rb +144 -0
- data/lib/soap/rpc/methodDef.rb +69 -0
- data/lib/soap/rpc/proxy.rb +573 -0
- data/lib/soap/rpc/router.rb +672 -0
- data/lib/soap/rpc/rpc.rb +26 -0
- data/lib/soap/rpc/soaplet.rb +201 -0
- data/lib/soap/rpc/standaloneServer.rb +44 -0
- data/lib/soap/soap.rb +163 -0
- data/lib/soap/streamHandler.rb +302 -0
- data/lib/soap/version.rb +12 -0
- data/lib/soap/wsdlDriver.rb +165 -0
- data/lib/wsdl/binding.rb +66 -0
- data/lib/wsdl/data.rb +65 -0
- data/lib/wsdl/definitions.rb +237 -0
- data/lib/wsdl/documentation.rb +33 -0
- data/lib/wsdl/import.rb +81 -0
- data/lib/wsdl/importer.rb +39 -0
- data/lib/wsdl/info.rb +51 -0
- data/lib/wsdl/message.rb +55 -0
- data/lib/wsdl/operation.rb +152 -0
- data/lib/wsdl/operationBinding.rb +241 -0
- data/lib/wsdl/param.rb +94 -0
- data/lib/wsdl/parser.rb +180 -0
- data/lib/wsdl/part.rb +53 -0
- data/lib/wsdl/port.rb +67 -0
- data/lib/wsdl/portType.rb +76 -0
- data/lib/wsdl/service.rb +62 -0
- data/lib/wsdl/soap/address.rb +41 -0
- data/lib/wsdl/soap/binding.rb +50 -0
- data/lib/wsdl/soap/body.rb +59 -0
- data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
- data/lib/wsdl/soap/classDefCreator.rb +529 -0
- data/lib/wsdl/soap/classDefCreatorSupport.rb +242 -0
- data/lib/wsdl/soap/classNameCreator.rb +57 -0
- data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
- data/lib/wsdl/soap/complexType.rb +174 -0
- data/lib/wsdl/soap/data.rb +43 -0
- data/lib/wsdl/soap/definitions.rb +201 -0
- data/lib/wsdl/soap/driverCreator.rb +121 -0
- data/lib/wsdl/soap/element.rb +34 -0
- data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
- data/lib/wsdl/soap/fault.rb +57 -0
- data/lib/wsdl/soap/header.rb +87 -0
- data/lib/wsdl/soap/headerfault.rb +57 -0
- data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
- data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
- data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +380 -0
- data/lib/wsdl/soap/methodDefCreator.rb +200 -0
- data/lib/wsdl/soap/operation.rb +113 -0
- data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
- data/lib/wsdl/soap/servletStubCreator.rb +105 -0
- data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
- data/lib/wsdl/soap/wsdl2ruby.rb +249 -0
- data/lib/wsdl/types.rb +45 -0
- data/lib/wsdl/wsdl.rb +25 -0
- data/lib/wsdl/xmlSchema/all.rb +25 -0
- data/lib/wsdl/xmlSchema/annotation.rb +35 -0
- data/lib/wsdl/xmlSchema/any.rb +62 -0
- data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
- data/lib/wsdl/xmlSchema/attribute.rb +105 -0
- data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
- data/lib/wsdl/xmlSchema/choice.rb +59 -0
- data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
- data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
- data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
- data/lib/wsdl/xmlSchema/complexType.rb +194 -0
- data/lib/wsdl/xmlSchema/content.rb +96 -0
- data/lib/wsdl/xmlSchema/data.rb +117 -0
- data/lib/wsdl/xmlSchema/element.rb +154 -0
- data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
- data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
- data/lib/wsdl/xmlSchema/group.rb +101 -0
- data/lib/wsdl/xmlSchema/import.rb +53 -0
- data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
- data/lib/wsdl/xmlSchema/importer.rb +103 -0
- data/lib/wsdl/xmlSchema/include.rb +48 -0
- data/lib/wsdl/xmlSchema/length.rb +38 -0
- data/lib/wsdl/xmlSchema/list.rb +49 -0
- data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
- data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/minlength.rb +38 -0
- data/lib/wsdl/xmlSchema/parser.rb +168 -0
- data/lib/wsdl/xmlSchema/pattern.rb +37 -0
- data/lib/wsdl/xmlSchema/ref.rb +34 -0
- data/lib/wsdl/xmlSchema/schema.rb +179 -0
- data/lib/wsdl/xmlSchema/sequence.rb +55 -0
- data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
- data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
- data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
- data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
- data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
- data/lib/wsdl/xmlSchema/union.rb +36 -0
- data/lib/wsdl/xmlSchema/unique.rb +35 -0
- data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
- data/lib/wsdl/xmlSchema/xsd2ruby.rb +177 -0
- data/lib/xsd/charset.rb +190 -0
- data/lib/xsd/codegen/classdef.rb +230 -0
- data/lib/xsd/codegen/commentdef.rb +35 -0
- data/lib/xsd/codegen/gensupport.rb +277 -0
- data/lib/xsd/codegen/methoddef.rb +71 -0
- data/lib/xsd/codegen/moduledef.rb +209 -0
- data/lib/xsd/codegen.rb +13 -0
- data/lib/xsd/datatypes.rb +1465 -0
- data/lib/xsd/datatypes1999.rb +21 -0
- data/lib/xsd/iconvcharset.rb +33 -0
- data/lib/xsd/mapping.rb +69 -0
- data/lib/xsd/namedelements.rb +133 -0
- data/lib/xsd/ns.rb +183 -0
- data/lib/xsd/qname.rb +80 -0
- data/lib/xsd/xmlparser/libxmlparser.rb +136 -0
- data/lib/xsd/xmlparser/nokogiriparser.rb +63 -0
- data/lib/xsd/xmlparser/ogaparser.rb +53 -0
- data/lib/xsd/xmlparser/oxparser.rb +97 -0
- data/lib/xsd/xmlparser/parser.rb +101 -0
- data/lib/xsd/xmlparser/rexmlparser.rb +54 -0
- data/lib/xsd/xmlparser.rb +81 -0
- metadata +240 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# SOAP4R - RPC element definition.
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'soap/baseData'
|
|
11
|
+
require 'soap/rpc/methodDef'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module SOAP
|
|
15
|
+
|
|
16
|
+
# Add method definitions for RPC to common definition in element.rb
|
|
17
|
+
class SOAPBody < SOAPStruct
|
|
18
|
+
public
|
|
19
|
+
|
|
20
|
+
def request
|
|
21
|
+
root_node
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def response
|
|
25
|
+
root = root_node
|
|
26
|
+
if !@is_fault
|
|
27
|
+
if root.nil?
|
|
28
|
+
nil
|
|
29
|
+
elsif root.is_a?(SOAPBasetype)
|
|
30
|
+
root
|
|
31
|
+
else
|
|
32
|
+
# Initial element is [retval].
|
|
33
|
+
root[0]
|
|
34
|
+
end
|
|
35
|
+
else
|
|
36
|
+
root
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def outparams
|
|
41
|
+
root = root_node
|
|
42
|
+
if !@is_fault and !root.nil? and !root.is_a?(SOAPBasetype)
|
|
43
|
+
op = root[1..-1]
|
|
44
|
+
op = nil if op && op.empty?
|
|
45
|
+
op
|
|
46
|
+
else
|
|
47
|
+
nil
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def fault
|
|
52
|
+
if @is_fault
|
|
53
|
+
self['fault']
|
|
54
|
+
else
|
|
55
|
+
nil
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def fault=(fault)
|
|
60
|
+
@is_fault = true
|
|
61
|
+
add('fault', fault)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
module RPC
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class RPCError < Error; end
|
|
70
|
+
class MethodDefinitionError < RPCError; end
|
|
71
|
+
class ParameterError < RPCError; end
|
|
72
|
+
|
|
73
|
+
class SOAPMethod < SOAPStruct
|
|
74
|
+
RETVAL = :retval
|
|
75
|
+
IN = :in
|
|
76
|
+
OUT = :out
|
|
77
|
+
INOUT = :inout
|
|
78
|
+
|
|
79
|
+
attr_reader :param_def
|
|
80
|
+
attr_reader :inparam
|
|
81
|
+
attr_reader :outparam
|
|
82
|
+
attr_reader :retval_name
|
|
83
|
+
attr_reader :retval_class_name
|
|
84
|
+
|
|
85
|
+
def initialize(qname, param_def = nil)
|
|
86
|
+
super(nil)
|
|
87
|
+
@elename = qname
|
|
88
|
+
@encodingstyle = nil
|
|
89
|
+
|
|
90
|
+
@param_def = param_def
|
|
91
|
+
|
|
92
|
+
@signature = []
|
|
93
|
+
@inparam_names = []
|
|
94
|
+
@inoutparam_names = []
|
|
95
|
+
@outparam_names = []
|
|
96
|
+
|
|
97
|
+
@inparam = {}
|
|
98
|
+
@outparam = {}
|
|
99
|
+
@retval_name = nil
|
|
100
|
+
@retval_class_name = nil
|
|
101
|
+
|
|
102
|
+
init_params(@param_def) if @param_def
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def have_member
|
|
106
|
+
true
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def have_outparam?
|
|
110
|
+
@outparam_names.size > 0
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def input_params
|
|
114
|
+
collect_params(IN, INOUT)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def output_params
|
|
118
|
+
collect_params(OUT, INOUT)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def input_param_types
|
|
122
|
+
collect_param_types(IN, INOUT)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def output_param_types
|
|
126
|
+
collect_param_types(OUT, INOUT)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def set_param(params)
|
|
130
|
+
params.each do |param, data|
|
|
131
|
+
@inparam[param] = data
|
|
132
|
+
data.elename = XSD::QName.new(data.elename.namespace, param)
|
|
133
|
+
data.parent = self
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def set_outparam(params)
|
|
138
|
+
params.each do |param, data|
|
|
139
|
+
@outparam[param] = data
|
|
140
|
+
data.elename = XSD::QName.new(data.elename.namespace, param)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def get_paramtypes(names)
|
|
145
|
+
types = []
|
|
146
|
+
@signature.each do |io_type, name, type_qname|
|
|
147
|
+
if type_qname && idx = names.index(name)
|
|
148
|
+
types[idx] = type_qname
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
types
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def SOAPMethod.param_count(param_def, *type)
|
|
155
|
+
count = 0
|
|
156
|
+
param_def.each do |param|
|
|
157
|
+
param = MethodDef.to_param(param)
|
|
158
|
+
if type.include?(param.io_type.to_sym)
|
|
159
|
+
count += 1
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
count
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def SOAPMethod.derive_rpc_param_def(obj, name, *param)
|
|
166
|
+
if param.size == 1 and param[0].is_a?(Array)
|
|
167
|
+
return param[0]
|
|
168
|
+
end
|
|
169
|
+
if param.empty?
|
|
170
|
+
method = obj.method(name)
|
|
171
|
+
param_names = (1..method.arity.abs).collect { |i| "p#{i}" }
|
|
172
|
+
else
|
|
173
|
+
param_names = param
|
|
174
|
+
end
|
|
175
|
+
create_rpc_param_def(param_names)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def SOAPMethod.create_rpc_param_def(param_names)
|
|
179
|
+
param_def = []
|
|
180
|
+
param_names.each do |param_name|
|
|
181
|
+
param_def.push([IN, param_name, nil])
|
|
182
|
+
end
|
|
183
|
+
param_def.push([RETVAL, 'return', nil])
|
|
184
|
+
param_def
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def SOAPMethod.create_doc_param_def(req_qnames, res_qnames)
|
|
188
|
+
req_qnames = [req_qnames] if req_qnames.is_a?(XSD::QName)
|
|
189
|
+
res_qnames = [res_qnames] if res_qnames.is_a?(XSD::QName)
|
|
190
|
+
param_def = []
|
|
191
|
+
# req_qnames and res_qnames can be nil
|
|
192
|
+
if req_qnames
|
|
193
|
+
req_qnames.each do |qname|
|
|
194
|
+
param_def << [IN, qname.name, [nil, qname.namespace, qname.name]]
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
if res_qnames
|
|
198
|
+
res_qnames.each do |qname|
|
|
199
|
+
param_def << [OUT, qname.name, [nil, qname.namespace, qname.name]]
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
param_def
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
private
|
|
206
|
+
|
|
207
|
+
def collect_param_types(*type)
|
|
208
|
+
names = []
|
|
209
|
+
@signature.each do |io_type, name, type_qname|
|
|
210
|
+
names << type_qname if type.include?(io_type)
|
|
211
|
+
end
|
|
212
|
+
names
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def collect_params(*type)
|
|
216
|
+
names = []
|
|
217
|
+
@signature.each do |io_type, name, type_qname|
|
|
218
|
+
names << name if type.include?(io_type)
|
|
219
|
+
end
|
|
220
|
+
names
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def init_params(param_def)
|
|
224
|
+
param_def.each do |param|
|
|
225
|
+
param = MethodDef.to_param(param)
|
|
226
|
+
init_param(param)
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def init_param(param)
|
|
231
|
+
mapped_class = SOAPMethod.parse_mapped_class(param.mapped_class)
|
|
232
|
+
qname = param.qname
|
|
233
|
+
if qname.nil? and mapped_class
|
|
234
|
+
qname = TypeMap.respond_to?(:key) ? TypeMap.key(mapped_class) : TypeMap.index(mapped_class) # RubyJedi: compatible with Ruby 1.8.6 and above
|
|
235
|
+
end
|
|
236
|
+
case param.io_type
|
|
237
|
+
when IN
|
|
238
|
+
@signature.push([IN, param.name, qname])
|
|
239
|
+
@inparam_names.push(param.name)
|
|
240
|
+
when OUT
|
|
241
|
+
@signature.push([OUT, param.name, qname])
|
|
242
|
+
@outparam_names.push(param.name)
|
|
243
|
+
when INOUT
|
|
244
|
+
@signature.push([INOUT, param.name, qname])
|
|
245
|
+
@inoutparam_names.push(param.name)
|
|
246
|
+
when RETVAL
|
|
247
|
+
if @retval_name
|
|
248
|
+
raise MethodDefinitionError.new('duplicated retval')
|
|
249
|
+
end
|
|
250
|
+
@retval_name = param.name
|
|
251
|
+
@retval_class_name = mapped_class
|
|
252
|
+
else
|
|
253
|
+
raise MethodDefinitionError.new("unknown type: #{param.io_type}")
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def self.parse_mapped_class(mapped_class)
|
|
258
|
+
# the first element of typedef in param_def can be a String like
|
|
259
|
+
# "::SOAP::SOAPStruct" or "CustomClass[]". turn this String to a class if
|
|
260
|
+
# we can.
|
|
261
|
+
if mapped_class.is_a?(String)
|
|
262
|
+
if /\[\]\Z/ =~ mapped_class
|
|
263
|
+
# when '[]' is added, ignore this.
|
|
264
|
+
mapped_class = nil
|
|
265
|
+
else
|
|
266
|
+
mapped_class = Mapping.class_from_name(mapped_class)
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
mapped_class
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
class SOAPMethodRequest < SOAPMethod
|
|
275
|
+
attr_accessor :soapaction
|
|
276
|
+
|
|
277
|
+
def SOAPMethodRequest.create_request(qname, *params)
|
|
278
|
+
param_def = []
|
|
279
|
+
param_value = []
|
|
280
|
+
i = 0
|
|
281
|
+
params.each do |param|
|
|
282
|
+
param_name = "p#{i}"
|
|
283
|
+
i += 1
|
|
284
|
+
param_def << [IN, param_name, nil]
|
|
285
|
+
param_value << [param_name, param]
|
|
286
|
+
end
|
|
287
|
+
param_def << [RETVAL, 'return', nil]
|
|
288
|
+
o = new(qname, param_def)
|
|
289
|
+
o.set_param(param_value)
|
|
290
|
+
o
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
def initialize(qname, param_def = nil, soapaction = nil)
|
|
294
|
+
super(qname, param_def)
|
|
295
|
+
@soapaction = soapaction
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
def each
|
|
299
|
+
input_params.each do |name|
|
|
300
|
+
unless @inparam[name]
|
|
301
|
+
raise ParameterError.new("parameter: #{name} was not given")
|
|
302
|
+
end
|
|
303
|
+
yield(name, @inparam[name])
|
|
304
|
+
end
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
def dup
|
|
308
|
+
req = self.class.new(@elename.dup, @param_def, @soapaction)
|
|
309
|
+
req.encodingstyle = @encodingstyle
|
|
310
|
+
req
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
def create_method_response(response_name = nil)
|
|
314
|
+
response_name ||=
|
|
315
|
+
XSD::QName.new(@elename.namespace, @elename.name + 'Response')
|
|
316
|
+
SOAPMethodResponse.new(response_name, @param_def)
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
class SOAPMethodResponse < SOAPMethod
|
|
322
|
+
|
|
323
|
+
def initialize(qname, param_def = nil)
|
|
324
|
+
super(qname, param_def)
|
|
325
|
+
@retval = nil
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
def retval
|
|
329
|
+
@retval
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
def retval=(retval)
|
|
333
|
+
@retval = retval
|
|
334
|
+
@retval.elename = @retval.elename.dup_name(@retval_name || 'return')
|
|
335
|
+
retval.parent = self
|
|
336
|
+
retval
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
def each
|
|
340
|
+
if @retval_name and !@retval.is_a?(SOAPVoid)
|
|
341
|
+
yield(@retval_name, @retval)
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
output_params.each do |name|
|
|
345
|
+
unless @outparam[name]
|
|
346
|
+
raise ParameterError.new("parameter: #{name} was not given")
|
|
347
|
+
end
|
|
348
|
+
yield(name, @outparam[name])
|
|
349
|
+
end
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
# To return(?) void explicitly.
|
|
355
|
+
# def foo(input_var)
|
|
356
|
+
# ...
|
|
357
|
+
# return SOAP::RPC::SOAPVoid.new
|
|
358
|
+
# end
|
|
359
|
+
class SOAPVoid < XSD::XSDAnySimpleType
|
|
360
|
+
include SOAPBasetype
|
|
361
|
+
extend SOAPModuleUtils
|
|
362
|
+
Name = XSD::QName.new(Mapping::RubyCustomTypeNamespace, nil)
|
|
363
|
+
|
|
364
|
+
public
|
|
365
|
+
def initialize()
|
|
366
|
+
@elename = Name
|
|
367
|
+
@id = nil
|
|
368
|
+
@precedents = []
|
|
369
|
+
@parent = nil
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
end
|
|
375
|
+
end
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# SOAP4R - WEBrick HTTP Server
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'logger'
|
|
11
|
+
require 'logger-application' unless defined?(Logger::Application)
|
|
12
|
+
require 'soap/attrproxy'
|
|
13
|
+
require 'soap/rpc/soaplet'
|
|
14
|
+
require 'soap/streamHandler'
|
|
15
|
+
require 'webrick'
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
module SOAP
|
|
19
|
+
module RPC
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class HTTPServer < Logger::Application
|
|
23
|
+
include AttrProxy
|
|
24
|
+
|
|
25
|
+
attr_reader :server
|
|
26
|
+
attr_accessor :default_namespace
|
|
27
|
+
|
|
28
|
+
attr_proxy :mapping_registry, true
|
|
29
|
+
attr_proxy :literal_mapping_registry, true
|
|
30
|
+
attr_proxy :generate_explicit_type, true
|
|
31
|
+
attr_proxy :use_default_namespace, true
|
|
32
|
+
|
|
33
|
+
def initialize(config)
|
|
34
|
+
actor = config[:SOAPHTTPServerApplicationName] || self.class.name
|
|
35
|
+
super(actor)
|
|
36
|
+
@default_namespace = config[:SOAPDefaultNamespace]
|
|
37
|
+
@webrick_config = config.dup
|
|
38
|
+
self.level = Logger::Severity::ERROR # keep silent by default
|
|
39
|
+
@webrick_config[:Logger] ||= @log
|
|
40
|
+
@log = @webrick_config[:Logger] # sync logger of App and HTTPServer
|
|
41
|
+
@router = ::SOAP::RPC::Router.new(actor)
|
|
42
|
+
@soaplet = ::SOAP::RPC::SOAPlet.new(@router)
|
|
43
|
+
on_init
|
|
44
|
+
@server = WEBrick::HTTPServer.new(@webrick_config)
|
|
45
|
+
@server.mount('/soaprouter', @soaplet)
|
|
46
|
+
if wsdldir = config[:WSDLDocumentDirectory]
|
|
47
|
+
@server.mount('/wsdl', WEBrick::HTTPServlet::FileHandler, wsdldir)
|
|
48
|
+
end
|
|
49
|
+
@server.mount('/', @soaplet)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def on_init
|
|
53
|
+
# do extra initialization in a derived class if needed.
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def status
|
|
57
|
+
@server.status if @server
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def shutdown
|
|
61
|
+
@server.shutdown if @server
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def authenticator
|
|
65
|
+
@soaplet.authenticator
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def authenticator=(authenticator)
|
|
69
|
+
@soaplet.authenticator = authenticator
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# servant entry interface
|
|
73
|
+
|
|
74
|
+
def add_rpc_request_servant(factory, namespace = @default_namespace)
|
|
75
|
+
@router.add_rpc_request_servant(factory, namespace)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def add_rpc_servant(obj, namespace = @default_namespace)
|
|
79
|
+
@router.add_rpc_servant(obj, namespace)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def add_request_headerhandler(factory)
|
|
83
|
+
@router.add_request_headerhandler(factory)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def add_headerhandler(obj)
|
|
87
|
+
@router.add_headerhandler(obj)
|
|
88
|
+
end
|
|
89
|
+
alias add_rpc_headerhandler add_headerhandler
|
|
90
|
+
|
|
91
|
+
def filterchain
|
|
92
|
+
@router.filterchain
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# method entry interface
|
|
96
|
+
|
|
97
|
+
def add_rpc_method(obj, name, *param)
|
|
98
|
+
add_rpc_method_as(obj, name, name, *param)
|
|
99
|
+
end
|
|
100
|
+
alias add_method add_rpc_method
|
|
101
|
+
|
|
102
|
+
def add_rpc_method_as(obj, name, name_as, *param)
|
|
103
|
+
qname = XSD::QName.new(@default_namespace, name_as)
|
|
104
|
+
soapaction = nil
|
|
105
|
+
param_def = SOAPMethod.derive_rpc_param_def(obj, name, *param)
|
|
106
|
+
@router.add_rpc_operation(obj, qname, soapaction, name, param_def)
|
|
107
|
+
end
|
|
108
|
+
alias add_method_as add_rpc_method_as
|
|
109
|
+
|
|
110
|
+
def add_document_method(obj, soapaction, name, req_qnames, res_qnames)
|
|
111
|
+
param_def = SOAPMethod.create_doc_param_def(req_qnames, res_qnames)
|
|
112
|
+
@router.add_document_operation(obj, soapaction, name, param_def)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def add_rpc_operation(receiver, qname, soapaction, name, param_def, opt = {})
|
|
116
|
+
@router.add_rpc_operation(receiver, qname, soapaction, name, param_def, opt)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def add_rpc_request_operation(factory, qname, soapaction, name, param_def, opt = {})
|
|
120
|
+
@router.add_rpc_request_operation(factory, qname, soapaction, name, param_def, opt)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def add_document_operation(receiver, soapaction, name, param_def, opt = {})
|
|
124
|
+
@router.add_document_operation(receiver, soapaction, name, param_def, opt)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def add_document_request_operation(factory, soapaction, name, param_def, opt = {})
|
|
128
|
+
@router.add_document_request_operation(factory, soapaction, name, param_def, opt)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
private
|
|
132
|
+
|
|
133
|
+
def attrproxy
|
|
134
|
+
@router
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def run
|
|
138
|
+
@server.start
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
end
|
|
144
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# SOAP4R - A method definition
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
module SOAP
|
|
11
|
+
module RPC
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class MethodDef
|
|
15
|
+
attr_reader :name
|
|
16
|
+
attr_reader :soapaction
|
|
17
|
+
attr_reader :qname
|
|
18
|
+
attr_accessor :style
|
|
19
|
+
attr_accessor :inputuse
|
|
20
|
+
attr_accessor :outputuse
|
|
21
|
+
attr_reader :parameters
|
|
22
|
+
attr_reader :faults
|
|
23
|
+
|
|
24
|
+
def initialize(name, soapaction, qname)
|
|
25
|
+
@name = name
|
|
26
|
+
@soapaction = soapaction
|
|
27
|
+
@qname = qname
|
|
28
|
+
@style = @inputuse = @outputuse = nil
|
|
29
|
+
@parameters = []
|
|
30
|
+
@faults = {}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def add_parameter(io_type, name, qname, mapped_class)
|
|
34
|
+
@parameters << Parameter.new(io_type, name, qname, mapped_class)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.to_param(param)
|
|
38
|
+
if param.respond_to?(:io_type)
|
|
39
|
+
param
|
|
40
|
+
else
|
|
41
|
+
io_type, name, param_type = param
|
|
42
|
+
mapped_class_str, nsdef, namedef = param_type
|
|
43
|
+
if nsdef && namedef
|
|
44
|
+
qname = XSD::QName.new(nsdef, namedef)
|
|
45
|
+
else
|
|
46
|
+
qname = nil
|
|
47
|
+
end
|
|
48
|
+
MethodDef::Parameter.new(io_type.to_sym, name, qname, mapped_class_str)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
class Parameter
|
|
53
|
+
attr_reader :io_type
|
|
54
|
+
attr_reader :name
|
|
55
|
+
attr_reader :qname
|
|
56
|
+
attr_reader :mapped_class
|
|
57
|
+
|
|
58
|
+
def initialize(io_type, name, qname, mapped_class)
|
|
59
|
+
@io_type = io_type
|
|
60
|
+
@name = name
|
|
61
|
+
@qname = qname
|
|
62
|
+
@mapped_class = mapped_class
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
end
|