soap4r 1.5.7 → 1.5.8

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 (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