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
@@ -7,6 +7,7 @@
7
7
 
8
8
 
9
9
  require 'net/http'
10
+ require 'soap/filter/filterchain'
10
11
 
11
12
 
12
13
  module SOAP
@@ -0,0 +1,34 @@
1
+ # SOAP4R - SOAP Namespace library
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'xsd/datatypes'
10
+ require 'xsd/ns'
11
+ require 'soap/soap'
12
+
13
+
14
+ module SOAP
15
+
16
+
17
+ class NS < XSD::NS
18
+ KNOWN_TAG = XSD::NS::KNOWN_TAG.dup.update(
19
+ SOAP::EnvelopeNamespace => 'env'
20
+ )
21
+
22
+ def initialize(tag2ns = nil)
23
+ super(tag2ns)
24
+ end
25
+
26
+ private
27
+
28
+ def default_known_tag
29
+ KNOWN_TAG
30
+ end
31
+ end
32
+
33
+
34
+ end
@@ -6,9 +6,9 @@
6
6
  # either the dual license version in 2003, or any later version.
7
7
 
8
8
 
9
- require 'xsd/ns'
10
9
  require 'xsd/xmlparser'
11
10
  require 'soap/soap'
11
+ require 'soap/ns'
12
12
  require 'soap/baseData'
13
13
  require 'soap/encodingstyle/handler'
14
14
 
@@ -112,7 +112,7 @@ public
112
112
  @lastnode
113
113
  end
114
114
 
115
- def start_element(name, attrs)
115
+ def start_element(name, raw_attrs)
116
116
  lastframe = @parsestack.last
117
117
  ns = parent = parent_encodingstyle = nil
118
118
  if lastframe
@@ -120,13 +120,14 @@ public
120
120
  parent = lastframe.node
121
121
  parent_encodingstyle = lastframe.encodingstyle
122
122
  else
123
- ns = XSD::NS.new
123
+ ns = SOAP::NS.new
124
124
  parent = ParseFrame::NodeContainer.new(nil)
125
125
  parent_encodingstyle = nil
126
126
  end
127
127
  # ns might be the same
128
- ns, attrs = XSD::XMLParser.filter_ns(ns, attrs)
129
- encodingstyle = find_encodingstyle(ns, attrs)
128
+ ns, raw_attrs = XSD::XMLParser.filter_ns(ns, raw_attrs)
129
+ attrs = decode_attrs(ns, raw_attrs)
130
+ encodingstyle = attrs[AttrEncodingStyleName]
130
131
  # Children's encodingstyle is derived from its parent.
131
132
  if encodingstyle.nil?
132
133
  if parent.node.is_a?(SOAPHeader)
@@ -149,13 +150,10 @@ public
149
150
  end
150
151
 
151
152
  def characters(text)
152
- lastframe = @parsestack.last
153
- if lastframe
153
+ # Ignore Text outside of SOAP Envelope.
154
+ if lastframe = @parsestack.last
154
155
  # Need not to be cloned because character does not have attr.
155
156
  decode_text(lastframe.ns, text, lastframe.handler)
156
- else
157
- # Ignore Text outside of SOAP Envelope.
158
- p text if $DEBUG
159
157
  end
160
158
  end
161
159
 
@@ -171,15 +169,6 @@ public
171
169
 
172
170
  private
173
171
 
174
- def find_encodingstyle(ns, attrs)
175
- attrs.each do |key, value|
176
- if (ns.compare(@envelopenamespace, AttrEncodingStyle, key))
177
- return value
178
- end
179
- end
180
- nil
181
- end
182
-
183
172
  def decode_tag(ns, name, attrs, parent, handler)
184
173
  ele = ns.parse(name)
185
174
  # Envelope based parsing.
@@ -196,6 +185,15 @@ private
196
185
  return handler.decode_tag_end(ns, node)
197
186
  end
198
187
 
188
+ def decode_attrs(ns, attrs)
189
+ extraattr = {}
190
+ attrs.each do |key, value|
191
+ qname = ns.parse_local(key)
192
+ extraattr[qname] = value
193
+ end
194
+ extraattr
195
+ end
196
+
199
197
  def decode_text(ns, text, handler)
200
198
  handler.decode_text(ns, text)
201
199
  end
@@ -210,23 +208,28 @@ private
210
208
  end
211
209
  end
212
210
  elsif ele.name == EleHeader
213
- unless parent.node.is_a?(SOAPEnvelope)
214
- raise FormatDecodeError.new("Header should be a child of Envelope.")
215
- end
211
+ return nil unless parent.node.is_a?(SOAPEnvelope)
216
212
  o = SOAPHeader.new
217
213
  parent.node.header = o
218
214
  elsif ele.name == EleBody
219
- unless parent.node.is_a?(SOAPEnvelope)
220
- raise FormatDecodeError.new("Body should be a child of Envelope.")
221
- end
215
+ return nil unless parent.node.is_a?(SOAPEnvelope)
222
216
  o = SOAPBody.new
223
217
  parent.node.body = o
224
218
  elsif ele.name == EleFault
225
- unless parent.node.is_a?(SOAPBody)
226
- raise FormatDecodeError.new("Fault should be a child of Body.")
219
+ if parent.node.is_a?(SOAPBody)
220
+ o = SOAPFault.new
221
+ parent.node.fault = o
222
+ elsif parent.node.is_a?(SOAPEnvelope)
223
+ # live.com server returns SOAPFault as a direct child of SOAPEnvelope.
224
+ # support it even if it's not spec compliant.
225
+ warn("Fault must be a child of Body.")
226
+ body = SOAPBody.new
227
+ parent.node.body = body
228
+ o = SOAPFault.new
229
+ body.fault = o
230
+ else
231
+ return nil
227
232
  end
228
- o = SOAPFault.new
229
- parent.node.fault = o
230
233
  end
231
234
  o.extraattr.update(attrs) if o
232
235
  o
@@ -50,7 +50,7 @@ module Processor
50
50
  private
51
51
 
52
52
  def create_generator(opt)
53
- SOAPGenerator.new(opt)
53
+ Generator.new(opt)
54
54
  end
55
55
 
56
56
  def create_parser(opt)
@@ -60,6 +60,7 @@ class Driver
60
60
  __attr_proxy :allow_unqualified_element, true
61
61
  __attr_proxy :default_encodingstyle, true
62
62
  __attr_proxy :generate_explicit_type, true
63
+ __attr_proxy :use_default_namespace, true
63
64
  __attr_proxy :return_response_as_xml, true
64
65
  __attr_proxy :headerhandler
65
66
  __attr_proxy :filterchain
@@ -56,7 +56,7 @@ class SOAPBody < SOAPStruct
56
56
 
57
57
  def fault=(fault)
58
58
  @is_fault = true
59
- add_member('fault', fault)
59
+ add('fault', fault)
60
60
  end
61
61
  end
62
62
 
@@ -219,10 +219,7 @@ private
219
219
 
220
220
  def init_param(param_def)
221
221
  param_def.each do |io_type, name, param_type|
222
- mapped_class, nsdef, namedef = param_type
223
- if mapped_class.is_a?(String)
224
- mapped_class = Mapping.class_from_name(mapped_class)
225
- end
222
+ mapped_class, nsdef, namedef = SOAPMethod.parse_param_type(param_type)
226
223
  if nsdef && namedef
227
224
  type_qname = XSD::QName.new(nsdef, namedef)
228
225
  elsif mapped_class
@@ -243,13 +240,28 @@ private
243
240
  raise MethodDefinitionError.new('duplicated retval')
244
241
  end
245
242
  @retval_name = name
246
- @retval_class_name = nil
247
243
  @retval_class_name = mapped_class
248
244
  else
249
245
  raise MethodDefinitionError.new("unknown type: #{io_type}")
250
246
  end
251
247
  end
252
248
  end
249
+
250
+ def self.parse_param_type(param_type)
251
+ mapped_class, nsdef, namedef = param_type
252
+ # the first element of typedef in param_def can be a String like
253
+ # "::SOAP::SOAPStruct" or "CustomClass[]". turn this String to a class if
254
+ # we can.
255
+ if mapped_class.is_a?(String)
256
+ if /\[\]\Z/ =~ mapped_class
257
+ # when '[]' is added, ignore this.
258
+ mapped_class = nil
259
+ else
260
+ mapped_class = Mapping.class_from_name(mapped_class)
261
+ end
262
+ end
263
+ [mapped_class, nsdef, namedef]
264
+ end
253
265
  end
254
266
 
255
267
 
@@ -20,6 +20,44 @@ class HTTPServer < Logger::Application
20
20
  attr_reader :server
21
21
  attr_accessor :default_namespace
22
22
 
