summaryrefslogtreecommitdiff
path: root/lib/soap/streamHandler.rb
diff options
context:
space:
mode:
authornahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-12-04 04:05:51 +0000
committernahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-12-04 04:05:51 +0000
commit20fa0df5cd7f297b1694b75b776516b51460ba55 (patch)
tree73cbdf22c4ea8ccf43fe55c69396885159db4aea /lib/soap/streamHandler.rb
parentb28a2a1ad645b21679d088c738d0e0ef70758a19 (diff)
* lib/soap/soap.rb: add SOAP::Env module for environment repository
such as HTTP_PROXY. * lib/soap/property.rb: property implementation. * lib/soap/streamHandler.rb, lib/soap/wsdlDriver.rb, lib/soap/rpc/driver.rb: use soap/property.rb. * lib/wsdl/importer.rb, lib/soap/wsdlDriver.rb, lib/soap/rpc/driver.rb: use SOAP::Env. * lib/soap/netHttpClient.rb: add basic_auth, ssl_config, and cookie management interface, but ignored for now. * lib/xsd/charset.rb: add XSD::Charset.encoding= interface to set wiredump charset explicitly. it was fixed to 'utf-8' when iconv or uconv module was found. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5104 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/soap/streamHandler.rb')
-rw-r--r--lib/soap/streamHandler.rb87
1 files changed, 65 insertions, 22 deletions
diff --git a/lib/soap/streamHandler.rb b/lib/soap/streamHandler.rb
index c5c0661455..7cf6ce53ee 100644
--- a/lib/soap/streamHandler.rb
+++ b/lib/soap/streamHandler.rb
@@ -7,6 +7,7 @@
require 'soap/soap'
+require 'soap/property'
module SOAP
@@ -76,31 +77,25 @@ class HTTPPostStreamHandler < StreamHandler
public
- attr_accessor :wiredump_dev
- attr_accessor :wiredump_file_base
- attr_accessor :charset
attr_reader :client
+ attr_accessor :wiredump_file_base
NofRetry = 10 # [times]
- def initialize(endpoint_url, proxy = nil, charset = nil)
+ def initialize(endpoint_url, options)
super(endpoint_url)
- @proxy = proxy || ENV['http_proxy'] || ENV['HTTP_PROXY']
- @charset = charset || XSD::Charset.charset_label($KCODE)
- @wiredump_dev = nil # Set an IO to get wiredump.
+ @client = Client.new(nil, "SOAP4R/#{ Version }")
@wiredump_file_base = nil
- @client = Client.new(@proxy, "SOAP4R/#{ Version }")
+ @charset = @wiredump_dev = nil
+ @options = options
+ set_options
+ @client.debug_dev = @wiredump_dev
end
def inspect
"#<#{self.class}:#{endpoint_url}>"
end
- def proxy=(proxy)
- @proxy = proxy
- @client.proxy = @proxy
- end
-
def send(soap_string, soapaction = nil, charset = @charset)
send_post(soap_string, soapaction, charset)
end
@@ -111,18 +106,66 @@ public
private
+ def set_options
+ @client.proxy = @options["proxy"]
+ @options.add_hook("proxy") do |key, value|
+ @client.proxy = value
+ end
+ @client.no_proxy = @options["no_proxy"]
+ @options.add_hook("no_proxy") do |key, value|
+ @client.no_proxy = value
+ end
+ @client.protocol_version = @options["protocol_version"]
+ @options.add_hook("protocol_version") do |key, value|
+ @client.protocol_version = value
+ end
+ set_cookie_store_file(@options["cookie_store_file"])
+ @options.add_hook("cookie_store_file") do |key, value|
+ set_cookie_store_file(value)
+ end
+ set_ssl_config(@options["ssl_config"])
+ @options.add_hook("ssl_config") do |key, value|
+ set_ssl_config(@options["ssl_config"])
+ end
+ @charset = @options["charset"] || XSD::Charset.charset_label($KCODE)
+ @options.add_hook("charset") do |key, value|
+ @charset = value
+ end
+ @wiredump_dev = @options["wiredump_dev"]
+ @options.add_hook("wiredump_dev") do |key, value|
+ @wiredump_dev = value
+ @client.debug_dev = @wiredump_dev
+ end
+ basic_auth = @options["basic_auth"] ||= ::SOAP::Property.new
+ set_basic_auth(basic_auth)
+ basic_auth.add_hook do |key, value|
+ set_basic_auth(basic_auth)
+ end
+ @options.lock(true)
+ basic_auth.unlock
+ end
+
+ def set_basic_auth(basic_auth)
+ basic_auth.values.each do |url, userid, passwd|
+ @client.set_basic_auth(url, userid, passwd)
+ end
+ end
+
+ def set_cookie_store_file(value)
+ return unless value
+ raise NotImplementedError.new
+ end
+
+ def set_ssl_config(value)
+ return unless value
+ raise NotImplementedError.new
+ end
+
def send_post(soap_string, soapaction, charset)
data = ConnectionData.new
data.send_string = soap_string
data.send_contenttype = StreamHandler.create_media_type(charset)
- wiredump_dev = if @wiredump_dev && @wiredump_dev.respond_to?("<<")
- @wiredump_dev
- else
- nil
- end
- @client.debug_dev = wiredump_dev
-
if @wiredump_file_base
filename = @wiredump_file_base + '_request.xml'
f = File.open(filename, "w")
@@ -134,14 +177,14 @@ private
extra['Content-Type'] = data.send_contenttype
extra['SOAPAction'] = "\"#{ soapaction }\""
- wiredump_dev << "Wire dump:\n\n" if wiredump_dev
+ @wiredump_dev << "Wire dump:\n\n" if @wiredump_dev
begin
res = @client.post(@endpoint_url, soap_string, extra)
rescue
@client.reset(@endpoint_url)
raise
end
- wiredump_dev << "\n\n" if wiredump_dev
+ @wiredump_dev << "\n\n" if @wiredump_dev
receive_string = res.content