mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* added files
* lib/soap/attachment.rb * lib/soap/header * lib/soap/mimemessage.rb * lib/soap/rpc/httpserver.rb * lib/wsdl/soap/cgiStubCreator.rb * lib/wsdl/soap/classDefCreator.rb * lib/wsdl/soap/classDefCreatorSupport.rb * lib/wsdl/soap/clientSkeltonCreator.rb * lib/wsdl/soap/driverCreator.rb * lib/wsdl/soap/mappingRegistryCreator.rb * lib/wsdl/soap/methodDefCreator.rb * lib/wsdl/soap/servantSkeltonCreator.rb * lib/wsdl/soap/standaloneServerStubCreator.rb * lib/wsdl/xmlSchema/enumeration.rb * lib/wsdl/xmlSchema/simpleRestriction.rb * lib/wsdl/xmlSchema/simpleType.rb * lib/xsd/codegen * lib/xsd/codegen.rb * sample/soap/authheader * sample/soap/raa2.4 * sample/soap/ssl * sample/soap/swa * sample/soap/whois.rb * sample/soap/calc/samplehttpd.conf * sample/soap/exchange/samplehttpd.conf * sample/soap/sampleStruct/samplehttpd.conf * sample/wsdl/raa2.4 * sample/wsdl/googleSearch/samplehttpd.conf * test/openssl/_test_ssl.rb * test/soap/header * test/soap/ssl * test/soap/struct * test/soap/swa * test/soap/wsdlDriver * test/wsdl/multiplefault.wsdl * test/wsdl/simpletype * test/wsdl/test_multiplefault.rb * modified files * lib/soap/baseData.rb * lib/soap/element.rb * lib/soap/generator.rb * lib/soap/marshal.rb * lib/soap/netHttpClient.rb * lib/soap/parser.rb * lib/soap/processor.rb * lib/soap/property.rb * lib/soap/soap.rb * lib/soap/streamHandler.rb * lib/soap/wsdlDriver.rb * lib/soap/encodingstyle/handler.rb * lib/soap/encodingstyle/literalHandler.rb * lib/soap/encodingstyle/soapHandler.rb * lib/soap/mapping/factory.rb * lib/soap/mapping/mapping.rb * lib/soap/mapping/registry.rb * lib/soap/mapping/rubytypeFactory.rb * lib/soap/mapping/wsdlRegistry.rb * lib/soap/rpc/cgistub.rb * lib/soap/rpc/driver.rb * lib/soap/rpc/element.rb * lib/soap/rpc/proxy.rb * lib/soap/rpc/router.rb * lib/soap/rpc/soaplet.rb * lib/soap/rpc/standaloneServer.rb * lib/wsdl/data.rb * lib/wsdl/definitions.rb * lib/wsdl/operation.rb * lib/wsdl/parser.rb * lib/wsdl/soap/definitions.rb * lib/wsdl/xmlSchema/complexContent.rb * lib/wsdl/xmlSchema/complexType.rb * lib/wsdl/xmlSchema/data.rb * lib/wsdl/xmlSchema/parser.rb * lib/wsdl/xmlSchema/schema.rb * lib/xsd/datatypes.rb * lib/xsd/qname.rb * sample/soap/calc/httpd.rb * sample/soap/exchange/httpd.rb * sample/soap/sampleStruct/httpd.rb * sample/soap/sampleStruct/server.rb * sample/wsdl/amazon/AmazonSearch.rb * sample/wsdl/amazon/AmazonSearchDriver.rb * sample/wsdl/googleSearch/httpd.rb * test/soap/test_basetype.rb * test/soap/test_property.rb * test/soap/test_streamhandler.rb * test/soap/calc/test_calc.rb * test/soap/calc/test_calc2.rb * test/soap/calc/test_calc_cgi.rb * test/soap/helloworld/test_helloworld.rb * test/wsdl/test_emptycomplextype.rb * test/wsdl/axisArray/test_axisarray.rb * test/wsdl/datetime/test_datetime.rb * test/wsdl/raa/test_raa.rb * test/xsd/test_xmlschemaparser.rb * test/xsd/test_xsd.rb * summary * add SOAP Header mustUnderstand support. * add HTTP client SSL configuration and Cookies support (works completely with http-access2). * add header handler for handling sending/receiving SOAP Header. * map Ruby's anonymous Struct to common SOAP Struct in SOAP Object Model. it caused error. * add WSDL simpleType support to restrict lexical value space. * add SOAP with Attachment support. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@6567 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
df2066555d
commit
ab31bf0d4d
60 changed files with 2262 additions and 3170 deletions
|
@ -33,21 +33,14 @@ class StreamHandler
|
|||
attr_accessor :send_contenttype
|
||||
attr_accessor :receive_string
|
||||
attr_accessor :receive_contenttype
|
||||
attr_accessor :is_fault
|
||||
|
||||
def initialize
|
||||
@send_string = nil
|
||||
def initialize(send_string = nil)
|
||||
@send_string = send_string
|
||||
@send_contenttype = nil
|
||||
@receive_string = nil
|
||||
@receive_contenttype = nil
|
||||
@bag = {}
|
||||
end
|
||||
|
||||
def [](idx)
|
||||
@bag[idx]
|
||||
end
|
||||
|
||||
def []=(idx, value)
|
||||
@bag[idx] = value
|
||||
@is_fault = false
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -59,7 +52,7 @@ class StreamHandler
|
|||
|
||||
def self.parse_media_type(str)
|
||||
if /^#{ MediaType }(?:\s*;\s*charset=([^"]+|"[^"]+"))?$/i !~ str
|
||||
raise StreamError.new("Illegal media type.");
|
||||
return nil
|
||||
end
|
||||
charset = $1
|
||||
charset.gsub!(/"/, '') if charset
|
||||
|
@ -90,18 +83,24 @@ public
|
|||
@options = options
|
||||
set_options
|
||||
@client.debug_dev = @wiredump_dev
|
||||
@cookie_store = nil
|
||||
end
|
||||
|
||||
def test_loopback_response
|
||||
@client.test_loopback_response
|
||||
end
|
||||
|
||||
def inspect
|
||||
"#<#{self.class}:#{endpoint_url}>"
|
||||
end
|
||||
|
||||
def send(soap_string, soapaction = nil, charset = @charset)
|
||||
send_post(soap_string, soapaction, charset)
|
||||
def send(conn_data, soapaction = nil, charset = @charset)
|
||||
send_post(conn_data, soapaction, charset)
|
||||
end
|
||||
|
||||
def reset
|
||||
@client.reset(@endpoint_url)
|
||||
@client.save_cookie_store if @cookie_store
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -125,10 +124,6 @@ private
|
|||
@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
|
||||
|
@ -138,12 +133,18 @@ private
|
|||
@wiredump_dev = value
|
||||
@client.debug_dev = @wiredump_dev
|
||||
end
|
||||
ssl_config = @options["ssl_config"] ||= ::SOAP::Property.new
|
||||
set_ssl_config(ssl_config)
|
||||
ssl_config.add_hook(true) do |key, value|
|
||||
set_ssl_config(ssl_config)
|
||||
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)
|
||||
ssl_config.unlock
|
||||
basic_auth.unlock
|
||||
end
|
||||
|
||||
|
@ -154,34 +155,82 @@ private
|
|||
end
|
||||
|
||||
def set_cookie_store_file(value)
|
||||
return unless value
|
||||
raise NotImplementedError.new
|
||||
@cookie_store = value
|
||||
@client.set_cookie_store(@cookie_store) if @cookie_store
|
||||
end
|
||||
|
||||
def set_ssl_config(value)
|
||||
return unless value
|
||||
raise NotImplementedError.new
|
||||
def set_ssl_config(ssl_config)
|
||||
ssl_config.each do |key, value|
|
||||
cfg = @client.ssl_config
|
||||
case key
|
||||
when 'client_cert'
|
||||
cfg.client_cert = cert_from_file(value)
|
||||
when 'client_key'
|
||||
cfg.client_key = key_from_file(value)
|
||||
when 'client_ca'
|
||||
cfg.client_ca = value
|
||||
when 'ca_path'
|
||||
cfg.set_trust_ca(value)
|
||||
when 'ca_file'
|
||||
cfg.set_trust_ca(value)
|
||||
when 'crl'
|
||||
cfg.set_crl(value)
|
||||
when 'verify_mode'
|
||||
cfg.verify_mode = ssl_config_int(value)
|
||||
when 'verify_depth'
|
||||
cfg.verify_depth = ssl_config_int(value)
|
||||
when 'options'
|
||||
cfg.options = value
|
||||
when 'ciphers'
|
||||
cfg.ciphers = value
|
||||
when 'verify_callback'
|
||||
cfg.verify_callback = value
|
||||
when 'cert_store'
|
||||
cfg.cert_store = value
|
||||
else
|
||||
raise ArgumentError.new("unknown ssl_config property #{key}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def send_post(soap_string, soapaction, charset)
|
||||
data = ConnectionData.new
|
||||
data.send_string = soap_string
|
||||
data.send_contenttype = StreamHandler.create_media_type(charset)
|
||||
def ssl_config_int(value)
|
||||
if value.nil? or value.empty?
|
||||
nil
|
||||
else
|
||||
begin
|
||||
Integer(value)
|
||||
rescue ArgumentError
|
||||
::SOAP::Property::Util.const_from_name(value)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def cert_from_file(filename)
|
||||
OpenSSL::X509::Certificate.new(File.open(filename) { |f| f.read })
|
||||
end
|
||||
|
||||
def key_from_file(filename)
|
||||
OpenSSL::PKey::RSA.new(File.open(filename) { |f| f.read })
|
||||
end
|
||||
|
||||
def send_post(conn_data, soapaction, charset)
|
||||
conn_data.send_contenttype ||= StreamHandler.create_media_type(charset)
|
||||
|
||||
if @wiredump_file_base
|
||||
filename = @wiredump_file_base + '_request.xml'
|
||||
f = File.open(filename, "w")
|
||||
f << soap_string
|
||||
f << conn_data.send_string
|
||||
f.close
|
||||
end
|
||||
|
||||
extra = {}
|
||||
extra['Content-Type'] = data.send_contenttype
|
||||
extra['Content-Type'] = conn_data.send_contenttype
|
||||
extra['SOAPAction'] = "\"#{ soapaction }\""
|
||||
send_string = conn_data.send_string
|
||||
|
||||
@wiredump_dev << "Wire dump:\n\n" if @wiredump_dev
|
||||
begin
|
||||
res = @client.post(@endpoint_url, soap_string, extra)
|
||||
res = @client.post(@endpoint_url, send_string, extra)
|
||||
rescue
|
||||
@client.reset(@endpoint_url)
|
||||
raise
|
||||
|
@ -206,10 +255,9 @@ private
|
|||
raise HTTPStreamError.new("#{ res.status }: #{ res.reason }")
|
||||
end
|
||||
|
||||
data.receive_string = receive_string
|
||||
data.receive_contenttype = res.contenttype
|
||||
|
||||
return data
|
||||
conn_data.receive_string = receive_string
|
||||
conn_data.receive_contenttype = res.contenttype
|
||||
conn_data
|
||||
end
|
||||
|
||||
CRLF = "\r\n"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue