soap4r 1.5.6 → 1.5.7

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 (69) hide show
  1. data/bin/wsdl2ruby.rb +1 -1
  2. data/bin/xsd2ruby.rb +12 -4
  3. data/lib/soap/baseData.rb +3 -1
  4. data/lib/soap/encodingstyle/literalHandler.rb +3 -2
  5. data/lib/soap/encodingstyle/soapHandler.rb +7 -4
  6. data/lib/soap/filter.rb +4 -1
  7. data/lib/soap/filter/filterchain.rb +1 -1
  8. data/lib/soap/filter/streamhandler.rb +29 -0
  9. data/lib/soap/generator.rb +6 -0
  10. data/lib/soap/httpconfigloader.rb +21 -6
  11. data/lib/soap/mapping/encodedregistry.rb +2 -1
  12. data/lib/soap/mapping/literalregistry.rb +31 -16
  13. data/lib/soap/mapping/registry.rb +5 -1
  14. data/lib/soap/mapping/rubytypeFactory.rb +3 -0
  15. data/lib/soap/mapping/wsdlliteralregistry.rb +3 -3
  16. data/lib/soap/netHttpClient.rb +6 -0
  17. data/lib/soap/rpc/router.rb +26 -17
  18. data/lib/soap/soap.rb +4 -4
  19. data/lib/soap/streamHandler.rb +61 -26
  20. data/lib/wsdl/soap/classDefCreator.rb +4 -2
  21. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +7 -2
  22. data/lib/wsdl/soap/mappingRegistryCreator.rb +0 -2
  23. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +2 -0
  24. data/lib/wsdl/soap/methodDefCreator.rb +6 -3
  25. data/lib/wsdl/xmlSchema/element.rb +4 -0
  26. data/lib/wsdl/xmlSchema/importer.rb +21 -9
  27. data/lib/wsdl/xmlSchema/xsd2ruby.rb +56 -3
  28. data/lib/xsd/mapping.rb +30 -13
  29. data/test/interopR2/client.log +5 -0
  30. data/test/interopR2/client.rb +9 -3
  31. data/test/interopR2/server.rb +1 -0
  32. data/test/soap/asp.net/test_aspdotnet.rb +1 -1
  33. data/test/soap/auth/htdigest +2 -0
  34. data/test/soap/auth/htpasswd +2 -0
  35. data/test/soap/auth/test_basic.rb +116 -0
  36. data/test/soap/auth/test_digest.rb +117 -0
  37. data/test/soap/htpasswd +2 -0
  38. data/test/soap/ssl/README +1 -1
  39. data/test/soap/ssl/test_ssl.rb +9 -9
  40. data/test/soap/test_cookie.rb +112 -0
  41. data/test/soap/test_custom_ns.rb +63 -0
  42. data/test/soap/test_httpconfigloader.rb +20 -5
  43. data/test/soap/test_mapping.rb +62 -0
  44. data/test/soap/test_nil.rb +55 -0
  45. data/test/soap/test_no_indent.rb +1 -1
  46. data/test/soap/test_streamhandler.rb +26 -14
  47. data/test/wsdl/datetime/datetimeServant.rb +1 -0
  48. data/test/wsdl/datetime/test_datetime.rb +4 -0
  49. data/test/wsdl/document/array/double.wsdl +50 -0
  50. data/test/wsdl/document/array/test_array.rb +34 -7
  51. data/test/wsdl/qualified/test_qualified.rb +1 -1
  52. data/test/wsdl/qualified/test_unqualified.rb +2 -16
  53. data/test/wsdl/rpc/test_rpc.rb +3 -0
  54. data/test/wsdl/rpc/test_rpc_lit.rb +1 -1
  55. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +2 -2
  56. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +2 -2
  57. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +1 -1
  58. data/test/xsd/xsd2ruby/expected_mysample.rb +54 -0
  59. data/test/xsd/xsd2ruby/expected_mysample_mapper.rb +11 -0
  60. data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +57 -0
  61. data/test/xsd/xsd2ruby/section.xsd +41 -0
  62. data/test/xsd/xsd2ruby/test_xsd2ruby.rb +90 -0
  63. metadata +31 -12
  64. data/lib/soap/mapping/encodedregistry.rb~ +0 -531
  65. data/lib/tags +0 -5144
  66. data/lib/xsd/classloader.rb +0 -26
  67. data/test/interopR2/result_client.NetRemoting.txt +0 -0
  68. data/test/wsdl/rpc/test-rpc-lit-qualified.wsdl +0 -74
  69. data/test/wsdl/rpc/test-rpc-lit12.wsdl +0 -455
