soap4r 1.5.7 → 1.5.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. data/bin/wsdl2ruby.rb +8 -2
  2. data/lib/soap/baseData.rb +93 -43
  3. data/lib/soap/element.rb +11 -8
  4. data/lib/soap/encodingstyle/handler.rb +15 -4
  5. data/lib/soap/encodingstyle/literalHandler.rb +18 -24
  6. data/lib/soap/encodingstyle/soapHandler.rb +34 -77
  7. data/lib/soap/generator.rb +74 -48
  8. data/lib/soap/header/handler.rb +1 -1
  9. data/lib/soap/header/mappinghandler.rb +47 -0
  10. data/lib/soap/mapping/encodedregistry.rb +19 -13
  11. data/lib/soap/mapping/factory.rb +19 -3
  12. data/lib/soap/mapping/literalregistry.rb +47 -35
  13. data/lib/soap/mapping/mapping.rb +92 -24
  14. data/lib/soap/mapping/registry.rb +34 -18
  15. data/lib/soap/mapping/schemadefinition.rb +8 -1
  16. data/lib/soap/mapping/typeMap.rb +18 -0
  17. data/lib/soap/mapping/wsdlencodedregistry.rb +8 -50
  18. data/lib/soap/mapping/wsdlliteralregistry.rb +45 -39
  19. data/lib/soap/nestedexception.rb +42 -0
  20. data/lib/soap/netHttpClient.rb +1 -0
  21. data/lib/soap/ns.rb +34 -0
  22. data/lib/soap/parser.rb +32 -29
  23. data/lib/soap/processor.rb +1 -1
  24. data/lib/soap/rpc/driver.rb +1 -0
  25. data/lib/soap/rpc/element.rb +18 -6
  26. data/lib/soap/rpc/httpserver.rb +38 -24
  27. data/lib/soap/rpc/proxy.rb +14 -11
  28. data/lib/soap/rpc/router.rb +4 -1
  29. data/lib/soap/soap.rb +7 -6
  30. data/lib/soap/wsdlDriver.rb +29 -8
  31. data/lib/tags +5690 -0
  32. data/lib/wsdl/definitions.rb +26 -40
  33. data/lib/wsdl/info.rb +11 -0
  34. data/lib/wsdl/parser.rb +2 -2
  35. data/lib/wsdl/soap/cgiStubCreator.rb +10 -5
  36. data/lib/wsdl/soap/classDefCreator.rb +140 -113
  37. data/lib/wsdl/soap/classDefCreatorSupport.rb +94 -12
  38. data/lib/wsdl/soap/classNameCreator.rb +54 -0
  39. data/lib/wsdl/soap/clientSkeltonCreator.rb +6 -5
  40. data/lib/wsdl/soap/complexType.rb +10 -1
  41. data/lib/wsdl/soap/definitions.rb +4 -0
  42. data/lib/wsdl/soap/driverCreator.rb +14 -6
  43. data/lib/wsdl/soap/element.rb +4 -0
  44. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +11 -55
  45. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +28 -126
  46. data/lib/wsdl/soap/mappingRegistryCreator.rb +9 -3
  47. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +209 -94
  48. data/lib/wsdl/soap/methodDefCreator.rb +12 -16
  49. data/lib/wsdl/soap/servantSkeltonCreator.rb +3 -2
  50. data/lib/wsdl/soap/servletStubCreator.rb +107 -0
  51. data/lib/wsdl/soap/standaloneServerStubCreator.rb +10 -5
  52. data/lib/wsdl/soap/wsdl2ruby.rb +28 -13
  53. data/lib/wsdl/wsdl.rb +2 -1
  54. data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
  55. data/lib/wsdl/xmlSchema/attributeGroup.rb +86 -0
  56. data/lib/wsdl/xmlSchema/choice.rb +4 -1
  57. data/lib/wsdl/xmlSchema/complexContent.rb +1 -1
  58. data/lib/wsdl/xmlSchema/complexExtension.rb +9 -1
  59. data/lib/wsdl/xmlSchema/complexRestriction.rb +8 -0
  60. data/lib/wsdl/xmlSchema/complexType.rb +38 -5
  61. data/lib/wsdl/xmlSchema/data.rb +30 -7
  62. data/lib/wsdl/xmlSchema/element.rb +10 -2
  63. data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
  64. data/lib/wsdl/xmlSchema/group.rb +118 -0
  65. data/lib/wsdl/xmlSchema/import.rb +11 -23
  66. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  67. data/lib/wsdl/xmlSchema/include.rb +11 -17
  68. data/lib/wsdl/xmlSchema/length.rb +3 -1
  69. data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
  70. data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
  71. data/lib/wsdl/xmlSchema/maxlength.rb +3 -1
  72. data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
  73. data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
  74. data/lib/wsdl/xmlSchema/minlength.rb +3 -1
  75. data/lib/wsdl/xmlSchema/schema.rb +34 -0
  76. data/lib/wsdl/xmlSchema/sequence.rb +4 -1
  77. data/lib/wsdl/xmlSchema/simpleExtension.rb +8 -0
  78. data/lib/wsdl/xmlSchema/simpleRestriction.rb +49 -8
  79. data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
  80. data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
  81. data/lib/wsdl/xmlSchema/xsd2ruby.rb +13 -4
  82. data/lib/xsd/charset.rb +8 -6
  83. data/lib/xsd/codegen/classdef.rb +5 -0
  84. data/lib/xsd/codegen/moduledef.rb +17 -0
  85. data/lib/xsd/datatypes.rb +165 -20
  86. data/lib/xsd/mapping.rb +13 -5
  87. data/lib/xsd/namedelements.rb +8 -0
  88. data/lib/xsd/ns.rb +50 -14
  89. data/lib/xsd/qname.rb +3 -2
  90. data/lib/xsd/xmlparser.rb +4 -3
  91. data/test/soap/asp.net/test_aspdotnet.rb +1 -1
  92. data/test/soap/auth/test_basic.rb +4 -3
  93. data/test/soap/auth/test_digest.rb +4 -3
  94. data/test/soap/calc/test_calc.rb +6 -4
  95. data/test/soap/calc/test_calc2.rb +6 -4
  96. data/test/soap/calc/test_calc_cgi.rb +6 -4
  97. data/test/soap/fault/test_customfault.rb +6 -4
  98. data/test/soap/fault/test_soaparray.rb +35 -0
  99. data/test/soap/filter/test_filter.rb +2 -2
  100. data/test/soap/header/test_authheader.rb +2 -2
  101. data/test/soap/header/test_authheader_cgi.rb +3 -3
  102. data/test/soap/header/test_simplehandler.rb +2 -2
  103. data/test/soap/helloworld/test_helloworld.rb +6 -4
  104. data/test/soap/ssl/test_ssl.rb +1 -1
  105. data/test/soap/struct/test_struct.rb +2 -2
  106. data/test/soap/swa/test_file.rb +6 -4
  107. data/test/soap/test_basetype.rb +4 -4
  108. data/test/soap/test_cookie.rb +2 -2
  109. data/test/soap/test_custom_ns.rb +50 -8
  110. data/test/soap/test_custommap.rb +6 -4
  111. data/test/soap/test_empty.rb +6 -4
  112. data/test/soap/test_envelopenamespace.rb +2 -2
  113. data/test/soap/test_extraattr.rb +6 -7
  114. data/test/soap/test_generator.rb +27 -0
  115. data/test/soap/test_mapping.rb +10 -0
  116. data/test/soap/test_nestedexception.rb +56 -0
  117. data/test/soap/test_nil.rb +6 -4
  118. data/test/soap/test_no_indent.rb +6 -4
  119. data/test/soap/test_response_as_xml.rb +2 -2
  120. data/test/soap/test_streamhandler.rb +6 -3
  121. data/test/soap/test_styleuse.rb +2 -2
  122. data/test/soap/wsdlDriver/test_calc.rb +2 -2
  123. data/test/soap/wsdlDriver/test_document.rb +2 -2
  124. data/test/soap/wsdlDriver/test_simpletype.rb +2 -2
  125. data/test/wsdl/abstract/test_abstract.rb +1 -1
  126. data/test/wsdl/anonymous/expectedClassDef.rb +128 -0
  127. data/test/wsdl/anonymous/expectedDriver.rb +59 -0
  128. data/test/wsdl/anonymous/expectedMappingRegistry.rb +176 -0
  129. data/test/wsdl/anonymous/lp.wsdl +147 -0
  130. data/test/wsdl/anonymous/test_anonymous.rb +130 -0
  131. data/test/wsdl/any/expectedDriver.rb +3 -2
  132. data/test/wsdl/any/expectedEcho.rb +22 -2
  133. data/test/wsdl/any/expectedMappingRegistry.rb +63 -0
  134. data/test/wsdl/any/expectedService.rb +3 -1
  135. data/test/wsdl/any/test_any.rb +2 -7
  136. data/test/wsdl/axisArray/axisArray.wsdl +31 -4
  137. data/test/wsdl/axisArray/test_axisarray.rb +58 -3
  138. data/test/wsdl/choice/choice.wsdl +39 -0
  139. data/test/wsdl/choice/test_choice.rb +134 -7
  140. data/test/wsdl/complexcontent/test_echo.rb +1 -1
  141. data/test/wsdl/datetime/test_datetime.rb +2 -2
  142. data/test/wsdl/document/array/double.wsdl +45 -6
  143. data/test/wsdl/document/array/test_array.rb +68 -1
  144. data/test/wsdl/document/document.wsdl +2 -0
  145. data/test/wsdl/document/test_nosoapaction.rb +1 -1
  146. data/test/wsdl/document/test_number.rb +1 -1
  147. data/test/wsdl/document/test_rpc.rb +78 -9
  148. data/test/wsdl/fault/test_fault.rb +1 -1
  149. data/test/wsdl/fault/test_multifault.rb +1 -1
  150. data/test/wsdl/group/expectedClassdef.rb +58 -0
  151. data/test/wsdl/group/expectedDriver.rb +51 -0
  152. data/test/wsdl/group/expectedMappingRegistry.rb +67 -0
  153. data/test/wsdl/group/group.wsdl +88 -0
  154. data/test/wsdl/group/test_rpc.rb +145 -0
  155. data/test/wsdl/list/test_list.rb +1 -1
  156. data/test/wsdl/map/test_map.rb +2 -2
  157. data/test/wsdl/marshal/person_org.rb +5 -0
  158. data/test/wsdl/multiplefault.wsdl +11 -4
  159. data/test/wsdl/oneway/test_oneway.rb +1 -1
  160. data/test/wsdl/overload/test_overload.rb +1 -1
  161. data/test/wsdl/qualified/test_qualified.rb +1 -1
  162. data/test/wsdl/qualified/test_unqualified.rb +1 -1
  163. data/test/wsdl/raa/RAAService.rb +62 -57
  164. data/test/wsdl/raa/expectedClassDef.rb +100 -0
  165. data/test/wsdl/raa/expectedDriver.rb +96 -0
  166. data/test/wsdl/raa/expectedMappingRegistry.rb +121 -0
  167. data/test/wsdl/raa/test_raa.rb +54 -19
  168. data/test/wsdl/ref/expectedDriver.rb +1 -1
  169. data/test/wsdl/ref/expectedProduct.rb +101 -16
  170. data/test/wsdl/ref/test_ref.rb +2 -1
  171. data/test/wsdl/rpc/test_rpc.rb +1 -2
  172. data/test/wsdl/rpc/test_rpc_lit.rb +13 -13
  173. data/test/wsdl/simplecontent/test_simplecontent.rb +5 -5
  174. data/test/wsdl/simpletype/rpc/expectedDriver.rb +3 -2
  175. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +2 -0
  176. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +10 -17
  177. data/test/wsdl/simpletype/rpc/expectedService.rb +4 -2
  178. data/test/wsdl/simpletype/test_simpletype.rb +2 -2
  179. data/test/wsdl/soap/test_soapbodyparts.rb +2 -2
  180. data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +2 -0
  181. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +3 -2
  182. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +5 -9
  183. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +4 -2
  184. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +4 -2
  185. data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +6 -0
  186. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +1 -1
  187. data/test/wsdl/soaptype/test_soaptype.rb +1 -1
  188. data/test/wsdl/test_multiplefault.rb +3 -1
  189. data/test/xsd/codegen/test_classdef.rb +30 -0
  190. data/test/xsd/test_ns.rb +21 -0
  191. data/test/xsd/test_xsd.rb +5 -4
  192. data/test/xsd/xsd2ruby/expected_mysample.rb +13 -2
  193. data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +5 -11
  194. data/test/xsd/xsd2ruby/section.xsd +8 -0
  195. metadata +40 -8
  196. data/test/wsdl/axisArray/itemList.rb +0 -14
  197. data/test/wsdl/raa/RAA.rb +0 -120
  198. data/test/wsdl/raa/RAAServant.rb +0 -107
  199. data/test/wsdl/raa/server.rb +0 -103
