From 20fa0df5cd7f297b1694b75b776516b51460ba55 Mon Sep 17 00:00:00 2001 From: nahi Date: Thu, 4 Dec 2003 04:05:51 +0000 Subject: * 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 --- lib/soap/streamHandler.rb | 87 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 65 insertions(+), 22 deletions(-) (limited to 'lib/soap/streamHandler.rb') 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 -- cgit v1.2.3