@@ -0,0 +1,63 @@
1
+ require 'test/unit'
2
+ require 'soap/processor'
3
+
4
+
5
+ module SOAP
6
+
7
+
8
+ class TestCustomNs < Test::Unit::TestCase
9
+ NORMAL_XML = <<__XML__.chomp
10
+ <?xml version="1.0" encoding="utf-8" ?>
11
+ <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
12
+ xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
13
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
14
+ <env:Header>
15
+ <n1:headeritem xmlns:n1="my:foo"
16
+ env:mustUnderstand="0">hi</n1:headeritem>
17
+ </env:Header>
18
+ <env:Body>
19
+ <n2:test xmlns:n2="my:foo">bi</n2:test>
20
+ </env:Body>
21
+ </env:Envelope>
22
+ __XML__
23
+
24
+ CUSTOM_NS_XML = <<__XML__.chomp
25
+ <?xml version="1.0" encoding="utf-8" ?>
26
+ <ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
27
+ xmlns:ENV="http://schemas.xmlsoap.org/soap/envelope/"
28
+ xmlns:myns="my:foo"
29
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
30
+ <ENV:Header>
31
+ <myns:headeritem ENV:mustUnderstand="0">hi</myns:headeritem>
32
+ </ENV:Header>
33
+ <ENV:Body>
34
+ <myns:test>bi</myns:test>
35
+ </ENV:Body>
36
+ </ENV:Envelope>
37
+ __XML__
38
+
39
+ def test_custom_ns
40
+ # create test env
41
+ header = SOAP::SOAPHeader.new()
42
+ hi = SOAP::SOAPElement.new(XSD::QName.new("my:foo", "headeritem"), 'hi')
43
+ header.add("test", hi)
44
+ body = SOAP::SOAPBody.new()
45
+ bi = SOAP::SOAPElement.new(XSD::QName.new("my:foo", "bodyitem"), 'bi')
46
+ body.add("test", bi)
47
+ env = SOAP::SOAPEnvelope.new(header, body)
48
+ # normal
49
+ opt = {}
50
+ result = SOAP::Processor.marshal(env, opt)
51
+ assert_equal(NORMAL_XML, result)
52
+ # ns customize
53
+ ns = XSD::NS.new
54
+ ns.assign(SOAP::EnvelopeNamespace, 'ENV')
55
+ ns.assign('my:foo', 'myns')
56
+ opt = { :default_ns => ns }
57
+ result = SOAP::Processor.marshal(env, opt)
58
+ assert_equal(CUSTOM_NS_XML, result)
59
+ end
60
+ end
61
+
62
+
63
+ end
@@ -2,7 +2,7 @@ require 'test/unit'
2
2
  require 'soap/httpconfigloader'
3
3
  require 'soap/rpc/driver'
4
4
 
5
- if defined?(HTTPAccess2)
5
+ if defined?(HTTPClient)
6
6
 
7
7
  module SOAP
8
8
 
@@ -14,6 +14,20 @@ class TestHTTPConfigLoader < Test::Unit::TestCase
14
14
  @client = SOAP::RPC::Driver.new(nil, nil)
15
15
  end
16
16
 
17
+ class Request
18
+ class Header
19
+ attr_reader :request_uri
20
+ def initialize(request_uri)
21
+ @request_uri = request_uri
22
+ end
23
+ end
24
+
25
+ attr_reader :header
26
+ def initialize(request_uri)
27
+ @header = Header.new(request_uri)
28
+ end
29
+ end
30
+
17
31
  def test_property
18
32
  testpropertyname = File.join(DIR, 'soapclient.properties')
19
33
  File.open(testpropertyname, "w") do |f|
@@ -37,13 +51,14 @@ __EOP__
37
51
  @client.options['protocol.http.basic_auth'] <<
38
52
  ['http://www.example.com/foo3/', 'user3', 'password3']
39
53
  h = @client.streamhandler.client
40
- basic_auth = h.instance_eval { @basic_auth }
54
+ basic_auth = h.www_auth.basic_auth
41
55
  cred1 = ["user1:password1"].pack('m').tr("\n", '')
42
56
  cred2 = ["user2:password2"].pack('m').tr("\n", '')
43
57
  cred3 = ["user3:password3"].pack('m').tr("\n", '')
44
- assert_equal(cred1, basic_auth.get(URI.parse("http://www.example.com/foo1/baz")))
45
- assert_equal(cred2, basic_auth.get(URI.parse("http://www.example.com/foo2/")))
46
- assert_equal(cred3, basic_auth.get(URI.parse("http://www.example.com/foo3/baz/qux")))
58
+ basic_auth.challenge(URI.parse("http://www.example.com/"), nil)
59
+ assert_equal(cred1, basic_auth.get(Request.new(URI.parse("http://www.example.com/foo1/baz"))))
60
+ assert_equal(cred2, basic_auth.get(Request.new(URI.parse("http://www.example.com/foo2/"))))
61
+ assert_equal(cred3, basic_auth.get(Request.new(URI.parse("http://www.example.com/foo3/baz/qux"))))
47
62
  ensure
48
63
  File.unlink(testpropertyname)
49
64
  end
@@ -1,11 +1,73 @@
1
1
  require 'test/unit'
2
2
  require 'soap/mapping'
3
+ require 'soap/marshal'
3
4
 
4
5
 
5
6
  module SOAP
6
7
 
7
8
 
8
9
  class TestMapping < Test::Unit::TestCase
10
+
11
+ class MappablePerson
12
+ attr_reader :name
13
+ attr_reader :age
14
+
15
+ def initialize(name, age)
16
+ @name, @age = name, age
17
+ end
18
+
19
+ def self.soap_marshallable
20
+ true
21
+ end
22
+ end
23
+
24
+ class UnmappablePerson
25
+ attr_reader :name
26
+ attr_reader :age
27
+
28
+ def initialize(name, age)
29
+ @name, @age = name, age
30
+ end
31
+
32
+ def self.soap_marshallable
33
+ false
34
+ end
35
+ end
36
+
37
+ def test_mappable
38
+ xml = <<__XML__
39
+ <?xml version="1.0" encoding="utf-8" ?>
40
+ <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
41
+ xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
42
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
43
+ <env:Body>
44
+ <SOAP..TestMapping..MappablePerson env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
45
+ <name>nahi</name>
46
+ <age>37</age>
47
+ </SOAP..TestMapping..MappablePerson>
48
+ </env:Body>
49
+ </env:Envelope>
50
+ __XML__
51
+ obj = SOAP::Marshal.load(xml)
52
+ assert_equal(SOAP::TestMapping::MappablePerson, obj.class)
53
+ #
54
+ xml = <<__XML__
55
+ <?xml version="1.0" encoding="utf-8" ?>
56
+ <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
57
+ xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
58
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
59
+ <env:Body>
60
+ <SOAP..TestMapping..UnmappablePerson env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
61
+ <name>nahi</name>
62
+ <age>37</age>
63
+ </SOAP..TestMapping..UnmappablePerson>
64
+ </env:Body>
65
+ </env:Envelope>
66
+ __XML__
67
+ obj = SOAP::Marshal.load(xml)
68
+ assert_equal(SOAP::Mapping::Object, obj.class)
69
+ end
70
+
9
71
  def test_date
10
72
  targets = [
11
73
  ["2002-12-31",
@@ -0,0 +1,55 @@
1
+ require 'test/unit'
2
+ require 'soap/rpc/standaloneServer'
3
+ require 'soap/rpc/driver'
4
+ require 'soap/header/handler'
5
+
6
+
7
+ module SOAP
8
+
9
+
10
+ class TestNil < Test::Unit::TestCase
11
+ Port = 17171
12
+
13
+ class NilServer < SOAP::RPC::StandaloneServer
14
+ def initialize(*arg)
15
+ super
16
+ add_method(self, 'nop')
17
+ end
18
+
19
+ def nop
20
+ 1
21
+ end
22
+ end
23
+
24
+ def setup
25
+ @server = NilServer.new(self.class.name, nil, '0.0.0.0', Port)
26
+ @server.level = Logger::Severity::ERROR
27
+ @t = Thread.new {
28
+ @server.start
29
+ }
30
+ @endpoint = "http://localhost:#{Port}/"
31
+ @client = SOAP::RPC::Driver.new(@endpoint)
32
+ @client.add_rpc_method('nop')
33
+ end
34
+
35
+ def teardown
36
+ @server.shutdown
37
+ @t.kill
38
+ @t.join
39
+ @client.reset_stream
40
+ end
41
+
42
+ require 'rexml/document'
43
+ # emulates SOAP::Lite's nil request
44
+ def test_soaplite_nil
45
+ body = SOAP::SOAPBody.new(REXML::Document.new(<<-__XML__))
46
+ <nop xsi:nil="true"/>
47
+ __XML__
48
+ @client.wiredump_dev = STDOUT if $DEBUG
49
+ header, body = @client.invoke(nil, body)
50
+ assert_equal(1, body.root_node["return"].data)
51
+ end
52
+ end
53
+
54
+
55
+ end
@@ -2,7 +2,7 @@ require 'test/unit'
2
2
  require 'soap/rpc/standaloneServer'
3
3
  require 'soap/rpc/driver'
4
4
 
5
- if defined?(HTTPAccess2)
5
+ if defined?(HTTPClient)
6
6
 
7
7
  module SOAP
8
8
 
@@ -42,6 +42,16 @@ class TestStreamHandler < Test::Unit::TestCase
42
42
  '/',
43
43
  WEBrick::HTTPServlet::ProcHandler.new(method(:do_server_proc).to_proc)
44
44
  )
45
+ htpasswd = File.join(File.dirname(__FILE__), 'htpasswd')
46
+ htpasswd_userdb = WEBrick::HTTPAuth::Htpasswd.new(htpasswd)
47
+ @basic_auth = WEBrick::HTTPAuth::BasicAuth.new(
48
+ :Realm => 'auth',
49
+ :UserDB => htpasswd_userdb
50
+ )
51
+ @server.mount(
52
+ '/basic_auth',
53
+ WEBrick::HTTPServlet::ProcHandler.new(method(:do_server_proc_basic_auth).to_proc)
54
+ )
45
55
  @server_thread = TestUtil.start_server_thread(@server)
46
56
  end
47
57
 
@@ -58,6 +68,7 @@ class TestStreamHandler < Test::Unit::TestCase
58
68
  def setup_client
59
69
  @client = SOAP::RPC::Driver.new(@url, '')
60
70
  @client.add_method("do_server_proc")
71
+ @client.add_method("do_server_proc_basic_auth")
61
72
  end
62
73
 
63
74
  def teardown_server
@@ -90,10 +101,12 @@ class TestStreamHandler < Test::Unit::TestCase
90
101
  __EOX__
91
102
  end
92
103
 
104
+ def do_server_proc_basic_auth(req, res)
105
+ @basic_auth.authenticate(req, res)
106
+ do_server_proc(req, res)
107
+ end
108
+
93
109
  def parse_req_header(str)
94
- if ::SOAP::HTTPStreamHandler::Client.to_s == 'SOAP::NetHttpClient'
95
- str = eval(str.split(/\r?\n/)[4][3..-1])
96
- end
97
110
  parse_req_header_http_access2(str)
98
111
  end
99
112
 
@@ -141,24 +154,23 @@ __EOX__
141
154
  end
142
155
 
143
156
  def test_basic_auth
144
- unless Object.const_defined?('HTTPAccess2')
157
+ unless Object.const_defined?('HTTPClient')
145
158
  # soap4r + net/http + basic_auth is not supported.
146
- # use http-access2 instead.
159
+ # use httpclient instead.
147
160
  assert(true)
148
161
  return
149
162
  end
163
+ @client.endpoint_url = @url + 'basic_auth'
150
164
  str = ""
151
165
  @client.wiredump_dev = str
152
- @client.options["protocol.http.basic_auth"] << [@url, "foo", "bar"]
153
- assert_nil(@client.do_server_proc)
154
- r, h = parse_req_header(str)
155
- assert_equal("Basic Zm9vOmJhcg==", h["authorization"])
166
+ @client.options["protocol.http.basic_auth"] << [@url, "admin", "admin"]
167
+ assert_nil(@client.do_server_proc_basic_auth)
156
168
  end
157
169
 
158
170
  def test_proxy
159
- if Object.const_defined?('HTTPAccess2')
160
- backup = HTTPAccess2::Client::NO_PROXY_HOSTS.dup
161
- HTTPAccess2::Client::NO_PROXY_HOSTS.clear
171
+ if Object.const_defined?('HTTPClient')
172
+ backup = HTTPClient::NO_PROXY_HOSTS.dup
173
+ HTTPClient::NO_PROXY_HOSTS.clear
162
174
  else
163
175
  backup = SOAP::NetHttpClient::NO_PROXY_HOSTS.dup
164
176
  SOAP::NetHttpClient::NO_PROXY_HOSTS.clear
@@ -175,8 +187,8 @@ __EOX__
175
187
  @client.options["protocol.http.proxy"] = 'ftp://foo:8080'
176
188
  end
177
189
  ensure
178
- if Object.const_defined?('HTTPAccess2')
179
- HTTPAccess2::Client::NO_PROXY_HOSTS.replace(backup)
190
+ if Object.const_defined?('HTTPClient')
191
+ HTTPClient::NO_PROXY_HOSTS.replace(backup)
180
192
  else
181
193
  SOAP::NetHttpClient::NO_PROXY_HOSTS.replace(backup)
182
194
  end
@@ -15,6 +15,7 @@ class DatetimePortType
15
15
  #
16
16
  def now(now)
17
17
  #raise NotImplementedError.new
18
+ return nil if now.nil?
18
19
  now + 1
19
20
  end
20
21
  end
@@ -75,6 +75,10 @@ class TestDatetime < Test::Unit::TestCase
75
75
  assert_equal(d1.sec, d2.sec)
76
76
  assert_equal(d1.sec, d2.sec)
77
77
  end
78
+
79
+ def test_nil
80
+ assert_nil(@client.now(nil))
81
+ end
78
82
  end
79
83
 
80
84
 
@@ -32,6 +32,36 @@
32
32
  </s:complexType>
33
33
  </s:element>
34
34
  <s:element name="ArrayOfDouble" nillable="true" type="tns:ArrayOfDouble"/>
35
+
36
+ <s:element name="echo2">
37
+ <s:complexType>
38
+ <s:sequence>
39
+ <s:element name="arg" type="tns:ArrayOfComplex"/>
40
+ </s:sequence>
41
+ </s:complexType>
42
+ </s:element>
43
+ <s:element name="echo2Response">
44
+ <s:complexType>
45
+ <s:sequence>
46
+ <s:element name="arg" type="tns:ArrayOfComplex"/>
47
+ </s:sequence>
48
+ </s:complexType>
49
+ </s:element>
50
+ <s:element name="ArrayOfComplex">
51
+ <s:complexType>
52
+ <s:sequence>
53
+ <s:element ref="tns:Complex" maxOccurs="3"/>
54
+ </s:sequence>
55
+ </s:complexType>
56
+ </s:element>
57
+ <s:element name="Complex">
58
+ <s:complexType>
59
+ <s:sequence>
60
+ <s:element name="string" type="s:string"/>
61
+ <s:element name="double" type="s:double"/>
62
+ </s:sequence>
63
+ </s:complexType>
64
+ </s:element>
35
65
  </s:schema>
36
66
  </wsdl:types>
37
67
 
@@ -41,12 +71,23 @@
41
71
  <wsdl:message name="echoOut">
42
72
  <wsdl:part name="parameters" element="tns:echoResponse"/>
43
73
  </wsdl:message>
74
+ <wsdl:message name="echo2In">
75
+ <wsdl:part name="parameters" element="tns:echo2"/>
76
+ </wsdl:message>
77
+ <wsdl:message name="echo2Out">
78
+ <wsdl:part name="parameters" element="tns:echo2Response"/>
79
+ </wsdl:message>
44
80
 
45
81
  <wsdl:portType name="pricerSoap">
46
82
  <wsdl:operation name="echo">
47
83
  <wsdl:input message="tns:echoIn"/>
48
84
  <wsdl:output message="tns:echoOut"/>
49
85
  </wsdl:operation>
86
+
87
+ <wsdl:operation name="echo2">
88
+ <wsdl:input message="tns:echo2In"/>
89
+ <wsdl:output message="tns:echo2Out"/>
90
+ </wsdl:operation>
50
91
  </wsdl:portType>
51
92
 
52
93
  <wsdl:binding name="pricerSoap" type="tns:pricerSoap">
@@ -61,6 +102,15 @@
61
102
  <soap:body use="literal"/>
62
103
  </wsdl:output>
63
104
  </wsdl:operation>
105
+ <wsdl:operation name="echo2">
106
+ <soap:operation soapAction="http://tempuri.org/echo2" style="document"/>
107
+ <wsdl:input>
108
+ <soap:body use="literal"/>
109
+ </wsdl:input>
110
+ <wsdl:output>
111
+ <soap:body use="literal"/>
112
+ </wsdl:output>
113
+ </wsdl:operation>
64
114
  </wsdl:binding>
65
115
 
66
116
  <wsdl:service name="pricer">
@@ -21,12 +21,23 @@ class TestArray < Test::Unit::TestCase
21
21
  XSD::QName.new(Namespace, 'echo'),
22
22
  XSD::QName.new(Namespace, 'echoResponse')
23
23
  )
