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,249 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# SOAP4R - CGI/mod_ruby stub library
|
|
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/streamHandler'
|
|
11
|
+
require 'webrick/httpresponse'
|
|
12
|
+
require 'webrick/httpstatus'
|
|
13
|
+
require 'logger'
|
|
14
|
+
require 'logger-application' unless defined?(Logger::Application)
|
|
15
|
+
require 'soap/rpc/soaplet'
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
module SOAP
|
|
19
|
+
module RPC
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
###
|
|
23
|
+
# SYNOPSIS
|
|
24
|
+
# CGIStub.new
|
|
25
|
+
#
|
|
26
|
+
# DESCRIPTION
|
|
27
|
+
# To be written...
|
|
28
|
+
#
|
|
29
|
+
class CGIStub < Logger::Application
|
|
30
|
+
include SOAP
|
|
31
|
+
include WEBrick
|
|
32
|
+
|
|
33
|
+
class SOAPRequest
|
|
34
|
+
attr_reader :body
|
|
35
|
+
|
|
36
|
+
def [](var); end
|
|
37
|
+
|
|
38
|
+
def meta_vars; end
|
|
39
|
+
|
|
40
|
+
EMPTY_COOKIES = [].freeze
|
|
41
|
+
def cookies; EMPTY_COOKIES; end
|
|
42
|
+
|
|
43
|
+
def user; end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class SOAPStdinRequest < SOAPRequest
|
|
47
|
+
attr_reader :body
|
|
48
|
+
|
|
49
|
+
def initialize(stream)
|
|
50
|
+
size = ENV['CONTENT_LENGTH'].to_i || 0
|
|
51
|
+
@body = stream.read(size)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def [](var)
|
|
55
|
+
ENV[var.gsub(/-/, '_').upcase]
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def meta_vars
|
|
59
|
+
{
|
|
60
|
+
'HTTP_SOAPACTION' => ENV['HTTP_SOAPACTION']
|
|
61
|
+
}
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def cookies
|
|
65
|
+
if cookie = ENV['HTTP_Cookie'] || ENV['Cookie']
|
|
66
|
+
[WEBrick::Cookie.parse(cookie)]
|
|
67
|
+
else
|
|
68
|
+
EMPTY_COOKIES
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def user
|
|
73
|
+
ENV['REMOTE_USER']
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
class SOAPFCGIRequest < SOAPRequest
|
|
78
|
+
attr_reader :body
|
|
79
|
+
|
|
80
|
+
def initialize(request)
|
|
81
|
+
@request = request
|
|
82
|
+
@body = @request.in.read
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def [](var)
|
|
86
|
+
@request.env[var.gsub(/-/, '_').upcase]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def meta_vars
|
|
90
|
+
{
|
|
91
|
+
'HTTP_SOAPACTION' => @request.env['HTTP_SOAPACTION']
|
|
92
|
+
}
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def cookies
|
|
96
|
+
if cookie = @request.env['HTTP_Cookie'] || @request.env['Cookie']
|
|
97
|
+
[WEBrick::Cookie.parse(cookie)]
|
|
98
|
+
else
|
|
99
|
+
EMPTY_COOKIES
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def user
|
|
104
|
+
@request.env['REMOTE_USER']
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def initialize(appname, default_namespace)
|
|
109
|
+
super(appname)
|
|
110
|
+
set_log(STDERR)
|
|
111
|
+
self.level = ERROR
|
|
112
|
+
@default_namespace = default_namespace
|
|
113
|
+
@remote_host = ENV['REMOTE_HOST'] || ENV['REMOTE_ADDR'] || 'unknown'
|
|
114
|
+
@router = ::SOAP::RPC::Router.new(self.class.name)
|
|
115
|
+
@soaplet = ::SOAP::RPC::SOAPlet.new(@router)
|
|
116
|
+
on_init
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def on_init
|
|
120
|
+
# do extra initialization in a derived class if needed.
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def mapping_registry
|
|
124
|
+
@router.mapping_registry
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def mapping_registry=(mapping_registry)
|
|
128
|
+
@router.mapping_registry = mapping_registry
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def literal_mapping_registry
|
|
132
|
+
@router.literal_mapping_registry
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def literal_mapping_registry=(literal_mapping_registry)
|
|
136
|
+
@router.literal_mapping_registry = literal_mapping_registry
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def generate_explicit_type
|
|
140
|
+
@router.generate_explicit_type
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def generate_explicit_type=(generate_explicit_type)
|
|
144
|
+
@router.generate_explicit_type = generate_explicit_type
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# servant entry interface
|
|
148
|
+
|
|
149
|
+
def add_rpc_servant(obj, namespace = @default_namespace)
|
|
150
|
+
@router.add_rpc_servant(obj, namespace)
|
|
151
|
+
end
|
|
152
|
+
alias add_servant add_rpc_servant
|
|
153
|
+
|
|
154
|
+
def add_headerhandler(obj)
|
|
155
|
+
@router.add_headerhandler(obj)
|
|
156
|
+
end
|
|
157
|
+
alias add_rpc_headerhandler add_headerhandler
|
|
158
|
+
|
|
159
|
+
def filterchain
|
|
160
|
+
@router.filterchain
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# method entry interface
|
|
164
|
+
|
|
165
|
+
def add_rpc_method(obj, name, *param)
|
|
166
|
+
add_rpc_method_with_namespace_as(@default_namespace, obj, name, name, *param)
|
|
167
|
+
end
|
|
168
|
+
alias add_method add_rpc_method
|
|
169
|
+
|
|
170
|
+
def add_rpc_method_as(obj, name, name_as, *param)
|
|
171
|
+
add_rpc_method_with_namespace_as(@default_namespace, obj, name, name_as, *param)
|
|
172
|
+
end
|
|
173
|
+
alias add_method_as add_rpc_method_as
|
|
174
|
+
|
|
175
|
+
def add_rpc_method_with_namespace(namespace, obj, name, *param)
|
|
176
|
+
add_rpc_method_with_namespace_as(namespace, obj, name, name, *param)
|
|
177
|
+
end
|
|
178
|
+
alias add_method_with_namespace add_rpc_method_with_namespace
|
|
179
|
+
|
|
180
|
+
def add_rpc_method_with_namespace_as(namespace, obj, name, name_as, *param)
|
|
181
|
+
qname = XSD::QName.new(namespace, name_as)
|
|
182
|
+
soapaction = nil
|
|
183
|
+
param_def = SOAPMethod.derive_rpc_param_def(obj, name, *param)
|
|
184
|
+
@router.add_rpc_operation(obj, qname, soapaction, name, param_def)
|
|
185
|
+
end
|
|
186
|
+
alias add_method_with_namespace_as add_rpc_method_with_namespace_as
|
|
187
|
+
|
|
188
|
+
def add_rpc_operation(receiver, qname, soapaction, name, param_def, opt = {})
|
|
189
|
+
@router.add_rpc_operation(receiver, qname, soapaction, name, param_def, opt)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def add_document_operation(receiver, soapaction, name, param_def, opt = {})
|
|
193
|
+
@router.add_document_operation(receiver, soapaction, name, param_def, opt)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def set_fcgi_request(request)
|
|
197
|
+
@fcgi = request
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
private
|
|
201
|
+
|
|
202
|
+
HTTPVersion = WEBrick::HTTPVersion.new('1.0') # dummy; ignored
|
|
203
|
+
|
|
204
|
+
def run
|
|
205
|
+
res = WEBrick::HTTPResponse.new({:HTTPVersion => HTTPVersion})
|
|
206
|
+
begin
|
|
207
|
+
@log.info { "received a request from '#{ @remote_host }'" }
|
|
208
|
+
if @fcgi
|
|
209
|
+
req = SOAPFCGIRequest.new(@fcgi)
|
|
210
|
+
else
|
|
211
|
+
req = SOAPStdinRequest.new($stdin)
|
|
212
|
+
end
|
|
213
|
+
@soaplet.do_POST(req, res)
|
|
214
|
+
rescue HTTPStatus::EOFError, HTTPStatus::RequestTimeout => ex
|
|
215
|
+
res.set_error(ex)
|
|
216
|
+
rescue HTTPStatus::Error => ex
|
|
217
|
+
res.set_error(ex)
|
|
218
|
+
rescue HTTPStatus::Status => ex
|
|
219
|
+
res.status = ex.code
|
|
220
|
+
rescue StandardError, NameError => ex # for Ruby 1.6
|
|
221
|
+
res.set_error(ex, true)
|
|
222
|
+
ensure
|
|
223
|
+
if defined?(MOD_RUBY)
|
|
224
|
+
r = Apache.request
|
|
225
|
+
r.status = res.status
|
|
226
|
+
r.content_type = res.content_type
|
|
227
|
+
r.send_http_header
|
|
228
|
+
buf = res.body
|
|
229
|
+
else
|
|
230
|
+
buf = ''
|
|
231
|
+
res.send_response(buf)
|
|
232
|
+
buf.sub!(/^[^\r]+\r\n/, '') # Trim status line.
|
|
233
|
+
end
|
|
234
|
+
@log.debug { "SOAP CGI Response:\n#{ buf }" }
|
|
235
|
+
if @fcgi
|
|
236
|
+
@fcgi.out.print buf
|
|
237
|
+
@fcgi.finish
|
|
238
|
+
@fcgi = nil
|
|
239
|
+
else
|
|
240
|
+
print buf
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
0
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
end
|
|
249
|
+
end
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# SOAP4R - SOAP RPC driver
|
|
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/soap'
|
|
11
|
+
require 'soap/attrproxy'
|
|
12
|
+
require 'soap/mapping'
|
|
13
|
+
require 'soap/rpc/rpc'
|
|
14
|
+
require 'soap/rpc/proxy'
|
|
15
|
+
require 'soap/rpc/element'
|
|
16
|
+
require 'soap/streamHandler'
|
|
17
|
+
require 'soap/property'
|
|
18
|
+
require 'soap/header/handlerset'
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
module SOAP
|
|
22
|
+
module RPC
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class Driver
|
|
26
|
+
include AttrProxy
|
|
27
|
+
|
|
28
|
+
attr_proxy :endpoint_url, true
|
|
29
|
+
attr_proxy :mapping_registry, true
|
|
30
|
+
attr_proxy :literal_mapping_registry, true
|
|
31
|
+
attr_proxy :allow_unqualified_element, true
|
|
32
|
+
attr_proxy :default_encodingstyle, true
|
|
33
|
+
attr_proxy :generate_explicit_type, true
|
|
34
|
+
attr_proxy :use_default_namespace, true
|
|
35
|
+
attr_proxy :return_response_as_xml, true
|
|
36
|
+
attr_proxy :headerhandler
|
|
37
|
+
attr_proxy :filterchain
|
|
38
|
+
attr_proxy :streamhandler
|
|
39
|
+
attr_proxy :test_loopback_response
|
|
40
|
+
attr_proxy :reset_stream
|
|
41
|
+
|
|
42
|
+
attr_reader :proxy
|
|
43
|
+
attr_reader :options
|
|
44
|
+
attr_accessor :soapaction
|
|
45
|
+
|
|
46
|
+
def inspect
|
|
47
|
+
"#<#{self.class}:#{@proxy.inspect}>"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def httpproxy
|
|
51
|
+
options["protocol.http.proxy"]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def httpproxy=(httpproxy)
|
|
55
|
+
options["protocol.http.proxy"] = httpproxy
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def wiredump_dev
|
|
59
|
+
options["protocol.http.wiredump_dev"]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def wiredump_dev=(wiredump_dev)
|
|
63
|
+
options["protocol.http.wiredump_dev"] = wiredump_dev
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def mandatorycharset
|
|
67
|
+
options["protocol.mandatorycharset"]
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def mandatorycharset=(mandatorycharset)
|
|
71
|
+
options["protocol.mandatorycharset"] = mandatorycharset
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def wiredump_file_base
|
|
75
|
+
options["protocol.wiredump_file_base"]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def wiredump_file_base=(wiredump_file_base)
|
|
79
|
+
options["protocol.wiredump_file_base"] = wiredump_file_base
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def initialize(endpoint_url, namespace = nil, soapaction = nil)
|
|
83
|
+
@namespace = namespace
|
|
84
|
+
@soapaction = soapaction
|
|
85
|
+
@options = setup_options
|
|
86
|
+
@wiredump_file_base = nil
|
|
87
|
+
@proxy = Proxy.new(endpoint_url, @soapaction, @options)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def loadproperty(propertyname)
|
|
91
|
+
unless options.loadproperty(propertyname)
|
|
92
|
+
raise LoadError.new("No such property to load -- #{propertyname}")
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def add_rpc_method(name, *params)
|
|
97
|
+
add_rpc_method_with_soapaction_as(name, name, @soapaction, *params)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def add_rpc_method_as(name, name_as, *params)
|
|
101
|
+
add_rpc_method_with_soapaction_as(name, name_as, @soapaction, *params)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def add_rpc_method_with_soapaction(name, soapaction, *params)
|
|
105
|
+
add_rpc_method_with_soapaction_as(name, name, soapaction, *params)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def add_rpc_method_with_soapaction_as(name, name_as, soapaction, *params)
|
|
109
|
+
param_def = SOAPMethod.create_rpc_param_def(params)
|
|
110
|
+
qname = XSD::QName.new(@namespace, name_as)
|
|
111
|
+
@proxy.add_rpc_method(qname, soapaction, name, param_def)
|
|
112
|
+
add_rpc_method_interface(name, param_def)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# add_method is for shortcut of typical rpc/encoded method definition.
|
|
116
|
+
alias add_method add_rpc_method
|
|
117
|
+
alias add_method_as add_rpc_method_as
|
|
118
|
+
alias add_method_with_soapaction add_rpc_method_with_soapaction
|
|
119
|
+
alias add_method_with_soapaction_as add_rpc_method_with_soapaction_as
|
|
120
|
+
|
|
121
|
+
def add_document_method(name, soapaction, req_qname, res_qname)
|
|
122
|
+
param_def = SOAPMethod.create_doc_param_def(req_qname, res_qname)
|
|
123
|
+
@proxy.add_document_method(soapaction, name, param_def)
|
|
124
|
+
add_document_method_interface(name, param_def)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def add_rpc_operation(qname, soapaction, name, param_def, opt = {})
|
|
128
|
+
@proxy.add_rpc_operation(qname, soapaction, name, param_def, opt)
|
|
129
|
+
add_rpc_method_interface(name, param_def)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def add_document_operation(soapaction, name, param_def, opt = {})
|
|
133
|
+
@proxy.add_document_operation(soapaction, name, param_def, opt)
|
|
134
|
+
add_document_method_interface(name, param_def)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def invoke(headers, body)
|
|
138
|
+
if headers and !headers.is_a?(SOAPHeader)
|
|
139
|
+
headers = create_header(headers)
|
|
140
|
+
end
|
|
141
|
+
set_wiredump_file_base(body.elename.name)
|
|
142
|
+
env = @proxy.invoke(headers, body)
|
|
143
|
+
if env.nil?
|
|
144
|
+
return nil, nil
|
|
145
|
+
else
|
|
146
|
+
return env.header, env.body
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def call(name, *params)
|
|
151
|
+
set_wiredump_file_base(name)
|
|
152
|
+
@proxy.call(name, *params)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
private
|
|
156
|
+
|
|
157
|
+
def attrproxy
|
|
158
|
+
@proxy
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def set_wiredump_file_base(name)
|
|
162
|
+
if @wiredump_file_base
|
|
163
|
+
@proxy.set_wiredump_file_base("#{@wiredump_file_base}_#{name}")
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def create_header(headers)
|
|
168
|
+
header = SOAPHeader.new()
|
|
169
|
+
headers.each do |content, mustunderstand, encodingstyle|
|
|
170
|
+
header.add(SOAPHeaderItem.new(content, mustunderstand, encodingstyle))
|
|
171
|
+
end
|
|
172
|
+
header
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def setup_options
|
|
176
|
+
if opt = Property.loadproperty(::SOAP::PropertyName)
|
|
177
|
+
opt = opt["client"]
|
|
178
|
+
end
|
|
179
|
+
opt ||= Property.new
|
|
180
|
+
opt.add_hook("protocol.mandatorycharset") do |key, value|
|
|
181
|
+
@proxy.mandatorycharset = value
|
|
182
|
+
end
|
|
183
|
+
opt.add_hook("protocol.wiredump_file_base") do |key, value|
|
|
184
|
+
@wiredump_file_base = value
|
|
185
|
+
end
|
|
186
|
+
opt["protocol.http.charset"] ||= XSD::Charset.xml_encoding_label
|
|
187
|
+
opt["protocol.http.proxy"] ||= Env::HTTP_PROXY
|
|
188
|
+
opt["protocol.http.no_proxy"] ||= Env::NO_PROXY
|
|
189
|
+
opt
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def add_rpc_method_interface(name, param_def)
|
|
193
|
+
param_count = RPC::SOAPMethod.param_count(param_def,
|
|
194
|
+
RPC::SOAPMethod::IN, RPC::SOAPMethod::INOUT)
|
|
195
|
+
add_method_interface(name, param_count)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def add_document_method_interface(name, param_def)
|
|
199
|
+
param_count = RPC::SOAPMethod.param_count(param_def, RPC::SOAPMethod::IN)
|
|
200
|
+
add_method_interface(name, param_count)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Mapping.define_singleton_method calls define_method with proc and it
|
|
204
|
+
# exhausts much memory for each singleton Object. just instance_eval instead
|
|
205
|
+
# of it.
|
|
206
|
+
def add_method_interface(name, param_count)
|
|
207
|
+
instance_eval <<-EOS
|
|
208
|
+
def #{name}(*arg)
|
|
209
|
+
unless arg.size == #{param_count}
|
|
210
|
+
raise ArgumentError.new(
|
|
211
|
+
"wrong number of arguments (\#{arg.size} for #{param_count})")
|
|
212
|
+
end
|
|
213
|
+
call(#{name.dump}, *arg)
|
|
214
|
+
end
|
|
215
|
+
EOS
|
|
216
|
+
self.method(name)
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
end
|
|
222
|
+
end
|