@@ -28,22 +28,30 @@ module Mapping
28
28
  end
29
29
 
30
30
  class Mapper
31
- MAPPING_OPT = {:default_encodingstyle => SOAP::LiteralNamespace}
31
+ MAPPING_OPT = {
32
+ :default_encodingstyle => SOAP::LiteralNamespace,
33
+ :root_type_hint => true
34
+ }.freeze
32
35
 
33
36
  def initialize(registry)
34
37
  @registry = registry
35
38
  end
36
39
 
37
40
  def obj2xml(obj, elename = nil, io = nil)
38
- if !elename.nil? and !elename.is_a?(XSD::QName)
39
- elename = XSD::QName.new(nil, elename)
41
+ opt = MAPPING_OPT.dup
42
+ unless elename
43
+ if definition = @registry.elename_schema_definition_from_class(obj.class)
44
+ elename = definition.elename
45
+ opt[:root_type_hint] = false
46
+ end
40
47
  end
41
- soap = SOAP::Mapping.obj2soap(obj, @registry, elename)
48
+ elename = SOAP::Mapping.to_qname(elename) if elename
49
+ soap = SOAP::Mapping.obj2soap(obj, @registry, elename, opt)
42
50
  if soap.elename.nil? or soap.elename == XSD::QName::EMPTY
43
51
  soap.elename =
44
52
  XSD::QName.new(nil, SOAP::Mapping.name2elename(obj.class.to_s))
45
53
  end
46
- generator = SOAP::SOAPGenerator.new(MAPPING_OPT)
54
+ generator = SOAP::Generator.new(opt)
47
55
  generator.generate(soap, io)
48
56
  end
49
57
 
@@ -94,6 +94,14 @@ class NamedElements
94
94
  @cache.clear
95
95
  end
96
96
 
97
+ def find_all
98
+ o = NamedElements.new
99
+ each do |ele|
100
+ o << ele if yield(ele)
101
+ end
102
+ o
103
+ end
104
+
97
105
  Empty = NamedElements.new.freeze
98
106
 
99
107
  protected
@@ -15,12 +15,23 @@ module XSD
15
15
  class NS
16
16
  Namespace = 'http://www.w3.org/XML/1998/namespace'
17
17
 
18
+ KNOWN_TAG = {
19
+ XSD::Namespace => 'xsd',
20
+ XSD::InstanceNamespace => 'xsi',
21
+ }
22
+
18
23
  class Assigner
19
- def initialize
24
+ attr_reader :known_tag
25
+
26
+ def initialize(known_tag)
27
+ @known_tag = known_tag.dup
20
28
  @count = 0
21
29
  end
22
30
 
23
31
  def assign(ns)
32
+ if @known_tag.key?(ns)
33
+ return @known_tag[ns]
34
+ end
24
35
  @count += 1
25
36
  "n#{@count}"
26
37
  end
@@ -34,18 +45,26 @@ public
34
45
 
35
46
  def initialize(tag2ns = nil)
36
47
  @tag2ns = tag2ns || ns_default
37
- @assigner = nil
38
- @ns2tag = {}
39
48
  @ns2tag = @tag2ns.invert
49
+ @assigner = nil
40
50
  @default_namespace = nil
41
51
  end
42
52
 
53
+ def known_tag
54
+ @assigner ||= Assigner.new(default_known_tag)
55
+ @assigner.known_tag
56
+ end
57
+
43
58
  def assign(ns, tag = nil)
44
- if (tag == '')
45
- @default_namespace = ns
59
+ if tag == ''
60
+ if ns.empty?
61
+ @default_namespace = nil
62
+ else
63
+ @default_namespace = ns
64
+ end
46
65
  tag
47
66
  else
48
- @assigner ||= Assigner.new
67
+ @assigner ||= Assigner.new(default_known_tag)
49
68
  tag ||= @assigner.assign(ns)
50
69
  @ns2tag[ns] = tag
51
70
  @tag2ns[tag] = ns
@@ -57,24 +76,37 @@ public
57
76
  @default_namespace == ns or @ns2tag.key?(ns)
58
77
  end
59
78
 
79
+ def assigned_as_tagged?(ns)
80
+ @ns2tag.key?(ns)
81
+ end
82
+
60
83
  def assigned_tag?(tag)
61
84
  @tag2ns.key?(tag)
62
85
  end
63
86
 
64
87
  def clone_ns
65
- cloned = NS.new(@tag2ns.dup)
88
+ cloned = self.class.new(@tag2ns.dup)
66
89
  cloned.assigner = @assigner
67
90
  cloned.assign(@default_namespace, '') if @default_namespace
68
91
  cloned
69
92
  end
70
93
 
71
- def name(name)
72
- if (name.namespace == @default_namespace)
73
- name.name
74
- elsif tag = @ns2tag[name.namespace]
75
- "#{tag}:#{name.name}"
94
+ def name(qname)
95
+ if qname.namespace == @default_namespace
96
+ qname.name
97
+ elsif tag = @ns2tag[qname.namespace]
98
+ "#{tag}:#{qname.name}"
99
+ else
100
+ raise FormatError.new("namespace: #{qname.namespace} not defined yet")
101
+ end
102
+ end
103
+
104
+ # no default namespace
105
+ def name_attr(qname)
106
+ if tag = @ns2tag[qname.namespace]
107
+ "#{tag}:#{qname.name}"
76
108
  else
77
- raise FormatError.new("namespace: #{name.namespace} not defined yet")
109
+ raise FormatError.new("namespace: #{qname.namespace} not defined yet")
78
110
  end
79
111
  end
80
112
 
@@ -91,7 +123,7 @@ public
91
123
  end
92
124
 
93
125
  # $1 and $2 are necessary.
94
- ParseRegexp = Regexp.new('\A([^:]+)(?::(.+))?\z')
126
+ ParseRegexp = Regexp.new('\A([^:]+)(?::(.+))?\z', nil, 'NONE')
95
127
 
96
128
  def parse(str, local = false)
97
129
  if ParseRegexp =~ str
@@ -140,6 +172,10 @@ private
140
172
  def ns_default
141
173
  {'xml' => Namespace}
142
174
  end
175
+
176
+ def default_known_tag
177
+ KNOWN_TAG
178
+ end
143
179
  end
144
180
 
145
181
 
@@ -24,8 +24,9 @@ class QName
24
24
  XSD::QName.new(@namespace, name)
25
25
  end
26
26
 
27
- def dump
28
- ns = @namespace.nil? ? 'nil' : @namespace.dump
27
+ def dump(predefined_ns = nil)
28
+ ns = predefined_ns
29
+ ns ||= @namespace.nil? ? 'nil' : @namespace.dump
29
30
  name = @name.nil? ? 'nil' : @name.dump
30
31
  "XSD::QName.new(#{ns}, #{name})"
31
32
  end
@@ -19,7 +19,7 @@ module XMLParser
19
19
  module_function :create_parser
20
20
 
21
21
  # $1 is necessary.
22
- NSParseRegexp = Regexp.new('^xmlns:?(.*)$')
22
+ NSParseRegexp = Regexp.new('^xmlns:?(.*)$', nil, 'NONE')
23
23
 
24
24
  def filter_ns(ns, attrs)
25
25
  ns_updated = false
@@ -28,12 +28,13 @@ module XMLParser
28
28
  end
29
29
  newattrs = {}
30
30
  attrs.each do |key, value|
31
- if (NSParseRegexp =~ key)
31
+ if NSParseRegexp =~ key
32
32
  unless ns_updated
33
33
  ns = ns.clone_ns
34
34
  ns_updated = true
35
35
  end
36
- # '' means 'default namespace'.
36
+ # tag == '' means 'default namespace'
37
+ # value == '' means 'no default namespace'
37
38
  tag = $1 || ''
38
39
  ns.assign(value, tag)
39
40
  else
@@ -36,7 +36,7 @@ class TestASPDotNet < Test::Unit::TestCase
36
36
  end
37
37
 
38
38
  def teardown
39
- teardown_server
39
+ teardown_server if @server
40
40
  @client.reset_stream if @client
41
41
  end
42
42
 
@@ -15,7 +15,7 @@ class TestBasic < Test::Unit::TestCase
15
15
 
16
16
  def setup
17
17
  @logger = Logger.new(STDERR)
18
- @logger.level = Logger::Severity::ERROR
18
+ @logger.level = Logger::Severity::FATAL
19
19
  @url = "http://localhost:#{Port}/"
20
20
  @proxyurl = "http://localhost:#{ProxyPort}/"
21
21
  @server = @proxyserver = @client = nil
@@ -25,9 +25,9 @@ class TestBasic < Test::Unit::TestCase
25
25
  end
26
26
 
27
27
  def teardown
28
- teardown_client
28
+ teardown_client if @server
29
29
  teardown_proxyserver if @proxyserver
30
- teardown_server
30
+ teardown_server if @client
31
31
  end
32
32
 
33
33
  def setup_server
@@ -41,6 +41,7 @@ class TestBasic < Test::Unit::TestCase
41
41
  htpasswd = File.join(File.dirname(__FILE__), 'htpasswd')
42
42
  htpasswd_userdb = WEBrick::HTTPAuth::Htpasswd.new(htpasswd)
43
43
  @basic_auth = WEBrick::HTTPAuth::BasicAuth.new(
44
+ :Logger => @logger,
44
45
  :Realm => 'auth',
45
46
  :UserDB => htpasswd_userdb
46
47
  )
@@ -15,7 +15,7 @@ class TestDigest < Test::Unit::TestCase
15
15
 
16
16
  def setup
17
17
  @logger = Logger.new(STDERR)
18
- @logger.level = Logger::Severity::ERROR
18
+ @logger.level = Logger::Severity::FATAL
19
19
  @url = "http://localhost:#{Port}/"
20
20
  @proxyurl = "http://localhost:#{ProxyPort}/"
21
21
  @server = @proxyserver = @client = nil
@@ -25,9 +25,9 @@ class TestDigest < Test::Unit::TestCase
25
25
  end
26
26
 
27
27
  def teardown
28
- teardown_client
28
+ teardown_client if @client
29
29
  teardown_proxyserver if @proxyserver
30
- teardown_server
30
+ teardown_server if @server
31
31
  end
32
32
 
33
33
  def setup_server
@@ -41,6 +41,7 @@ class TestDigest < Test::Unit::TestCase
41
41
  htdigest = File.join(File.dirname(__FILE__), 'htdigest')
42
42
  htdigest_userdb = WEBrick::HTTPAuth::Htdigest.new(htdigest)
