reidiculous-actionwebservice-client 3.0.4

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 (179) hide show
  1. data/CHANGELOG +320 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +381 -0
  4. data/Rakefile +180 -0
  5. data/TODO +32 -0
  6. data/lib/action_web_service.rb +71 -0
  7. data/lib/action_web_service/api.rb +297 -0
  8. data/lib/action_web_service/base.rb +38 -0
  9. data/lib/action_web_service/casting.rb +149 -0
  10. data/lib/action_web_service/client.rb +3 -0
  11. data/lib/action_web_service/client/base.rb +28 -0
  12. data/lib/action_web_service/client/soap_client.rb +113 -0
  13. data/lib/action_web_service/client/xmlrpc_client.rb +58 -0
  14. data/lib/action_web_service/container.rb +3 -0
  15. data/lib/action_web_service/container/action_controller_container.rb +93 -0
  16. data/lib/action_web_service/container/delegated_container.rb +86 -0
  17. data/lib/action_web_service/container/direct_container.rb +69 -0
  18. data/lib/action_web_service/dispatcher.rb +2 -0
  19. data/lib/action_web_service/dispatcher/abstract.rb +207 -0
  20. data/lib/action_web_service/dispatcher/action_controller_dispatcher.rb +379 -0
  21. data/lib/action_web_service/invocation.rb +202 -0
  22. data/lib/action_web_service/protocol.rb +4 -0
  23. data/lib/action_web_service/protocol/abstract.rb +115 -0
  24. data/lib/action_web_service/protocol/discovery.rb +37 -0
  25. data/lib/action_web_service/protocol/soap_protocol.rb +176 -0
  26. data/lib/action_web_service/protocol/soap_protocol/marshaler.rb +242 -0
  27. data/lib/action_web_service/protocol/xmlrpc_protocol.rb +122 -0
  28. data/lib/action_web_service/scaffolding.rb +281 -0
  29. data/lib/action_web_service/soap/attachment.rb +107 -0
  30. data/lib/action_web_service/soap/baseData.rb +942 -0
  31. data/lib/action_web_service/soap/element.rb +258 -0
  32. data/lib/action_web_service/soap/encodingstyle/aspDotNetHandler.rb +213 -0
  33. data/lib/action_web_service/soap/encodingstyle/handler.rb +100 -0
  34. data/lib/action_web_service/soap/encodingstyle/literalHandler.rb +226 -0
  35. data/lib/action_web_service/soap/encodingstyle/soapHandler.rb +582 -0
  36. data/lib/action_web_service/soap/generator.rb +268 -0
  37. data/lib/action_web_service/soap/header/handler.rb +57 -0
  38. data/lib/action_web_service/soap/header/handlerset.rb +70 -0
  39. data/lib/action_web_service/soap/header/simplehandler.rb +44 -0
  40. data/lib/action_web_service/soap/httpconfigloader.rb +119 -0
  41. data/lib/action_web_service/soap/mapping.rb +10 -0
  42. data/lib/action_web_service/soap/mapping/factory.rb +355 -0
  43. data/lib/action_web_service/soap/mapping/mapping.rb +381 -0
  44. data/lib/action_web_service/soap/mapping/registry.rb +541 -0
  45. data/lib/action_web_service/soap/mapping/rubytypeFactory.rb +475 -0
  46. data/lib/action_web_service/soap/mapping/typeMap.rb +50 -0
  47. data/lib/action_web_service/soap/mapping/wsdlencodedregistry.rb +280 -0
  48. data/lib/action_web_service/soap/mapping/wsdlliteralregistry.rb +418 -0
  49. data/lib/action_web_service/soap/marshal.rb +59 -0
  50. data/lib/action_web_service/soap/mimemessage.rb +240 -0
  51. data/lib/action_web_service/soap/netHttpClient.rb +190 -0
  52. data/lib/action_web_service/soap/parser.rb +251 -0
  53. data/lib/action_web_service/soap/processor.rb +66 -0
  54. data/lib/action_web_service/soap/property.rb +333 -0
  55. data/lib/action_web_service/soap/rpc/cgistub.rb +206 -0
  56. data/lib/action_web_service/soap/rpc/driver.rb +254 -0
  57. data/lib/action_web_service/soap/rpc/element.rb +325 -0
  58. data/lib/action_web_service/soap/rpc/httpserver.rb +129 -0
  59. data/lib/action_web_service/soap/rpc/proxy.rb +497 -0
  60. data/lib/action_web_service/soap/rpc/router.rb +594 -0
  61. data/lib/action_web_service/soap/rpc/rpc.rb +25 -0
  62. data/lib/action_web_service/soap/rpc/soaplet.rb +162 -0
  63. data/lib/action_web_service/soap/rpc/standaloneServer.rb +43 -0
  64. data/lib/action_web_service/soap/soap.rb +140 -0
  65. data/lib/action_web_service/soap/streamHandler.rb +229 -0
  66. data/lib/action_web_service/soap/wsdlDriver.rb +575 -0
  67. data/lib/action_web_service/struct.rb +64 -0
  68. data/lib/action_web_service/support/class_inheritable_options.rb +28 -0
  69. data/lib/action_web_service/support/signature_types.rb +227 -0
  70. data/lib/action_web_service/test_invoke.rb +110 -0
  71. data/lib/action_web_service/version.rb +9 -0
  72. data/lib/action_web_service/wsdl/binding.rb +65 -0
  73. data/lib/action_web_service/wsdl/data.rb +64 -0
  74. data/lib/action_web_service/wsdl/definitions.rb +250 -0
  75. data/lib/action_web_service/wsdl/documentation.rb +32 -0
  76. data/lib/action_web_service/wsdl/import.rb +80 -0
  77. data/lib/action_web_service/wsdl/importer.rb +38 -0
  78. data/lib/action_web_service/wsdl/info.rb +39 -0
  79. data/lib/action_web_service/wsdl/message.rb +54 -0
  80. data/lib/action_web_service/wsdl/operation.rb +130 -0
  81. data/lib/action_web_service/wsdl/operationBinding.rb +108 -0
  82. data/lib/action_web_service/wsdl/param.rb +85 -0
  83. data/lib/action_web_service/wsdl/parser.rb +163 -0
  84. data/lib/action_web_service/wsdl/part.rb +52 -0
  85. data/lib/action_web_service/wsdl/port.rb +84 -0
  86. data/lib/action_web_service/wsdl/portType.rb +73 -0
  87. data/lib/action_web_service/wsdl/service.rb +61 -0
  88. data/lib/action_web_service/wsdl/soap/address.rb +40 -0
  89. data/lib/action_web_service/wsdl/soap/binding.rb +49 -0
  90. data/lib/action_web_service/wsdl/soap/body.rb +56 -0
  91. data/lib/action_web_service/wsdl/soap/cgiStubCreator.rb +76 -0
  92. data/lib/action_web_service/wsdl/soap/classDefCreator.rb +314 -0
  93. data/lib/action_web_service/wsdl/soap/classDefCreatorSupport.rb +126 -0
  94. data/lib/action_web_service/wsdl/soap/clientSkeltonCreator.rb +78 -0
  95. data/lib/action_web_service/wsdl/soap/complexType.rb +161 -0
  96. data/lib/action_web_service/wsdl/soap/data.rb +42 -0
  97. data/lib/action_web_service/wsdl/soap/definitions.rb +149 -0
  98. data/lib/action_web_service/wsdl/soap/driverCreator.rb +95 -0
  99. data/lib/action_web_service/wsdl/soap/element.rb +28 -0
  100. data/lib/action_web_service/wsdl/soap/fault.rb +56 -0
  101. data/lib/action_web_service/wsdl/soap/header.rb +86 -0
  102. data/lib/action_web_service/wsdl/soap/headerfault.rb +56 -0
  103. data/lib/action_web_service/wsdl/soap/mappingRegistryCreator.rb +92 -0
  104. data/lib/action_web_service/wsdl/soap/methodDefCreator.rb +228 -0
  105. data/lib/action_web_service/wsdl/soap/operation.rb +122 -0
  106. data/lib/action_web_service/wsdl/soap/servantSkeltonCreator.rb +67 -0
  107. data/lib/action_web_service/wsdl/soap/standaloneServerStubCreator.rb +85 -0
  108. data/lib/action_web_service/wsdl/soap/wsdl2ruby.rb +176 -0
  109. data/lib/action_web_service/wsdl/types.rb +43 -0
  110. data/lib/action_web_service/wsdl/wsdl.rb +23 -0
  111. data/lib/action_web_service/wsdl/xmlSchema/all.rb +69 -0
  112. data/lib/action_web_service/wsdl/xmlSchema/annotation.rb +34 -0
  113. data/lib/action_web_service/wsdl/xmlSchema/any.rb +56 -0
  114. data/lib/action_web_service/wsdl/xmlSchema/attribute.rb +127 -0
  115. data/lib/action_web_service/wsdl/xmlSchema/choice.rb +69 -0
  116. data/lib/action_web_service/wsdl/xmlSchema/complexContent.rb +92 -0
  117. data/lib/action_web_service/wsdl/xmlSchema/complexType.rb +139 -0
  118. data/lib/action_web_service/wsdl/xmlSchema/content.rb +96 -0
  119. data/lib/action_web_service/wsdl/xmlSchema/data.rb +80 -0
  120. data/lib/action_web_service/wsdl/xmlSchema/element.rb +154 -0
  121. data/lib/action_web_service/wsdl/xmlSchema/enumeration.rb +36 -0
  122. data/lib/action_web_service/wsdl/xmlSchema/import.rb +65 -0
  123. data/lib/action_web_service/wsdl/xmlSchema/importer.rb +87 -0
  124. data/lib/action_web_service/wsdl/xmlSchema/include.rb +54 -0
  125. data/lib/action_web_service/wsdl/xmlSchema/length.rb +35 -0
  126. data/lib/action_web_service/wsdl/xmlSchema/parser.rb +166 -0
  127. data/lib/action_web_service/wsdl/xmlSchema/pattern.rb +36 -0
  128. data/lib/action_web_service/wsdl/xmlSchema/schema.rb +143 -0
  129. data/lib/action_web_service/wsdl/xmlSchema/sequence.rb +69 -0
  130. data/lib/action_web_service/wsdl/xmlSchema/simpleContent.rb +65 -0
  131. data/lib/action_web_service/wsdl/xmlSchema/simpleExtension.rb +54 -0
  132. data/lib/action_web_service/wsdl/xmlSchema/simpleRestriction.rb +73 -0
  133. data/lib/action_web_service/wsdl/xmlSchema/simpleType.rb +73 -0
  134. data/lib/action_web_service/wsdl/xmlSchema/unique.rb +34 -0
  135. data/lib/action_web_service/wsdl/xmlSchema/xsd2ruby.rb +107 -0
  136. data/lib/action_web_service/xsd/charset.rb +187 -0
  137. data/lib/action_web_service/xsd/codegen.rb +12 -0
  138. data/lib/action_web_service/xsd/codegen/classdef.rb +203 -0
  139. data/lib/action_web_service/xsd/codegen/commentdef.rb +34 -0
  140. data/lib/action_web_service/xsd/codegen/gensupport.rb +166 -0
  141. data/lib/action_web_service/xsd/codegen/methoddef.rb +63 -0
  142. data/lib/action_web_service/xsd/codegen/moduledef.rb +191 -0
  143. data/lib/action_web_service/xsd/datatypes.rb +1269 -0
  144. data/lib/action_web_service/xsd/datatypes1999.rb +20 -0
  145. data/lib/action_web_service/xsd/iconvcharset.rb +33 -0
  146. data/lib/action_web_service/xsd/mapping.rb +42 -0
  147. data/lib/action_web_service/xsd/namedelements.rb +95 -0
  148. data/lib/action_web_service/xsd/ns.rb +140 -0
  149. data/lib/action_web_service/xsd/qname.rb +78 -0
  150. data/lib/action_web_service/xsd/xmlparser.rb +61 -0
  151. data/lib/action_web_service/xsd/xmlparser/parser.rb +96 -0
  152. data/lib/action_web_service/xsd/xmlparser/rexmlparser.rb +54 -0
  153. data/lib/action_web_service/xsd/xmlparser/xmlparser.rb +50 -0
  154. data/lib/action_web_service/xsd/xmlparser/xmlscanner.rb +147 -0
  155. data/lib/actionwebservice.rb +1 -0
  156. data/setup.rb +1379 -0
  157. data/test/abstract_client.rb +183 -0
  158. data/test/abstract_dispatcher.rb +548 -0
  159. data/test/abstract_unit.rb +45 -0
  160. data/test/api_test.rb +103 -0
  161. data/test/apis/auto_load_api.rb +3 -0
  162. data/test/apis/broken_auto_load_api.rb +2 -0
  163. data/test/base_test.rb +42 -0
  164. data/test/casting_test.rb +95 -0
  165. data/test/client_soap_test.rb +156 -0
  166. data/test/client_xmlrpc_test.rb +153 -0
  167. data/test/container_test.rb +73 -0
  168. data/test/dispatcher_action_controller_soap_test.rb +139 -0
  169. data/test/dispatcher_action_controller_xmlrpc_test.rb +59 -0
  170. data/test/fixtures/db_definitions/mysql.sql +8 -0
  171. data/test/fixtures/db_definitions/sqlite3.sql +8 -0
  172. data/test/fixtures/users.yml +12 -0
  173. data/test/gencov +3 -0
  174. data/test/invocation_test.rb +185 -0
  175. data/test/run +6 -0
  176. data/test/scaffolded_controller_test.rb +146 -0
  177. data/test/struct_test.rb +52 -0
  178. data/test/test_invoke_test.rb +112 -0
  179. metadata +265 -0
