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.
Files changed (165) hide show
  1. checksums.yaml +7 -0
  2. data/bin/wsdl2ruby.rb +140 -0
  3. data/bin/wsdl2ruby_rails.rb +140 -0
  4. data/bin/xsd2ruby.rb +92 -0
  5. data/lib/soap/attachment.rb +109 -0
  6. data/lib/soap/attrproxy.rb +35 -0
  7. data/lib/soap/baseData.rb +1095 -0
  8. data/lib/soap/element.rb +278 -0
  9. data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
  10. data/lib/soap/encodingstyle/handler.rb +121 -0
  11. data/lib/soap/encodingstyle/literalHandler.rb +196 -0
  12. data/lib/soap/encodingstyle/soapHandler.rb +560 -0
  13. data/lib/soap/filter/filterchain.rb +52 -0
  14. data/lib/soap/filter/handler.rb +32 -0
  15. data/lib/soap/filter/streamhandler.rb +30 -0
  16. data/lib/soap/filter.rb +14 -0
  17. data/lib/soap/generator.rb +299 -0
  18. data/lib/soap/header/handler.rb +64 -0
  19. data/lib/soap/header/handlerset.rb +78 -0
  20. data/lib/soap/header/mappinghandler.rb +48 -0
  21. data/lib/soap/header/simplehandler.rb +45 -0
  22. data/lib/soap/httpconfigloader.rb +140 -0
  23. data/lib/soap/mapping/encodedregistry.rb +541 -0
  24. data/lib/soap/mapping/factory.rb +389 -0
  25. data/lib/soap/mapping/literalregistry.rb +392 -0
  26. data/lib/soap/mapping/mapping.rb +577 -0
  27. data/lib/soap/mapping/registry.rb +297 -0
  28. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  29. data/lib/soap/mapping/schemadefinition.rb +171 -0
  30. data/lib/soap/mapping/typeMap.rb +107 -0
  31. data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
  32. data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
  33. data/lib/soap/mapping.rb +13 -0
  34. data/lib/soap/marshal.rb +60 -0
  35. data/lib/soap/mimemessage.rb +243 -0
  36. data/lib/soap/nestedexception.rb +43 -0
  37. data/lib/soap/netHttpClient.rb +242 -0
  38. data/lib/soap/ns.rb +39 -0
  39. data/lib/soap/parser.rb +253 -0
  40. data/lib/soap/processor.rb +67 -0
  41. data/lib/soap/property.rb +330 -0
  42. data/lib/soap/proxy.rb +15 -0
  43. data/lib/soap/rpc/cgistub.rb +249 -0
  44. data/lib/soap/rpc/driver.rb +222 -0
  45. data/lib/soap/rpc/element.rb +375 -0
  46. data/lib/soap/rpc/httpserver.rb +144 -0
  47. data/lib/soap/rpc/methodDef.rb +69 -0
  48. data/lib/soap/rpc/proxy.rb +573 -0
  49. data/lib/soap/rpc/router.rb +672 -0
  50. data/lib/soap/rpc/rpc.rb +26 -0
  51. data/lib/soap/rpc/soaplet.rb +201 -0
  52. data/lib/soap/rpc/standaloneServer.rb +44 -0
  53. data/lib/soap/soap.rb +163 -0
  54. data/lib/soap/streamHandler.rb +302 -0
  55. data/lib/soap/version.rb +12 -0
  56. data/lib/soap/wsdlDriver.rb +165 -0
  57. data/lib/wsdl/binding.rb +66 -0
  58. data/lib/wsdl/data.rb +65 -0
  59. data/lib/wsdl/definitions.rb +237 -0
  60. data/lib/wsdl/documentation.rb +33 -0
  61. data/lib/wsdl/import.rb +81 -0
  62. data/lib/wsdl/importer.rb +39 -0
  63. data/lib/wsdl/info.rb +51 -0
  64. data/lib/wsdl/message.rb +55 -0
  65. data/lib/wsdl/operation.rb +152 -0
  66. data/lib/wsdl/operationBinding.rb +241 -0
  67. data/lib/wsdl/param.rb +94 -0
  68. data/lib/wsdl/parser.rb +180 -0
  69. data/lib/wsdl/part.rb +53 -0
  70. data/lib/wsdl/port.rb +67 -0
  71. data/lib/wsdl/portType.rb +76 -0
  72. data/lib/wsdl/service.rb +62 -0
  73. data/lib/wsdl/soap/address.rb +41 -0
  74. data/lib/wsdl/soap/binding.rb +50 -0
  75. data/lib/wsdl/soap/body.rb +59 -0
  76. data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
  77. data/lib/wsdl/soap/classDefCreator.rb +529 -0
  78. data/lib/wsdl/soap/classDefCreatorSupport.rb +242 -0
  79. data/lib/wsdl/soap/classNameCreator.rb +57 -0
  80. data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
  81. data/lib/wsdl/soap/complexType.rb +174 -0
  82. data/lib/wsdl/soap/data.rb +43 -0
  83. data/lib/wsdl/soap/definitions.rb +201 -0
  84. data/lib/wsdl/soap/driverCreator.rb +121 -0
  85. data/lib/wsdl/soap/element.rb +34 -0
  86. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
  87. data/lib/wsdl/soap/fault.rb +57 -0
  88. data/lib/wsdl/soap/header.rb +87 -0
  89. data/lib/wsdl/soap/headerfault.rb +57 -0
  90. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
  91. data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
  92. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +380 -0
  93. data/lib/wsdl/soap/methodDefCreator.rb +200 -0
  94. data/lib/wsdl/soap/operation.rb +113 -0
  95. data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
  96. data/lib/wsdl/soap/servletStubCreator.rb +105 -0
  97. data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
  98. data/lib/wsdl/soap/wsdl2ruby.rb +249 -0
  99. data/lib/wsdl/types.rb +45 -0
  100. data/lib/wsdl/wsdl.rb +25 -0
  101. data/lib/wsdl/xmlSchema/all.rb +25 -0
  102. data/lib/wsdl/xmlSchema/annotation.rb +35 -0
  103. data/lib/wsdl/xmlSchema/any.rb +62 -0
  104. data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
  105. data/lib/wsdl/xmlSchema/attribute.rb +105 -0
  106. data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
  107. data/lib/wsdl/xmlSchema/choice.rb +59 -0
  108. data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
  109. data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
  110. data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
  111. data/lib/wsdl/xmlSchema/complexType.rb +194 -0
  112. data/lib/wsdl/xmlSchema/content.rb +96 -0
  113. data/lib/wsdl/xmlSchema/data.rb +117 -0
  114. data/lib/wsdl/xmlSchema/element.rb +154 -0
  115. data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
  116. data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
  117. data/lib/wsdl/xmlSchema/group.rb +101 -0
  118. data/lib/wsdl/xmlSchema/import.rb +53 -0
  119. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  120. data/lib/wsdl/xmlSchema/importer.rb +103 -0
  121. data/lib/wsdl/xmlSchema/include.rb +48 -0
  122. data/lib/wsdl/xmlSchema/length.rb +38 -0
  123. data/lib/wsdl/xmlSchema/list.rb +49 -0
  124. data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
  125. data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
  126. data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
  127. data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
  128. data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
  129. data/lib/wsdl/xmlSchema/minlength.rb +38 -0
  130. data/lib/wsdl/xmlSchema/parser.rb +168 -0
  131. data/lib/wsdl/xmlSchema/pattern.rb +37 -0
  132. data/lib/wsdl/xmlSchema/ref.rb +34 -0
  133. data/lib/wsdl/xmlSchema/schema.rb +179 -0
  134. data/lib/wsdl/xmlSchema/sequence.rb +55 -0
  135. data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
  136. data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
  137. data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
  138. data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
  139. data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
  140. data/lib/wsdl/xmlSchema/union.rb +36 -0
  141. data/lib/wsdl/xmlSchema/unique.rb +35 -0
  142. data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
  143. data/lib/wsdl/xmlSchema/xsd2ruby.rb +177 -0
  144. data/lib/xsd/charset.rb +190 -0
  145. data/lib/xsd/codegen/classdef.rb +230 -0
  146. data/lib/xsd/codegen/commentdef.rb +35 -0
  147. data/lib/xsd/codegen/gensupport.rb +277 -0
  148. data/lib/xsd/codegen/methoddef.rb +71 -0
  149. data/lib/xsd/codegen/moduledef.rb +209 -0
  150. data/lib/xsd/codegen.rb +13 -0
  151. data/lib/xsd/datatypes.rb +1465 -0
  152. data/lib/xsd/datatypes1999.rb +21 -0
  153. data/lib/xsd/iconvcharset.rb +33 -0
  154. data/lib/xsd/mapping.rb +69 -0
  155. data/lib/xsd/namedelements.rb +133 -0
  156. data/lib/xsd/ns.rb +183 -0
  157. data/lib/xsd/qname.rb +80 -0
  158. data/lib/xsd/xmlparser/libxmlparser.rb +136 -0
  159. data/lib/xsd/xmlparser/nokogiriparser.rb +63 -0
  160. data/lib/xsd/xmlparser/ogaparser.rb +53 -0
  161. data/lib/xsd/xmlparser/oxparser.rb +97 -0
  162. data/lib/xsd/xmlparser/parser.rb +101 -0
  163. data/lib/xsd/xmlparser/rexmlparser.rb +54 -0
  164. data/lib/xsd/xmlparser.rb +81 -0
  165. 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