43
43
  @digest_auth = WEBrick::HTTPAuth::DigestAuth.new(
44
+ :Logger => @logger,
44
45
  :Algorithm => 'MD5',
45
46
  :Realm => 'auth',
46
47
  :UserDB => htdigest_userdb
@@ -25,10 +25,12 @@ class TestCalc < Test::Unit::TestCase
25
25
  end
26
26
 
27
27
  def teardown
28
- @server.shutdown
29
- @t.kill
30
- @t.join
31
- @calc.reset_stream
28
+ @server.shutdown if @server
29
+ if @t
30
+ @t.kill
31
+ @t.join
32
+ end
33
+ @calc.reset_stream if @calc
32
34
  end
33
35
 
34
36
  def test_calc
@@ -29,10 +29,12 @@ class TestCalc2 < Test::Unit::TestCase
29
29
  end
30
30
 
31
31
  def teardown
32
- @server.shutdown
33
- @t.kill
34
- @t.join
35
- @var.reset_stream
32
+ @server.shutdown if @server
33
+ if @t
34
+ @t.kill
35
+ @t.join
36
+ end
37
+ @var.reset_stream if @var
36
38
  end
37
39
 
38
40
  def test_calc2
@@ -45,10 +45,12 @@ class TestCalcCGI < Test::Unit::TestCase
45
45
  end
46
46
 
47
47
  def teardown
48
- @server.shutdown
49
- @t.kill
50
- @t.join
51
- @calc.reset_stream
48
+ @server.shutdown if @server
49
+ if @t
50
+ @t.kill
51
+ @t.join
52
+ end
53
+ @calc.reset_stream if @calc
52
54
  end
53
55
 
54
56
  def test_calc_cgi
@@ -36,10 +36,12 @@ class TestCustomFault < Test::Unit::TestCase
36
36
  end
37
37
 
38
38
  def teardown
39
- @server.shutdown
40
- @t.kill
41
- @t.join
42
- @client.reset_stream
39
+ @server.shutdown if @server
40
+ if @t
41
+ @t.kill
42
+ @t.join
43
+ end
44
+ @client.reset_stream if @client
43
45
  end
44
46
 
45
47
  def test_custom_fault
@@ -0,0 +1,35 @@
1
+ require 'soap/rpc/router'
2
+ require 'soap/mapping/mapping'
3
+ require 'soap/processor'
4
+ require 'test/unit'
5
+
6
+
7
+ module SOAP
8
+ module Fault
9
+
10
+
11
+ class TestSOAPArray < Test::Unit::TestCase
12
+
13
+ # simulate the soap fault creation and parsing on the client
14
+ def test_parse_fault
15
+ router = SOAP::RPC::Router.new('parse_SOAPArray_error')
16
+ soap_fault = pump_stack rescue router.create_fault_response($!)
17
+ env = SOAP::Processor.unmarshal(soap_fault.send_string)
18
+ soap_fault = SOAP::FaultError.new(env.body.fault)
19
+ # in literal service, RuntimeError is raised (not an ArgumentError)
20
+ # any chance to use Ruby's exception encoding in literal service?
21
+ assert_raises(RuntimeError) do
22
+ registry = SOAP::Mapping::LiteralRegistry.new
23
+ SOAP::Mapping.fault2exception(soap_fault, registry)
24
+ end
25
+ end
26
+
27
+ def pump_stack(max = 0)
28
+ raise ArgumentError if max > 10
29
+ pump_stack(max+1)
30
+ end
31
+ end
32
+
33
+
34
+ end
35
+ end
@@ -88,8 +88,8 @@ class TestFilter < Test::Unit::TestCase
88
88
  end
89
89
 
90
90
  def teardown
91
- teardown_server
92
- teardown_client
91
+ teardown_server if @server
92
+ teardown_client if @client
93
93
  end
94
94
 
95
95
  def teardown_server
@@ -172,8 +172,8 @@ class TestAuthHeader < Test::Unit::TestCase
172
172
  end
173
173
 
174
174
  def teardown
175
- teardown_server
176
- teardown_client
175
+ teardown_server if @server
176
+ teardown_client if @client
177
177
  end
178
178
 
179
179
  def teardown_server
@@ -84,9 +84,9 @@ class TestAuthHeaderCGI < Test::Unit::TestCase
84
84
  end
85
85
 
86
86
  def teardown
87
- @supportclient.delete_sessiondb
88
- teardown_server
89
- teardown_client
87
+ @supportclient.delete_sessiondb if @supportclient
88
+ teardown_server if @server
89
+ teardown_client if @client
90
90
  end
91
91
 
92
92
  def teardown_server
@@ -89,8 +89,8 @@ class TestSimpleHandler < Test::Unit::TestCase
89
89
  end
90
90
 
91
91
  def teardown
92
- teardown_server
93
- teardown_client
92
+ teardown_server if @server
93
+ teardown_client if @client
94
94
  end
95
95
 
96
96
  def teardown_server
@@ -24,10 +24,12 @@ class TestHelloWorld < Test::Unit::TestCase
24
24
  end
25
25
 
26
26
  def teardown
27
- @server.shutdown
28
- @t.kill
29
- @t.join
30
- @client.reset_stream
27
+ @server.shutdown if @server
28
+ if @t
29
+ @t.kill
30
+ @t.join
31
+ end
32
+ @client.reset_stream if @client
31
33
  end
32
34
 
33
35
  def test_hello_world