23
+ class << self
24
+ if RUBY_VERSION >= "1.7.0"
25
+ def __attr_proxy(symbol, assignable = false)
26
+ name = symbol.to_s
27
+ define_method(name) {
28
+ @router.__send__(name)
29
+ }
30
+ if assignable
31
+ aname = name + '='
32
+ define_method(aname) { |rhs|
33
+ @router.__send__(aname, rhs)
34
+ }
35
+ end
36
+ end
37
+ else
38
+ def __attr_proxy(symbol, assignable = false)
39
+ name = symbol.to_s
40
+ module_eval <<-EOS
41
+ def #{name}
42
+ @router.#{name}
43
+ end
44
+ EOS
45
+ if assignable
46
+ module_eval <<-EOS
47
+ def #{name}=(value)
48
+ @router.#{name} = value
49
+ end
50
+ EOS
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ __attr_proxy :mapping_registry, true
57
+ __attr_proxy :literal_mapping_registry, true
58
+ __attr_proxy :generate_explicit_type, true
59
+ __attr_proxy :use_default_namespace, true
60
+
23
61
  def initialize(config)
24
62
  actor = config[:SOAPHTTPServerApplicationName] || self.class.name
25
63
  super(actor)
@@ -60,30 +98,6 @@ class HTTPServer < Logger::Application
60
98
  @soaplet.authenticator = authenticator
61
99
  end
62
100
 
63
- def mapping_registry
64
- @router.mapping_registry
65
- end
66
-
67
- def mapping_registry=(mapping_registry)
68
- @router.mapping_registry = mapping_registry
69
- end
70
-
71
- def literal_mapping_registry
72
- @router.literal_mapping_registry
73
- end
74
-
75
- def literal_mapping_registry=(literal_mapping_registry)
76
- @router.literal_mapping_registry = literal_mapping_registry
77
- end
78
-
79
- def generate_explicit_type
80
- @router.generate_explicit_type
81
- end
82
-
83
- def generate_explicit_type=(generate_explicit_type)
84
- @router.generate_explicit_type = generate_explicit_type
85
- end
86
-
87
101
  # servant entry interface
88
102
 
89
103
  def add_rpc_request_servant(factory, namespace = @default_namespace)
@@ -32,6 +32,7 @@ public
32
32
  attr_accessor :allow_unqualified_element
33
33
  attr_accessor :default_encodingstyle
34
34
  attr_accessor :generate_explicit_type
35
+ attr_accessor :use_default_namespace
35
36
  attr_accessor :return_response_as_xml
36
37
  attr_reader :headerhandler
37
38
  attr_reader :filterchain
@@ -52,9 +53,11 @@ public
52
53
  @operation_by_qname = {}
53
54
  @operation_by_soapaction = {}
54
55
  @mandatorycharset = nil
56
+ # TODO: set to false by default or drop thie option in 1.6.0
55
57
  @allow_unqualified_element = true
56
58
  @default_encodingstyle = nil
57
59
  @generate_explicit_type = true
60
+ @use_default_namespace = false
58
61
  @return_response_as_xml = false
59
62
  @headerhandler = Header::HandlerSet.new
60
63
  @filterchain = Filter::FilterChain.new
@@ -129,15 +132,13 @@ public
129
132
  :envelopenamespace => @options["soap.envelope.requestnamespace"],
130
133
  :default_encodingstyle =>
131
134
  @default_encodingstyle || op_info.request_default_encodingstyle,
132
- :elementformdefault => op_info.elementformdefault,
133
- :attributeformdefault => op_info.attributeformdefault
135
+ :use_default_namespace =>
136
+ op_info.use_default_namespace || @use_default_namespace
134
137
  )
135
138
  resopt = create_encoding_opt(
136
139
  :envelopenamespace => @options["soap.envelope.responsenamespace"],
137
140
  :default_encodingstyle =>
138
- @default_encodingstyle || op_info.response_default_encodingstyle,
139
- :elementformdefault => op_info.elementformdefault,
140
- :attributeformdefault => op_info.attributeformdefault
141
+ @default_encodingstyle || op_info.response_default_encodingstyle
141
142
  )
142
143
  env = route(req_header, req_body, reqopt, resopt)
143
144
  if op_info.response_use.nil?
@@ -350,8 +351,7 @@ private
350
351
  attr_reader :response_style
351
352
  attr_reader :request_use
352
353
  attr_reader :response_use
353
- attr_reader :elementformdefault
354
- attr_reader :attributeformdefault
354
+ attr_reader :use_default_namespace
355
355
 
356
356
  def initialize(soapaction, param_def, opt)
357
357
  @soapaction = soapaction
@@ -359,9 +359,11 @@ private
359
359
  @response_style = opt[:response_style]
360
360
  @request_use = opt[:request_use]
361
361
  @response_use = opt[:response_use]
362
- # set nil(unqualified) by default
363
- @elementformdefault = opt[:elementformdefault]
364
- @attributeformdefault = opt[:attributeformdefault]
362
+ @use_default_namespace =
363
+ opt[:use_default_namespace] || opt[:elementformdefault]
364
+ if opt.key?(:elementformdefault)
365
+ warn("option :elementformdefault is deprecated. use :use_default_namespace instead")
366
+ end
365
367
  check_style(@request_style)