@@ -0,0 +1,268 @@
1
+ # SOAP4R - SOAP XML Instance Generator library.
2
+ # Copyright (C) 2001, 2003, 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'action_web_service/xsd/ns'
10
+ require 'action_web_service/soap/soap'
11
+ require 'action_web_service/soap/baseData'
12
+ require 'action_web_service/soap/encodingstyle/handler'
13
+
14
+
15
+ module SOAP
16
+
17
+
18
+ ###
19
+ ## CAUTION: MT-unsafe
20
+ #
21
+ class SOAPGenerator
22
+ include SOAP
23
+
24
+ class FormatEncodeError < Error; end
25
+
26
+ public
27
+
28
+ attr_accessor :charset
29
+ attr_accessor :default_encodingstyle
30
+ attr_accessor :generate_explicit_type
31
+ attr_accessor :use_numeric_character_reference
32
+
33
+ def initialize(opt = {})
34
+ @reftarget = nil
35
+ @handlers = {}
36
+ @charset = opt[:charset] || XSD::Charset.xml_encoding_label
37
+ @default_encodingstyle = opt[:default_encodingstyle] || EncodingNamespace
38
+ @generate_explicit_type =
39
+ opt.key?(:generate_explicit_type) ? opt[:generate_explicit_type] : true
40
+ @elementformdefault = opt[:elementformdefault]
41
+ @attributeformdefault = opt[:attributeformdefault]
42
+ @use_numeric_character_reference = opt[:use_numeric_character_reference]
43
+ @indentstr = opt[:no_indent] ? '' : ' '
44
+ @buf = @indent = @curr = nil
45
+ end
46
+
47
+ def generate(obj, io = nil)
48
+ @buf = io || ''
49
+ @indent = ''
50
+
51
+ prologue
52
+ @handlers.each do |uri, handler|
53
+ handler.encode_prologue
54
+ end
55
+
56
+ ns = XSD::NS.new
57
+ @buf << xmldecl
58
+ encode_data(ns, obj, nil)
59
+
60
+ @handlers.each do |uri, handler|
61
+ handler.encode_epilogue
62
+ end
63
+ epilogue
64
+
65
+ @buf
66
+ end
67
+
68
+ def encode_data(ns, obj, parent)
69
+ if obj.is_a?(SOAPEnvelopeElement)
70
+ encode_element(ns, obj, parent)
71
+ return
72
+ end
73
+ if @reftarget && !obj.precedents.empty?
74
+ add_reftarget(obj.elename.name, obj)
75
+ ref = SOAPReference.new(obj)
76
+ ref.elename = ref.elename.dup_name(obj.elename.name)
77
+ obj.precedents.clear # Avoid cyclic delay.
78
+ obj.encodingstyle = parent.encodingstyle
79
+ # SOAPReference is encoded here.
80
+ obj = ref
81
+ end
82
+ encodingstyle = obj.encodingstyle
83
+ # Children's encodingstyle is derived from its parent.
84
+ encodingstyle ||= parent.encodingstyle if parent
85
+ obj.encodingstyle = encodingstyle
86
+ handler = find_handler(encodingstyle || @default_encodingstyle)
87
+ unless handler
88
+ raise FormatEncodeError.new("Unknown encodingStyle: #{ encodingstyle }.")
89
+ end
90
+ if !obj.elename.name
91
+ raise FormatEncodeError.new("Element name not defined: #{ obj }.")
92
+ end
93
+ handler.encode_data(self, ns, obj, parent)
94
+ handler.encode_data_end(self, ns, obj, parent)
95
+ end
96
+
97
+ def add_reftarget(name, node)
98
+ unless @reftarget
99
+ raise FormatEncodeError.new("Reftarget is not defined.")
100
+ end
101
+ @reftarget.add(name, node)
102
+ end
103
+
104
+ def encode_child(ns, child, parent)
105
+ indent_backup, @indent = @indent, @indent + @indentstr
106
+ encode_data(ns.clone_ns, child, parent)
107
+ @indent = indent_backup
108
+ end
109
+
110
+ def encode_element(ns, obj, parent)
111
+ attrs = {}
112
+ if obj.is_a?(SOAPBody)
113
+ @reftarget = obj
114
+ obj.encode(self, ns, attrs) do |child|
115
+ indent_backup, @indent = @indent, @indent + @indentstr
116
+ encode_data(ns.clone_ns, child, obj)
117
+ @indent = indent_backup
118
+ end
119
+ @reftarget = nil
120
+ else
121
+ if obj.is_a?(SOAPEnvelope)
122
+ # xsi:nil="true" can appear even if dumping without explicit type.
123
+ SOAPGenerator.assign_ns(attrs, ns,
124
+ XSD::InstanceNamespace, XSINamespaceTag)
125
+ if @generate_explicit_type
126
+ SOAPGenerator.assign_ns(attrs, ns, XSD::Namespace, XSDNamespaceTag)
127
+ end
128
+ end
129
+ obj.encode(self, ns, attrs) do |child|
130
+ indent_backup, @indent = @indent, @indent + @indentstr
131
+ encode_data(ns.clone_ns, child, obj)
132
+ @indent = indent_backup
133
+ end
134
+ end
135
+ end
136
+
137
+ def encode_name(ns, data, attrs)
138
+ if element_local?(data)
139
+ data.elename.name
140
+ else
141
+ if element_qualified?(data)
142
+ SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace, '')
143
+ else
144
+ SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace)
145
+ end
146
+ ns.name(data.elename)
147
+ end
148
+ end
149
+
150
+ def encode_name_end(ns, data)
151
+ if element_local?(data)
152
+ data.elename.name
153
+ else
154
+ ns.name(data.elename)
155
+ end
156
+ end
157
+
158
+ def encode_tag(elename, attrs = nil)
159
+ if !attrs or attrs.empty?
160
+ @buf << "\n#{ @indent }<#{ elename }>"
161
+ elsif attrs.size == 1
162
+ key, value = attrs.shift
163
+ @buf << %Q[\n#{ @indent }<#{ elename } #{ key }="#{ value }">]
164
+ else
165
+ @buf << "\n#{ @indent }<#{ elename } " <<
166
+ attrs.collect { |key, value|
167
+ %Q[#{ key }="#{ value }"]
168
+ }.join("\n#{ @indent }#{ @indentstr * 2 }") <<
169
+ '>'
170
+ end
171
+ end
172
+
173
+ def encode_tag_end(elename, cr = nil)
174
+ if cr
175
+ @buf << "\n#{ @indent }</#{ elename }>"
176
+ else
177
+ @buf << "</#{ elename }>"
178
+ end
179
+ end
180
+
181
+ def encode_rawstring(str)
182
+ @buf << str
183
+ end
184
+
185
+ EncodeMap = {
186
+ '&' => '&amp;',
187
+ '<' => '&lt;',
188
+ '>' => '&gt;',
189
+ '"' => '&quot;',
190
+ '\'' => '&apos;',
191
+ "\r" => '&#xd;'
192
+ }
193
+ EncodeCharRegexp = Regexp.new("[#{EncodeMap.keys.join}]")
194
+ def encode_string(str)
195
+ if @use_numeric_character_reference and !XSD::Charset.is_us_ascii(str)
196
+ str.gsub!(EncodeCharRegexp) { |c| EncodeMap[c] }
197
+ @buf << str.unpack("U*").collect { |c|
198
+ if c == 0x9 or c == 0xa or c == 0xd or (c >= 0x20 and c <= 0x7f)
199
+ c.chr
200
+ else
201
+ sprintf("&#x%x;", c)
202
+ end
203
+ }.join
204
+ else
205
+ @buf << str.gsub(EncodeCharRegexp) { |c| EncodeMap[c] }
206
+ end
207
+ end
208
+
209
+ def element_local?(element)
210
+ element.elename.namespace.nil?
211
+ end
212
+
213
+ def element_qualified?(element)
214
+ if element.respond_to?(:qualified)
215
+ if element.qualified.nil?
216
+ @elementformdefault
217
+ else
218
+ element.qualified
219
+ end
220
+ else
221
+ @elementformdefault
222
+ end
223
+ end
224
+
225
+ def self.assign_ns(attrs, ns, namespace, tag = nil)
226
+ if namespace.nil?
227
+ raise FormatEncodeError.new("empty namespace")
228
+ end
229
+ unless ns.assigned?(namespace)
230
+ tag = ns.assign(namespace, tag)
231
+ if tag == ''
232
+ attr = 'xmlns'
233
+ else
234
+ attr = "xmlns:#{tag}"
235
+ end
236
+ attrs[attr] = namespace
237
+ end
238
+ end
239
+
240
+ private
241
+
242
+ def prologue
243
+ end
244
+
245
+ def epilogue
246
+ end
247
+
248
+ def find_handler(encodingstyle)
249
+ unless @handlers.key?(encodingstyle)
250
+ handler = SOAP::EncodingStyle::Handler.handler(encodingstyle).new(@charset)
251
+ handler.generate_explicit_type = @generate_explicit_type
252
+ handler.encode_prologue
253
+ @handlers[encodingstyle] = handler
254
+ end
255
+ @handlers[encodingstyle]
256
+ end
257
+
258
+ def xmldecl
259
+ if @charset
260
+ %Q[<?xml version="1.0" encoding="#{ @charset }" ?>]
261
+ else
262
+ %Q[<?xml version="1.0" ?>]
263
+ end
264
+ end
265
+ end
266
+
267
+
268
+ end
@@ -0,0 +1,57 @@
1
+ # SOAP4R - SOAP Header handler item
2
+ # Copyright (C) 2003, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'action_web_service/soap/element'
10
+
11
+
12
+ module SOAP
13
+ module Header
14
+
15
+
16
+ class Handler
17
+ attr_reader :elename
18
+ attr_reader :mustunderstand
19
+ attr_reader :encodingstyle
20
+
21
+ def initialize(elename)
22
+ @elename = elename
23
+ @mustunderstand = false
24
+ @encodingstyle = nil
25
+ end
26
+
27
+ # Should return a SOAP/OM, a SOAPHeaderItem or nil.
28
+ def on_outbound
29
+ nil
30
+ end
31
+
32
+ # Given header is a SOAPHeaderItem or nil.
33
+ def on_inbound(header, mustunderstand = false)
34
+ # do something.
35
+ end
36
+
37
+ def on_outbound_headeritem
38
+ item = on_outbound
39
+ if item.nil?
40
+ nil
41
+ elsif item.is_a?(::SOAP::SOAPHeaderItem)
42
+ item.elename = @elename
43
+ item
44
+ else
45
+ item.elename = @elename
46
+ ::SOAP::SOAPHeaderItem.new(item, @mustunderstand, @encodingstyle)
47
+ end
48
+ end
49
+
50
+ def on_inbound_headeritem(header)
51
+ on_inbound(header.element, header.mustunderstand)
52
+ end
53
+ end
54
+
55
+
56
+ end
57
+ end
@@ -0,0 +1,70 @@
1
+ # SOAP4R - SOAP Header handler set
2
+ # Copyright (C) 2003, 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'action_web_service/xsd/namedelements'
10
+
11
+
12
+ module SOAP
13
+ module Header
14
+
15
+
16
+ class HandlerSet
17
+ def initialize
18
+ @store = XSD::NamedElements.new
19
+ end
20
+
21
+ def dup
22
+ obj = HandlerSet.new
23
+ obj.store = @store.dup
24
+ obj
25
+ end
26
+
27
+ def add(handler)
28
+ @store << handler
29
+ end
30
+ alias << add
31
+
32
+ def delete(handler)
33
+ @store.delete(handler)
34
+ end
35
+
36
+ def include?(handler)
37
+ @store.include?(handler)
38
+ end
39
+
40
+ # returns: Array of SOAPHeaderItem
41
+ def on_outbound
42
+ @store.collect { |handler|
43
+ handler.on_outbound_headeritem
44
+ }.compact
45
+ end
46
+
47
+ # headers: SOAPHeaderItem enumerable object
48
+ def on_inbound(headers)
49
+ headers.each do |name, item|
50
+ handler = @store.find { |handler|
51
+ handler.elename == item.element.elename
52
+ }
53
+ if handler
54
+ handler.on_inbound_headeritem(item)
55
+ elsif item.mustunderstand
56
+ raise UnhandledMustUnderstandHeaderError.new(item.element.elename.to_s)
57
+ end
58
+ end
59
+ end
60
+
61
+ protected
62
+
63
+ def store=(store)
64
+ @store = store
65
+ end
66
+ end
67
+
68
+
69
+ end
70
+ end
@@ -0,0 +1,44 @@
1
+ # SOAP4R - SOAP Simple header item handler
2
+ # Copyright (C) 2003-2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'action_web_service/soap/header/handler'
10
+ require 'action_web_service/soap/baseData'
11
+
12
+
13
+ module SOAP
14
+ module Header
15
+
16
+
17
+ class SimpleHandler < SOAP::Header::Handler
18
+ def initialize(elename)
19
+ super(elename)
20
+ end
21
+
22
+ # Should return a Hash, String or nil.
23
+ def on_simple_outbound
24
+ nil
25
+ end
26
+
27
+ # Given header is a Hash, String or nil.
28
+ def on_simple_inbound(header, mustunderstand)
29
+ end
30
+
31
+ def on_outbound
32
+ h = on_simple_outbound
33
+ h ? SOAPElement.from_obj(h, elename.namespace) : nil
34
+ end
35
+
36
+ def on_inbound(header, mustunderstand)
37
+ h = header.respond_to?(:to_obj) ? header.to_obj : header.data
38
+ on_simple_inbound(h, mustunderstand)
39
+ end
40
+ end
41
+
42
+
43
+ end
44
+ end
@@ -0,0 +1,119 @@
1
+ # SOAP4R - HTTP config loader.
2
+ # Copyright (C) 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'action_web_service/soap/property'
10
+
11
+
12
+ module SOAP
13
+
14
+
15
+ module HTTPConfigLoader
16
+ module_function
17
+
18
+ def set_options(client, options)
19
+ client.proxy = options["proxy"]
20
+ options.add_hook("proxy") do |key, value|
21
+ client.proxy = value
22
+ end
23
+ client.no_proxy = options["no_proxy"]
24
+ options.add_hook("no_proxy") do |key, value|
25
+ client.no_proxy = value
26
+ end
27
+ if client.respond_to?(:protocol_version=)
28
+ client.protocol_version = options["protocol_version"]
29
+ options.add_hook("protocol_version") do |key, value|
30
+ client.protocol_version = value
31
+ end
32
+ end
33
+ ssl_config = options["ssl_config"] ||= ::SOAP::Property.new
34
+ set_ssl_config(client, ssl_config)
35
+ ssl_config.add_hook(true) do |key, value|
36
+ set_ssl_config(client, ssl_config)
37
+ end
38
+ basic_auth = options["basic_auth"] ||= ::SOAP::Property.new
39
+ set_basic_auth(client, basic_auth)
40
+ basic_auth.add_hook do |key, value|
41
+ set_basic_auth(client, basic_auth)
42
+ end
43
+ options.add_hook("connect_timeout") do |key, value|
44
+ client.connect_timeout = value
45
+ end
46
+ options.add_hook("send_timeout") do |key, value|
47
+ client.send_timeout = value
48
+ end
49
+ options.add_hook("receive_timeout") do |key, value|
50
+ client.receive_timeout = value
51
+ end
52
+ end
53
+
54
+ def set_basic_auth(client, basic_auth)
55
+ basic_auth.values.each do |url, userid, passwd|
56
+ client.set_basic_auth(url, userid, passwd)
57
+ end
58
+ end
59
+
60
+ def set_ssl_config(client, ssl_config)
61
+ ssl_config.each do |key, value|
62
+ cfg = client.ssl_config
63
+ if cfg.nil?
64
+ raise NotImplementedError.new("SSL not supported")
65
+ end
66
+ case key
67
+ when 'client_cert'
68
+ cfg.client_cert = cert_from_file(value)
69
+ when 'client_key'
70
+ cfg.client_key = key_from_file(value)
71
+ when 'client_ca'
72
+ cfg.client_ca = value
73
+ when 'ca_path'
74
+ cfg.set_trust_ca(value)
75
+ when 'ca_file'
76
+ cfg.set_trust_ca(value)
77
+ when 'crl'
78
+ cfg.set_crl(value)
79
+ when 'verify_mode'
80
+ cfg.verify_mode = ssl_config_int(value)
81
+ when 'verify_depth'
82
+ cfg.verify_depth = ssl_config_int(value)
83
+ when 'options'
84
+ cfg.options = value
85
+ when 'ciphers'
86
+ cfg.ciphers = value
87
+ when 'verify_callback'
88
+ cfg.verify_callback = value
89
+ when 'cert_store'
90
+ cfg.cert_store = value
91
+ else
92
+ raise ArgumentError.new("unknown ssl_config property #{key}")
93
+ end
94
+ end
95
+ end
96
+
97
+ def ssl_config_int(value)
98
+ if value.nil? or value.to_s.empty?
99
+ nil
100
+ else
101
+ begin
102
+ Integer(value)
103
+ rescue ArgumentError
104
+ ::SOAP::Property::Util.const_from_name(value.to_s)
105
+ end
106
+ end
107
+ end
108
+
109
+ def cert_from_file(filename)
110
+ OpenSSL::X509::Certificate.new(File.open(filename) { |f| f.read })
111
+ end
112
+
113
+ def key_from_file(filename)
114
+ OpenSSL::PKey::RSA.new(File.open(filename) { |f| f.read })
115
+ end
116
+ end
117
+
118
+
119
+ end