24
+ add_document_method(
25
+ self,
26
+ Namespace + 'echo2',
27
+ 'echo2',
28
+ XSD::QName.new(Namespace, 'echo2'),
29
+ XSD::QName.new(Namespace, 'echo2Response')
30
+ )
24
31
  self.literal_mapping_registry = DoubleMappingRegistry::LiteralRegistry
25
32
  end
26
33
 
27
34
  def echo(arg)
28
35
  arg
29
36
  end
37
+
38
+ def echo2(arg)
39
+ arg
40
+ end
30
41
  end
31
42
 
32
43
  DIR = File.dirname(File.expand_path(__FILE__))
@@ -44,6 +55,7 @@ class TestArray < Test::Unit::TestCase
44
55
  unless $DEBUG
45
56
  File.unlink(pathname('double.rb'))
46
57
  File.unlink(pathname('doubleMappingRegistry.rb'))
58
+ File.unlink(pathname('doubleDriver.rb'))
47
59
  end
48
60
  @client.reset_stream if @client
49
61
  end
@@ -61,10 +73,11 @@ class TestArray < Test::Unit::TestCase
61
73
  gen.logger.level = Logger::FATAL
62
74
  gen.opt['classdef'] = nil
63
75
  gen.opt['mapping_registry'] = nil
