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,59 @@
1
+ # SOAP4R - Marshalling/Unmarshalling Ruby's object using SOAP Encoding.
2
+ # Copyright (C) 2001, 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 "soap/mapping"
10
+ require "soap/processor"
11
+
12
+
13
+ module SOAP
14
+
15
+
16
+ module Marshal
17
+ # Trying xsd:dateTime data to be recovered as aTime.
18
+ MarshalMappingRegistry = Mapping::Registry.new(
19
+ :allow_original_mapping => true)
20
+ MarshalMappingRegistry.add(
21
+ Time,
22
+ ::SOAP::SOAPDateTime,
23
+ ::SOAP::Mapping::Registry::DateTimeFactory
24
+ )
25
+
26
+ class << self
27
+ public
28
+ def dump(obj, io = nil)
29
+ marshal(obj, MarshalMappingRegistry, io)
30
+ end
31
+
32
+ def load(stream)
33
+ unmarshal(stream, MarshalMappingRegistry)
34
+ end
35
+
36
+ def marshal(obj, mapping_registry = MarshalMappingRegistry, io = nil)
37
+ elename = Mapping.name2elename(obj.class.to_s)
38
+ soap_obj = Mapping.obj2soap(obj, mapping_registry)
39
+ body = SOAPBody.new
40
+ body.add(elename, soap_obj)
41
+ env = SOAPEnvelope.new(nil, body)
42
+ SOAP::Processor.marshal(env, {}, io)
43
+ end
44
+
45
+ def unmarshal(stream, mapping_registry = MarshalMappingRegistry)
46
+ env = SOAP::Processor.unmarshal(stream)
47
+ if env.nil?
48
+ raise ArgumentError.new("Illegal SOAP marshal format.")
49
+ end
50
+ Mapping.soap2obj(env.body.root_node, mapping_registry)
51
+ end
52
+ end
53
+ end
54
+
55
+
56
+ end
57
+
58
+
59
+ SOAPMarshal = SOAP::Marshal
@@ -0,0 +1,240 @@
1
+ # SOAP4R - MIME Message implementation.
2
+ # Copyright (C) 2002 Jamie Herre.
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/attachment'
10
+
11
+
12
+ module SOAP
13
+
14
+
15
+ # Classes for MIME message handling. Should be put somewhere else!
16
+ # Tried using the 'tmail' module but found that I needed something
17
+ # lighter in weight.
18
+
19
+
20
+ class MIMEMessage
21
+ class MIMEMessageError < StandardError; end
22
+
23
+ MultipartContentType = 'multipart/\w+'
24
+
25
+ class Header
26
+ attr_accessor :str, :key, :root
27
+
28
+ def initialize
29
+ @attrs = {}
30
+ end
31
+
32
+ def [](key)
33
+ @attrs[key]
34
+ end
35
+
36
+ def []=(key, value)
37
+ @attrs[key] = value
38
+ end
39
+
40
+ def to_s
41
+ @key + ": " + @str
42
+ end
43
+ end
44
+
45
+ class Headers < Hash
46
+ def self.parse(str)
47
+ new.parse(str)
48
+ end
49
+
50
+ def parse(str)
51
+ header_cache = nil
52
+ str.each do |line|
53
+ case line
54
+ when /^\A[^\: \t]+:\s*.+$/
55
+ parse_line(header_cache) if header_cache
56
+ header_cache = line.sub(/\r?\n\z/, '')
57
+ when /^\A\s+(.*)$/
58
+ # a continuous line at the beginning line crashes here.
59
+ header_cache << line
60
+ else
61
+ raise RuntimeError.new("unexpected header: #{line.inspect}")
62
+ end
63
+ end
64
+ parse_line(header_cache) if header_cache
65
+ self
66
+ end
67
+
68
+ def parse_line(line)
69
+ if /^\A([^\: \t]+):\s*(.+)\z/ =~ line
70
+ header = parse_rhs($2.strip)
71
+ header.key = $1.strip
72
+ self[header.key.downcase] = header
73
+ else
74
+ raise RuntimeError.new("unexpected header line: #{line.inspect}")
75
+ end
76
+ end
77
+
78
+ def parse_rhs(str)
79
+ a = str.split(/;+\s+/)
80
+ header = Header.new
81
+ header.str = str
82
+ header.root = a.shift
83
+ a.each do |pair|
84
+ if pair =~ /(\w+)\s*=\s*"?([^"]+)"?/
85
+ header[$1.downcase] = $2
86
+ else
87
+ raise RuntimeError.new("unexpected header component: #{pair.inspect}")
88
+ end
89
+ end
90
+ header
91
+ end
92
+
93
+ def add(key, value)
94
+ if key != nil and value != nil
95
+ header = parse_rhs(value)
96
+ header.key = key
97
+ self[key.downcase] = header
98
+ end
99
+ end
100
+
101
+ def to_s
102
+ self.values.collect { |hdr|
103
+ hdr.to_s
104
+ }.join("\r\n")
105
+ end
106
+ end
107
+
108
+ class Part
109
+ attr_accessor :headers, :body
110
+
111
+ def initialize
112
+ @headers = Headers.new
113
+ @headers.add("Content-Transfer-Encoding", "8bit")
114
+ @body = nil
115
+ @contentid = nil
116
+ end
117
+
118
+ def self.parse(str)
119
+ new.parse(str)
120
+ end
121
+
122
+ def parse(str)
123
+ headers, body = str.split(/\r\n\r\n/s)
124
+ if headers != nil and body != nil
125
+ @headers = Headers.parse(headers)
126
+ @body = body.sub(/\r\n\z/, '')
127
+ else
128
+ raise RuntimeError.new("unexpected part: #{str.inspect}")
129
+ end
130
+ self
131
+ end
132
+
133
+ def contentid
134
+ if @contentid == nil and @headers.key?('content-id')
135
+ @contentid = @headers['content-id'].str
136
+ @contentid = $1 if @contentid =~ /^<(.+)>$/
137
+ end
138
+ @contentid
139
+ end
140
+
141
+ alias content body
142
+
143
+ def to_s
144
+ @headers.to_s + "\r\n\r\n" + @body
145
+ end
146
+ end
147
+
148
+ def initialize
149
+ @parts = []
150
+ @headers = Headers.new
151
+ @root = nil
152
+ end
153
+
154
+ def self.parse(head, str)
155
+ new.parse(head, str)
156
+ end
157
+
158
+ attr_reader :parts, :headers
159
+
160
+ def close
161
+ @headers.add(
162
+ "Content-Type",
163
+ "multipart/related; type=\"text/xml\"; boundary=\"#{boundary}\"; start=\"#{@parts[0].contentid}\""
164
+ )
165
+ end
166
+
167
+ def parse(head, str)
168
+ @headers = Headers.parse(head + "\r\n" + "From: jfh\r\n")
169
+ boundary = @headers['content-type']['boundary']
170
+ if boundary != nil
171
+ parts = str.split(/--#{Regexp.quote(boundary)}\s*(?:\r\n|--\r\n)/)
172
+ part = parts.shift # preamble must be ignored.
173
+ @parts = parts.collect { |part| Part.parse(part) }
174
+ else
175
+ @parts = [Part.parse(str)]
176
+ end
177
+ if @parts.length < 1
178
+ raise MIMEMessageError.new("This message contains no valid parts!")
179
+ end
180
+ self
181
+ end
182
+
183
+ def root
184
+ if @root == nil
185
+ start = @headers['content-type']['start']
186
+ @root = (start && @parts.find { |prt| prt.contentid == start }) ||
187
+ @parts[0]
188
+ end
189
+ @root
190
+ end
191
+
192
+ def boundary
193
+ if @boundary == nil
194
+ @boundary = "----=Part_" + __id__.to_s + rand.to_s
195
+ end
196
+ @boundary
197
+ end
198
+
199
+ def add_part(content)
200
+ part = Part.new
201
+ part.headers.add("Content-Type",
202
+ "text/xml; charset=" + XSD::Charset.xml_encoding_label)
203
+ part.headers.add("Content-ID", Attachment.contentid(part))
204
+ part.body = content
205
+ @parts.unshift(part)
206
+ end
207
+
208
+ def add_attachment(attach)
209
+ part = Part.new
210
+ part.headers.add("Content-Type", attach.contenttype)
211
+ part.headers.add("Content-ID", attach.mime_contentid)
212
+ part.body = attach.content
213
+ @parts.unshift(part)
214
+ end
215
+
216
+ def has_parts?
217
+ (@parts.length > 0)
218
+ end
219
+
220
+ def headers_str
221
+ @headers.to_s
222
+ end
223
+
224
+ def content_str
225
+ str = ''
226
+ @parts.each do |prt|
227
+ str << "--" + boundary + "\r\n"
228
+ str << prt.to_s + "\r\n"
229
+ end
230
+ str << '--' + boundary + "--\r\n"
231
+ str
232
+ end
233
+
234
+ def to_s
235
+ str = headers_str + "\r\n\r\n" + content_str
236
+ end
237
+ end
238
+
239
+
240
+ end
@@ -0,0 +1,190 @@
1
+ # SOAP4R - net/http wrapper
2
+ # Copyright (C) 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 'net/http'
10
+
11
+
12
+ module SOAP
13
+
14
+
15
+ class NetHttpClient
16
+
17
+ SSLEnabled = begin
18
+ require 'net/https'
19
+ true
20
+ rescue LoadError
21
+ false
22
+ end
23
+
24
+ attr_reader :proxy
25
+ attr_accessor :no_proxy
26
+ attr_accessor :debug_dev
27
+ attr_accessor :ssl_config # ignored for now.
28
+ attr_accessor :protocol_version # ignored for now.
29
+ attr_accessor :connect_timeout
30
+ attr_accessor :send_timeout # ignored for now.
31
+ attr_accessor :receive_timeout
32
+
33
+ def initialize(proxy = nil, agent = nil)
34
+ @proxy = proxy ? URI.parse(proxy) : nil
35
+ @agent = agent
36
+ @debug_dev = nil
37
+ @session_manager = SessionManager.new
38
+ @no_proxy = @ssl_config = @protocol_version = nil
39
+ @connect_timeout = @send_timeout = @receive_timeout = nil
40
+ end
41
+
42
+ def test_loopback_response
43
+ raise NotImplementedError.new("not supported for now")
44
+ end
45
+
46
+ def proxy=(proxy)
47
+ if proxy.nil?
48
+ @proxy = nil
49
+ else
50
+ if proxy.is_a?(URI)
51
+ @proxy = proxy
52
+ else
53
+ @proxy = URI.parse(proxy)
54
+ end
55
+ if @proxy.scheme == nil or @proxy.scheme.downcase != 'http' or
56
+ @proxy.host == nil or @proxy.port == nil
57
+ raise ArgumentError.new("unsupported proxy `#{proxy}'")
58
+ end
59
+ end
60
+ reset_all
61
+ @proxy
62
+ end
63
+
64
+ def set_basic_auth(uri, user_id, passwd)
65
+ # net/http does not handle url.
66
+ @basic_auth = [user_id, passwd]
67
+ raise NotImplementedError.new("basic_auth is not supported under soap4r + net/http.")
68
+ end
69
+
70
+ def set_cookie_store(filename)
71
+ raise NotImplementedError.new
72
+ end
73
+
74
+ def save_cookie_store(filename)
75
+ raise NotImplementedError.new
76
+ end
77
+
78
+ def reset(url)
79
+ # no persistent connection. ignored.
80
+ end
81
+
82
+ def reset_all
83
+ # no persistent connection. ignored.
84
+ end
85
+
86
+ def post(url, req_body, header = {})
87
+ unless url.is_a?(URI)
88
+ url = URI.parse(url)
89
+ end
90
+ extra = header.dup
91
+ extra['User-Agent'] = @agent if @agent
92
+ res = start(url) { |http|
93
+ http.post(url.request_uri, req_body, extra)
94
+ }
95
+ Response.new(res)
96
+ end
97
+
98
+ def get_content(url, header = {})
99
+ unless url.is_a?(URI)
100
+ url = URI.parse(url)
101
+ end
102
+ extra = header.dup
103
+ extra['User-Agent'] = @agent if @agent
104
+ res = start(url) { |http|
105
+ http.get(url.request_uri, extra)
106
+ }
107
+ res.body
108
+ end
109
+
110
+ private
111
+
112
+ def start(url)
113
+ http = create_connection(url)
114
+ response = nil
115
+ http.start { |worker|
116
+ response = yield(worker)
117
+ worker.finish
118
+ }
119
+ @debug_dev << response.body if @debug_dev
120
+ response
121
+ end
122
+
123
+ def create_connection(url)
124
+ proxy_host = proxy_port = nil
125
+ unless no_proxy?(url)
126
+ proxy_host = @proxy.host
127
+ proxy_port = @proxy.port
128
+ end
129
+ http = Net::HTTP::Proxy(proxy_host, proxy_port).new(url.host, url.port)
130
+ if http.respond_to?(:set_debug_output)
131
+ http.set_debug_output(@debug_dev)
132
+ end
133
+ http.open_timeout = @connect_timeout if @connect_timeout
134
+ http.read_timeout = @receive_timeout if @receive_timeout
135
+ case url
136
+ when URI::HTTPS
137
+ if SSLEnabled
138
+ http.use_ssl = true
139
+ else
140
+ raise RuntimeError.new("Cannot connect to #{url} (OpenSSL is not installed.)")
141
+ end
142
+ when URI::HTTP
143
+ # OK
144
+ else
145
+ raise RuntimeError.new("Cannot connect to #{url} (Not HTTP.)")
146
+ end
147
+ http
148
+ end
149
+
150
+ NO_PROXY_HOSTS = ['localhost']
151
+
152
+ def no_proxy?(uri)
153
+ if !@proxy or NO_PROXY_HOSTS.include?(uri.host)
154
+ return true
155
+ end
156
+ if @no_proxy
157
+ @no_proxy.scan(/([^:,]*)(?::(\d+))?/) do |host, port|
158
+ if /(\A|\.)#{Regexp.quote(host)}\z/i =~ uri.host &&
159
+ (!port || uri.port == port.to_i)
160
+ return true
161
+ end
162
+ end
163
+ else
164
+ false
165
+ end
166
+ end
167
+
168
+ class SessionManager
169
+ attr_accessor :connect_timeout
170
+ attr_accessor :send_timeout
171
+ attr_accessor :receive_timeout
172
+ end
173
+
174
+ class Response
175
+ attr_reader :content
176
+ attr_reader :status
177
+ attr_reader :reason
178
+ attr_reader :contenttype
179
+
180
+ def initialize(res)
181
+ @status = res.code.to_i
182
+ @reason = res.message
183
+ @contenttype = res['content-type']
184
+ @content = res.body
185
+ end
186
+ end
187
+ end
188
+
189
+
190
+ end