366
368
  check_style(@response_style)
367
369
  check_use(@request_use)
@@ -489,7 +491,8 @@ private
489
491
  idx = 0
490
492
  names.each do |name|
491
493
  params[name] = Mapping.obj2soap(values[idx], mapping_registry,
492
- types[idx] || XSD::QName.new, opt)
494
+ types[idx], opt)
495
+ params[name].elename = XSD::QName.new(nil, name)
493
496
  idx += 1
494
497
  end
495
498
  method.set_param(params)
@@ -30,6 +30,7 @@ class Router
30
30
  attr_accessor :mapping_registry
31
31
  attr_accessor :literal_mapping_registry
32
32
  attr_accessor :generate_explicit_type
33
+ attr_accessor :use_default_namespace
33
34
  attr_accessor :external_ces
34
35
  attr_reader :filterchain
35
36
 
@@ -39,6 +40,7 @@ class Router
39
40
  @headerhandler = Header::HandlerSet.new
40
41
  @literal_mapping_registry = ::SOAP::Mapping::LiteralRegistry.new
41
42
  @generate_explicit_type = true
43
+ @use_default_namespace = false
42
44
  @external_ces = nil
43
45
  @operation_by_soapaction = {}
44
46
  @operation_by_qname = {}
@@ -322,6 +324,7 @@ private
322
324
  opt[:external_content] = nil
323
325
  opt[:default_encodingstyle] = default_encodingstyle
324
326
  opt[:generate_explicit_type] = @generate_explicit_type
327
+ opt[:use_default_namespace] = @use_default_namespace
325
328
  @filterchain.reverse_each do |filter|
326
329
  env = filter.on_outbound(env, opt)
327
330
  break unless env
@@ -476,7 +479,7 @@ private
476
479
 
477
480
  def request_rpc(body, mapping_registry, literal_mapping_registry, opt)
478
481
  request = body.request
479
- unless request.is_a?(SOAPStruct)
482
+ unless request.is_a?(SOAPNameAccessible)
480
483
  if request.is_a?(SOAPNil)
481
484
  # SOAP::Lite/0.69 seems to send xsi:nil="true" element as a request.
482
485
  request = SOAPStruct.new(request.elename)
@@ -8,12 +8,13 @@
8
8
 
9
9
  require 'xsd/qname'
10
10
  require 'xsd/charset'
11
+ require 'soap/nestedexception'
11
12
 
12
13
 
13
14
  module SOAP
14
15
 
15
16
 
16
- VERSION = Version = '1.5.7'
17
+ VERSION = Version = '1.5.8'
17
18
  PropertyName = 'soap/property'
18
19
 
19
20
  EnvelopeNamespace = 'http://schemas.xmlsoap.org/soap/envelope/'
@@ -38,6 +39,8 @@ AttrRoot = 'root'
38
39
  AttrArrayType = 'arrayType'
39
40
  AttrOffset = 'offset'
40
41
  AttrPosition = 'position'
42
+ AttrHref = 'href'
43
+ AttrId = 'id'
41
44
  ValueArray = 'Array'
42
45
 
43
46
  EleEnvelopeName = XSD::QName.new(EnvelopeNamespace, EleEnvelope).freeze
@@ -55,17 +58,15 @@ AttrRootName = XSD::QName.new(EncodingNamespace, AttrRoot).freeze
55
58
  AttrArrayTypeName = XSD::QName.new(EncodingNamespace, AttrArrayType).freeze
56
59
  AttrOffsetName = XSD::QName.new(EncodingNamespace, AttrOffset).freeze
57
60
  AttrPositionName = XSD::QName.new(EncodingNamespace, AttrPosition).freeze
61
+ AttrHrefName = XSD::QName.new(nil, AttrHref).freeze
62
+ AttrIdName = XSD::QName.new(nil, AttrId).freeze
58
63
  ValueArrayName = XSD::QName.new(EncodingNamespace, ValueArray).freeze
59
64
 
60
65
  Base64Literal = 'base64'
61
66
 
62
- SOAPNamespaceTag = 'env'
63
- XSDNamespaceTag = 'xsd'
64
- XSINamespaceTag = 'xsi'
65
-
66
67
  MediaType = 'text/xml'
67
68
 
68
- class Error < StandardError; end
69
+ class Error < StandardError; include NestedException; end
69
70
 
70
71
  class StreamError < Error; end
71
72
  class HTTPStreamError < StreamError; end