76
+ gen.opt['driver'] = nil
64
77
  gen.opt['module_path'] = self.class.to_s.sub(/::[^:]+$/, '')
65
78
  gen.opt['force'] = true
66
79
  gen.run
67
- TestUtil.require(DIR, 'doubleMappingRegistry.rb', 'double.rb')
80
+ TestUtil.require(DIR, 'doubleDriver.rb', 'doubleMappingRegistry.rb', 'double.rb')
68
81
  end
69
82
 
70
83
  def teardown_server
@@ -78,6 +91,25 @@ class TestArray < Test::Unit::TestCase
78
91
  end
79
92
 
80
93
  def test_stub
94
+ @client = PricerSoap.new
95
+ @client.endpoint_url = "http://localhost:#{Port}/"
96
+ @client.wiredump_dev = STDOUT if $DEBUG
97
+ arg = ArrayOfComplex[c1 = Complex.new, c2 = Complex.new, c3 = Complex.new]
98
+ c1.string = "str_c1"
99
+ c1.double = 1.1
100
+ c2.string = "str_c2"
101
+ c2.double = 2.2
102
+ c3.string = "str_c3"
103
+ c3.double = 3.3
104
+ ret = @client.echo2(Echo2.new(arg))
105
+ assert_equal(ArrayOfComplex, ret.arg.class)
106
+ assert_equal(Complex, ret.arg[0].class)
107
+ assert_equal(arg[0].string, ret.arg[0].string)
108
+ assert_equal(arg[1].string, ret.arg[1].string)
109
+ assert_equal(arg[2].string, ret.arg[2].string)
110
+ end
111
+
112
+ def test_wsdl_stubclassdef
81
113
  wsdl = File.join(DIR, 'double.wsdl')
82
114
  @client = ::SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver
83
115
  @client.endpoint_url = "http://localhost:#{Port}/"
@@ -94,12 +126,7 @@ class TestArray < Test::Unit::TestCase
94
126
  @client.literal_mapping_registry = DoubleMappingRegistry::LiteralRegistry
95
127
  @client.wiredump_dev = STDOUT if $DEBUG
96
128
  double = [0.1, 0.2, 0.3]
97
- arg = {
98
- :ary => {
99
- XSD::QName.new("http://tempuri.org/", "double") => double
100
- }
101
- }
102
- assert_equal(double, @client.echo(arg).ary)
129
+ assert_equal(double, @client.echo(:ary => double).ary)
103
130
  end
104
131
  end
105
132