soap4r 1.5.5.20061022 → 1.5.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (311) hide show
  1. data/bin/wsdl2ruby.rb +8 -8
  2. data/lib/soap/XMLSchemaDatatypes.rb +1 -1
  3. data/lib/soap/XMLSchemaDatatypes1999.rb +1 -1
  4. data/lib/soap/attachment.rb +1 -1
  5. data/lib/soap/baseData.rb +102 -54
  6. data/lib/soap/cgistub.rb +1 -1
  7. data/lib/soap/charset.rb +1 -1
  8. data/lib/soap/driver.rb +1 -1
  9. data/lib/soap/element.rb +20 -12
  10. data/lib/soap/encodingstyle/aspDotNetHandler.rb +2 -2
  11. data/lib/soap/encodingstyle/handler.rb +1 -1
  12. data/lib/soap/encodingstyle/literalHandler.rb +29 -73
  13. data/lib/soap/encodingstyle/soapHandler.rb +8 -7
  14. data/lib/soap/filter.rb +10 -0
  15. data/lib/soap/filter/filterchain.rb +51 -0
  16. data/lib/soap/filter/handler.rb +31 -0
  17. data/lib/soap/generator.rb +11 -3
  18. data/lib/soap/header/handler.rb +6 -5
  19. data/lib/soap/header/handlerset.rb +7 -7
  20. data/lib/soap/header/simplehandler.rb +1 -1
  21. data/lib/soap/httpconfigloader.rb +7 -2
  22. data/lib/soap/mapping.rb +1 -1
  23. data/lib/soap/mapping/encodedregistry.rb +36 -26
  24. data/lib/soap/mapping/encodedregistry.rb~ +531 -0
  25. data/lib/soap/mapping/factory.rb +2 -2
  26. data/lib/soap/mapping/literalregistry.rb +107 -67
  27. data/lib/soap/mapping/mapping.rb +92 -112
  28. data/lib/soap/mapping/registry.rb +25 -8
  29. data/lib/soap/mapping/rubytypeFactory.rb +1 -1
  30. data/lib/soap/mapping/schemadefinition.rb +163 -0
  31. data/lib/soap/mapping/typeMap.rb +7 -1
  32. data/lib/soap/mapping/wsdlencodedregistry.rb +2 -2
  33. data/lib/soap/mapping/wsdlliteralregistry.rb +14 -23
  34. data/lib/soap/mappingRegistry.rb +1 -1
  35. data/lib/soap/marshal.rb +1 -1
  36. data/lib/soap/namespace.rb +1 -1
  37. data/lib/soap/netHttpClient.rb +43 -13
  38. data/lib/soap/parser.rb +40 -42
  39. data/lib/soap/processor.rb +1 -1
  40. data/lib/soap/property.rb +7 -7
  41. data/lib/soap/proxy.rb +1 -1
  42. data/lib/soap/qname.rb +1 -1
  43. data/lib/soap/rpc/cgistub.rb +34 -1
  44. data/lib/soap/rpc/driver.rb +2 -1
  45. data/lib/soap/rpc/element.rb +42 -15
  46. data/lib/soap/rpc/httpserver.rb +13 -1
  47. data/lib/soap/rpc/proxy.rb +51 -41
  48. data/lib/soap/rpc/router.rb +88 -33
  49. data/lib/soap/rpc/rpc.rb +1 -1
  50. data/lib/soap/rpc/soaplet.rb +51 -3
  51. data/lib/soap/rpc/standaloneServer.rb +1 -1
  52. data/lib/soap/rpcRouter.rb +1 -1
  53. data/lib/soap/rpcUtils.rb +1 -1
  54. data/lib/soap/server.rb +1 -1
  55. data/lib/soap/soap.rb +2 -2
  56. data/lib/soap/standaloneServer.rb +1 -1
  57. data/lib/soap/streamHandler.rb +13 -4
  58. data/lib/soap/wsdlDriver.rb +11 -15
  59. data/lib/tags +5144 -0
  60. data/lib/wsdl/binding.rb +1 -1
  61. data/lib/wsdl/data.rb +1 -1
  62. data/lib/wsdl/definitions.rb +1 -1
  63. data/lib/wsdl/documentation.rb +1 -1
  64. data/lib/wsdl/import.rb +1 -1
  65. data/lib/wsdl/importer.rb +1 -1
  66. data/lib/wsdl/info.rb +1 -1
  67. data/lib/wsdl/message.rb +1 -1
  68. data/lib/wsdl/operation.rb +10 -7
  69. data/lib/wsdl/operationBinding.rb +19 -5
  70. data/lib/wsdl/param.rb +11 -3
  71. data/lib/wsdl/parser.rb +4 -3
  72. data/lib/wsdl/part.rb +1 -1
  73. data/lib/wsdl/port.rb +1 -1
  74. data/lib/wsdl/portType.rb +1 -1
  75. data/lib/wsdl/service.rb +1 -1
  76. data/lib/wsdl/soap/address.rb +1 -1
  77. data/lib/wsdl/soap/binding.rb +1 -1
  78. data/lib/wsdl/soap/body.rb +3 -1
  79. data/lib/wsdl/soap/cgiStubCreator.rb +1 -1
  80. data/lib/wsdl/soap/classDefCreator.rb +78 -14
  81. data/lib/wsdl/soap/classDefCreatorSupport.rb +28 -11
  82. data/lib/wsdl/soap/clientSkeltonCreator.rb +3 -2
  83. data/lib/wsdl/soap/complexType.rb +8 -11
  84. data/lib/wsdl/soap/data.rb +1 -1
  85. data/lib/wsdl/soap/definitions.rb +49 -4
  86. data/lib/wsdl/soap/driverCreator.rb +1 -1
  87. data/lib/wsdl/soap/element.rb +3 -2
  88. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +1 -1
  89. data/lib/wsdl/soap/fault.rb +1 -1
  90. data/lib/wsdl/soap/header.rb +1 -1
  91. data/lib/wsdl/soap/headerfault.rb +1 -1
  92. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +41 -21
  93. data/lib/wsdl/soap/mappingRegistryCreator.rb +2 -1
  94. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +45 -19
  95. data/lib/wsdl/soap/methodDefCreator.rb +28 -17
  96. data/lib/wsdl/soap/operation.rb +11 -11
  97. data/lib/wsdl/soap/servantSkeltonCreator.rb +3 -2
  98. data/lib/wsdl/soap/standaloneServerStubCreator.rb +1 -1
  99. data/lib/wsdl/soap/wsdl2ruby.rb +8 -2
  100. data/lib/wsdl/types.rb +1 -1
  101. data/lib/wsdl/wsdl.rb +1 -1
  102. data/lib/wsdl/xmlSchema/all.rb +1 -1
  103. data/lib/wsdl/xmlSchema/annotation.rb +1 -1
  104. data/lib/wsdl/xmlSchema/any.rb +10 -5
  105. data/lib/wsdl/xmlSchema/attribute.rb +1 -1
  106. data/lib/wsdl/xmlSchema/choice.rb +1 -1
  107. data/lib/wsdl/xmlSchema/complexContent.rb +11 -2
  108. data/lib/wsdl/xmlSchema/complexExtension.rb +8 -1
  109. data/lib/wsdl/xmlSchema/complexRestriction.rb +6 -2
  110. data/lib/wsdl/xmlSchema/complexType.rb +9 -1
  111. data/lib/wsdl/xmlSchema/content.rb +26 -5
  112. data/lib/wsdl/xmlSchema/data.rb +4 -1
  113. data/lib/wsdl/xmlSchema/element.rb +12 -9
  114. data/lib/wsdl/xmlSchema/enumeration.rb +1 -1
  115. data/lib/wsdl/xmlSchema/import.rb +1 -1
  116. data/lib/wsdl/xmlSchema/importer.rb +9 -6
  117. data/lib/wsdl/xmlSchema/include.rb +1 -1
  118. data/lib/wsdl/xmlSchema/length.rb +1 -1
  119. data/lib/wsdl/xmlSchema/list.rb +1 -1
  120. data/lib/wsdl/xmlSchema/maxlength.rb +1 -1
  121. data/lib/wsdl/xmlSchema/minlength.rb +1 -1
  122. data/lib/wsdl/xmlSchema/parser.rb +4 -3
  123. data/lib/wsdl/xmlSchema/pattern.rb +1 -1
  124. data/lib/wsdl/xmlSchema/schema.rb +1 -1
  125. data/lib/wsdl/xmlSchema/sequence.rb +1 -1
  126. data/lib/wsdl/xmlSchema/simpleContent.rb +1 -1
  127. data/lib/wsdl/xmlSchema/simpleExtension.rb +1 -1
  128. data/lib/wsdl/xmlSchema/simpleRestriction.rb +1 -1
  129. data/lib/wsdl/xmlSchema/simpleType.rb +8 -1
  130. data/lib/wsdl/xmlSchema/union.rb +35 -0
  131. data/lib/wsdl/xmlSchema/unique.rb +1 -1
  132. data/lib/wsdl/xmlSchema/xsd2ruby.rb +6 -1
  133. data/lib/xsd/charset.rb +1 -1
  134. data/lib/xsd/classloader.rb +26 -0
  135. data/lib/xsd/codegen.rb +1 -1
  136. data/lib/xsd/codegen/classdef.rb +1 -1
  137. data/lib/xsd/codegen/commentdef.rb +1 -1
  138. data/lib/xsd/codegen/gensupport.rb +119 -14
  139. data/lib/xsd/codegen/methoddef.rb +1 -1
  140. data/lib/xsd/codegen/moduledef.rb +1 -1
  141. data/lib/xsd/datatypes.rb +52 -13
  142. data/lib/xsd/datatypes1999.rb +1 -1
  143. data/lib/xsd/iconvcharset.rb +1 -1
  144. data/lib/xsd/mapping.rb +1 -1
  145. data/lib/xsd/namedelements.rb +1 -1
  146. data/lib/xsd/ns.rb +2 -2
  147. data/lib/xsd/qname.rb +1 -1
  148. data/lib/xsd/xmlparser.rb +16 -3
  149. data/lib/xsd/xmlparser/parser.rb +6 -2
  150. data/lib/xsd/xmlparser/rexmlparser.rb +5 -1
  151. data/lib/xsd/xmlparser/xmlparser.rb +1 -1
  152. data/lib/xsd/xmlparser/xmlscanner.rb +4 -2
  153. data/test/interopR2/InteropTest.rb +83 -0
  154. data/test/interopR2/InteropTest.wsdl +315 -0
  155. data/test/interopR2/InteropTestC.wsdl +208 -0
  156. data/test/interopR2/InteropTestDriver.rb +328 -0
  157. data/test/interopR2/SOAP4R_SOAPBuildersInteropTest_R2.wsdl +461 -0
  158. data/test/interopR2/SOAP4R_SOAPBuildersInteropTest_R2GroupB.wsdl +20 -0
  159. data/test/interopR2/SOAP4R_SOAPBuildersInteropTest_R2GroupCClient.rb +178 -0
  160. data/test/interopR2/SOAPBuildersInterop_R2GrC.wsdl +17 -0
  161. data/test/interopR2/clientBase.rb +0 -3
  162. data/test/interopR2/groupc.wsdl +17 -0
  163. data/test/interopR2/result_client.NetRemoting.txt +0 -4593
  164. data/test/interopR2/test.sh +9 -9
  165. data/test/runner.rb +1 -3
  166. data/test/soap/asp.net/test_aspdotnet.rb +20 -9
  167. data/test/soap/case/test_mapping.rb +57 -0
  168. data/test/soap/filter/test_filter.rb +146 -0
  169. data/test/soap/literalArrayMapping/test_definedarray.rb +7 -9
  170. data/test/soap/marshal/marshaltestlib.rb +1 -1
  171. data/test/soap/ssl/test_ssl.rb +0 -10
  172. data/test/soap/struct/test_struct.rb +2 -9
  173. data/test/soap/test_basetype.rb +114 -0
  174. data/test/soap/test_empty.rb +26 -2
  175. data/test/soap/test_envelopenamespace.rb +2 -9
  176. data/test/soap/test_extraattr.rb +55 -0
  177. data/test/soap/test_httpconfigloader.rb +17 -0
  178. data/test/soap/test_property.rb +4 -1
  179. data/test/soap/test_response_as_xml.rb +31 -9
  180. data/test/soap/test_soapelement.rb +21 -3
  181. data/test/soap/test_streamhandler.rb +3 -10
  182. data/test/soap/test_styleuse.rb +2 -9
  183. data/test/soap/wsdlDriver/test_calc.rb +3 -20
  184. data/test/soap/wsdlDriver/test_document.rb +2 -9
  185. data/test/soap/wsdlDriver/test_simpletype.rb +2 -9
  186. data/test/testutil.rb +54 -0
  187. data/test/wsdl/abstract/abstract.wsdl +82 -3
  188. data/test/wsdl/abstract/test_abstract.rb +48 -19
  189. data/test/wsdl/any/any.wsdl +63 -0
  190. data/test/wsdl/any/expectedDriver.rb +22 -1
  191. data/test/wsdl/any/expectedEcho.rb +19 -0
  192. data/test/wsdl/any/expectedService.rb +29 -4
  193. data/test/wsdl/any/test_any.rb +36 -31
  194. data/test/wsdl/choice/choice.wsdl +37 -0
  195. data/test/wsdl/choice/test_choice.rb +66 -17
  196. data/test/wsdl/complexcontent/test_echo.rb +7 -18
  197. data/test/wsdl/document/array/test_array.rb +8 -18
  198. data/test/wsdl/document/ping_nosoapaction.wsdl +1 -1
  199. data/test/wsdl/document/test_nosoapaction.rb +2 -9
  200. data/test/wsdl/document/test_number.rb +3 -10
  201. data/test/wsdl/document/test_rpc.rb +96 -21
  202. data/test/wsdl/fault/fault.wsdl +79 -0
  203. data/test/wsdl/fault/multifault.wsdl +96 -0
  204. data/test/wsdl/fault/test_fault.rb +119 -0
  205. data/test/wsdl/fault/test_multifault.rb +134 -0
  206. data/test/wsdl/list/test_list.rb +6 -16
  207. data/test/wsdl/marshal/test_wsdlmarshal.rb +10 -13
  208. data/test/wsdl/oneway/oneway.wsdl +36 -0
  209. data/test/wsdl/oneway/test_oneway.rb +108 -0
  210. data/test/wsdl/overload/test_overload.rb +3 -10
  211. data/test/wsdl/qualified/test_qualified.rb +9 -17
  212. data/test/wsdl/qualified/test_unqualified.rb +14 -21
  213. data/test/wsdl/ref/expectedDriver.rb +51 -0
  214. data/test/wsdl/ref/expectedProduct.rb +71 -71
  215. data/test/wsdl/ref/test_ref.rb +13 -35
  216. data/test/wsdl/rpc/rpc.wsdl +27 -1
  217. data/test/wsdl/rpc/test-rpc-lit-qualified.wsdl +74 -0
  218. data/test/wsdl/rpc/test-rpc-lit.wsdl +11 -4
  219. data/test/wsdl/rpc/test-rpc-lit12.wsdl +455 -0
  220. data/test/wsdl/rpc/test_rpc.rb +20 -19
  221. data/test/wsdl/rpc/test_rpc_lit.rb +82 -29
  222. data/test/wsdl/simplecontent/simplecontent.wsdl +1 -0
  223. data/test/wsdl/simplecontent/test_simplecontent.rb +5 -19
  224. data/test/wsdl/simpletype/rpc/expectedDriver.rb +6 -4
  225. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +15 -0
  226. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +64 -0
  227. data/test/wsdl/simpletype/rpc/expectedService.rb +6 -4
  228. data/test/wsdl/simpletype/rpc/rpc.wsdl +18 -0
  229. data/test/wsdl/simpletype/rpc/test_rpc.rb +6 -16
  230. data/test/wsdl/simpletype/simpletype.wsdl +19 -0
  231. data/test/wsdl/simpletype/test_simpletype.rb +2 -9
  232. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +6 -4
  233. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +40 -0
  234. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +6 -4
  235. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +6 -4
  236. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +5 -6
  237. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +3 -16
  238. data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +9 -17
  239. data/test/wsdl/soaptype/test_soaptype.rb +29 -11
  240. data/test/xsd/test_xsd.rb +115 -1
  241. metadata +421 -454
  242. data/test/interopR2/client.NetRemoting.rb.result +0 -3410
  243. data/test/interopR2/client.NetRemoting_Base.log +0 -6279
  244. data/test/interopR2/client.NetRemoting_GroupB.log +0 -1188
  245. data/test/interopR2/client4S4C2_Base.log +0 -4955
  246. data/test/interopR2/client4S4C2_GroupB.log +0 -1000
  247. data/test/interopR2/client4S4C_Base.log +0 -4635
  248. data/test/interopR2/client4S4C_GroupB.log +0 -900
  249. data/test/interopR2/clientASP.NET_Base.log +0 -5468
  250. data/test/interopR2/clientASP.NET_GroupB.log +0 -977
  251. data/test/interopR2/clientApacheAxis_Base.log +0 -3171
  252. data/test/interopR2/clientApacheAxis_GroupB.log +0 -498
  253. data/test/interopR2/clientApacheSOAP_Base.log +0 -3171
  254. data/test/interopR2/clientBEAWebLogic_Base.log +0 -3171
  255. data/test/interopR2/clientBEAWebLogic_GroupB.log +0 -498
  256. data/test/interopR2/clientCapeConnect_Base.log +0 -2126
  257. data/test/interopR2/clientDelphi_Base.log +0 -0
  258. data/test/interopR2/clientEasySoap_Base.log +0 -6187
  259. data/test/interopR2/clientEasySoap_GroupB.log +0 -1076
  260. data/test/interopR2/clientFrontier_Base.log +0 -5188
  261. data/test/interopR2/clientHP_Base.log +0 -3171
  262. data/test/interopR2/clientHP_GroupB.log +0 -498
  263. data/test/interopR2/clientJSOAP_Base.log +0 -4465
  264. data/test/interopR2/clientJSOAP_GroupB.log +0 -824
  265. data/test/interopR2/clientKafkaXSLT_Base.log +0 -10299
  266. data/test/interopR2/clientKafkaXSLT_GroupB.log +0 -1739
  267. data/test/interopR2/clientMSSOAPToolkit2.0_Base.log +0 -4805
  268. data/test/interopR2/clientMSSOAPToolkit2.0_GroupB.log +0 -871
  269. data/test/interopR2/clientMSSOAPToolkit3.0_Base.log +0 -5076
  270. data/test/interopR2/clientMSSOAPToolkit3.0_GroupB.log +0 -908
  271. data/test/interopR2/clientNuSOAP_Base.log +0 -5076
  272. data/test/interopR2/clientNuSOAP_GroupB.log +0 -958
  273. data/test/interopR2/clientNuWave_Base.log +0 -2019
  274. data/test/interopR2/clientOpenLink_Base.log +0 -6171
  275. data/test/interopR2/clientOpenLink_GroupB.log +0 -1094
  276. data/test/interopR2/clientOracle_Base.log +0 -5594
  277. data/test/interopR2/clientPEAR_Base.log +0 -6261
  278. data/test/interopR2/clientPEAR_GroupB.log +0 -1106
  279. data/test/interopR2/clientPhalanx_Base.log +0 -41036
  280. data/test/interopR2/clientPhalanx_GroupB.log +0 -6519
  281. data/test/interopR2/clientSIMACE_Base.log +0 -6171
  282. data/test/interopR2/clientSIMACE_GroupB.log +0 -1093
  283. data/test/interopR2/clientSOAP4R.rb.result +0 -3409
  284. data/test/interopR2/clientSOAP4R_Base.log +0 -6366
  285. data/test/interopR2/clientSOAP4R_GroupB.log +0 -1112
  286. data/test/interopR2/clientSQLData_Base.log +0 -4857
  287. data/test/interopR2/clientSQLData_GroupB.log +0 -770
  288. data/test/interopR2/clientSilverStream_Base.log +0 -3171
  289. data/test/interopR2/clientSpray2001_Base.log +0 -8187
  290. data/test/interopR2/clientSpray2001_GroupB.log +0 -1408
  291. data/test/interopR2/clientSun_Base.log +0 -4641
  292. data/test/interopR2/clientSun_GroupB.log +0 -856
  293. data/test/interopR2/clientVWOpentalkSoap_Base.log +0 -5402
  294. data/test/interopR2/clientVWOpentalkSoap_GroupB.log +0 -972
  295. data/test/interopR2/clientWASPC_Base.log +0 -4187
  296. data/test/interopR2/clientWASPC_GroupB.log +0 -763
  297. data/test/interopR2/clientWASP_Base.log +0 -5414
  298. data/test/interopR2/clientWASP_GroupB.log +0 -970
  299. data/test/interopR2/clientWebMethods_Base.log +0 -3075
  300. data/test/interopR2/clientWebMethods_GroupB.log +0 -483
  301. data/test/interopR2/clientWhiteMesa_Base.log +0 -4359
  302. data/test/interopR2/clientWhiteMesa_GroupB.log +0 -808
  303. data/test/interopR2/clientWingfoot_Base.log +0 -4445
  304. data/test/interopR2/clientWingfoot_GroupB.log +0 -848
  305. data/test/interopR2/clientXMLBus_Base.log +0 -3075
  306. data/test/interopR2/clientXMLBus_GroupB.log +0 -483
  307. data/test/interopR2/clientXSOAP_Base.log +0 -4445
  308. data/test/interopR2/clienteSOAP_Base.log +0 -8728
  309. data/test/interopR2/clientgSOAP_Base.log +0 -4689
  310. data/test/interopR2/clientgSOAP_GroupB.log +0 -1014
  311. data/test/interopR2/clientkSOAP_Base.log +0 -5625
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - SOAP XML Instance Parser library.
2
- # Copyright (C) 2001, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -28,7 +28,9 @@ private
28
28
  class ParseFrame
29
29
  attr_reader :node
30
30
  attr_reader :name
31
- attr_reader :ns, :encodingstyle
31
+ attr_reader :ns
32
+ attr_reader :encodingstyle
33
+ attr_reader :handler
32
34
 
33
35
  class NodeContainer
34
36
  def initialize(node)
@@ -46,15 +48,22 @@ private
46
48
 
47
49
  public
48
50
 
49
- def initialize(ns, name, node, encodingstyle)
51
+ def initialize(ns, name, node, encodingstyle, handler)
50
52
  @ns = ns
51
53
  @name = name
52
- self.node = node
54
+ @node = NodeContainer.new(node)
53
55
  @encodingstyle = encodingstyle
56
+ @handler = handler
54
57
  end
55
58
 
56
- def node=(node)
57
- @node = NodeContainer.new(node)
59
+ # to avoid memory consumption
60
+ def update(ns, name, node, encodingstyle, handler)
61
+ @ns = ns
62
+ @name = name
63
+ @node.replace_node(node)
64
+ @encodingstyle = encodingstyle
65
+ @handler = handler
66
+ self
58
67
  end
59
68
  end
60
69
 
@@ -69,6 +78,7 @@ public
69
78
  @opt = opt
70
79
  @parser = XSD::XMLParser.create_parser(self, opt)
71
80
  @parsestack = nil
81
+ @recycleframe = nil
72
82
  @lastnode = nil
73
83
  @handlers = {}
74
84
  @envelopenamespace = opt[:envelopenamespace] || EnvelopeNamespace
@@ -106,7 +116,7 @@ public
106
116
  lastframe = @parsestack.last
107
117
  ns = parent = parent_encodingstyle = nil
108
118
  if lastframe
109
- ns = lastframe.ns.clone_ns
119
+ ns = lastframe.ns
110
120
  parent = lastframe.node
111
121
  parent_encodingstyle = lastframe.encodingstyle
112
122
  else
@@ -114,10 +124,9 @@ public
114
124
  parent = ParseFrame::NodeContainer.new(nil)
115
125
  parent_encodingstyle = nil
116
126
  end
117
-
118
- attrs = XSD::XMLParser.filter_ns(ns, attrs)
127
+ # ns might be the same
128
+ ns, attrs = XSD::XMLParser.filter_ns(ns, attrs)
119
129
  encodingstyle = find_encodingstyle(ns, attrs)
120
-
121
130
  # Children's encodingstyle is derived from its parent.
122
131
  if encodingstyle.nil?
123
132
  if parent.node.is_a?(SOAPHeader)
@@ -126,17 +135,24 @@ public
126
135
  encodingstyle = parent_encodingstyle || @default_encodingstyle
127
136
  end
128
137
  end
129
-
130
- node = decode_tag(ns, name, attrs, parent, encodingstyle)
131
-
132
- @parsestack << ParseFrame.new(ns, name, node, encodingstyle)
138
+ handler = find_handler(encodingstyle)
139
+ unless handler
140
+ raise FormatDecodeError.new("Unknown encodingStyle: #{ encodingstyle }.")
141
+ end
142
+ node = decode_tag(ns, name, attrs, parent, handler)
143
+ if @recycleframe
144
+ @parsestack << @recycleframe.update(ns, name, node, encodingstyle, handler)
145
+ @recycleframe = nil
146
+ else
147
+ @parsestack << ParseFrame.new(ns, name, node, encodingstyle, handler)
148
+ end
133
149
  end
134
150
 
135
151
  def characters(text)
136
152
  lastframe = @parsestack.last
137
153
  if lastframe
138
154
  # Need not to be cloned because character does not have attr.
139
- decode_text(lastframe.ns, text, lastframe.encodingstyle)
155
+ decode_text(lastframe.ns, text, lastframe.handler)
140
156
  else
141
157
  # Ignore Text outside of SOAP Envelope.
142
158
  p text if $DEBUG
@@ -148,8 +164,9 @@ public
148
164
  unless name == lastframe.name
149
165
  raise UnexpectedElementError.new("Closing element name '#{ name }' does not match with opening element '#{ lastframe.name }'.")
150
166
  end
151
- decode_tag_end(lastframe.ns, lastframe.node, lastframe.encodingstyle)
167
+ decode_tag_end(lastframe.ns, lastframe.node, lastframe.handler)
152
168
  @lastnode = lastframe.node.node
169
+ @recycleframe = lastframe
153
170
  end
154
171
 
155
172
  private
@@ -163,44 +180,24 @@ private
163
180
  nil
164
181
  end
165
182
 
166
- def decode_tag(ns, name, attrs, parent, encodingstyle)
183
+ def decode_tag(ns, name, attrs, parent, handler)
167
184
  ele = ns.parse(name)
168
-
169
185
  # Envelope based parsing.
170
186
  if ((ele.namespace == @envelopenamespace) ||
171
187
  (@allow_unqualified_element && ele.namespace.nil?))
172
188
  o = decode_soap_envelope(ns, ele, attrs, parent)
173
189
  return o if o
174
190
  end
175
-
176
191
  # Encoding based parsing.
177
- handler = find_handler(encodingstyle)
178
- if handler
179
- return handler.decode_tag(ns, ele, attrs, parent)
180
- else
181
- raise FormatDecodeError.new("Unknown encodingStyle: #{ encodingstyle }.")
182
- end
192
+ return handler.decode_tag(ns, ele, attrs, parent)
183
193
  end
184
194
 
185
- def decode_tag_end(ns, node, encodingstyle)
186
- return unless encodingstyle
187
-
188
- handler = find_handler(encodingstyle)
189
- if handler
190
- return handler.decode_tag_end(ns, node)
191
- else
192
- raise FormatDecodeError.new("Unknown encodingStyle: #{ encodingstyle }.")
193
- end
195
+ def decode_tag_end(ns, node, handler)
196
+ return handler.decode_tag_end(ns, node)
194
197
  end
195
198
 
196
- def decode_text(ns, text, encodingstyle)
197
- handler = find_handler(encodingstyle)
198
-
199
- if handler
200
- handler.decode_text(ns, text)
201
- else
202
- # How should I do?
203
- end
199
+ def decode_text(ns, text, handler)
200
+ handler.decode_text(ns, text)
204
201
  end
205
202
 
206
203
  def decode_soap_envelope(ns, ele, attrs, parent)
@@ -231,6 +228,7 @@ private
231
228
  o = SOAPFault.new
232
229
  parent.node.fault = o
233
230
  end
231
+ o.extraattr.update(attrs) if o
234
232
  o
235
233
  end
236
234
 
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - marshal/unmarshal interface.
2
- # Copyright (C) 2000, 2001, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -1,5 +1,5 @@
1
1
  # soap/property.rb: SOAP4R - Property implementation.
2
- # Copyright (C) 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -65,13 +65,13 @@ class Property
65
65
 
66
66
  KEY_REGSRC = '([^=:\\\\]*(?:\\\\.[^=:\\\\]*)*)'
67
67
  DEF_REGSRC = '\\s*' + KEY_REGSRC + '\\s*[=:]\\s*(.*)'
68
- COMMENT_REGEXP = Regexp.new('^(?:#.*|)$')
69
- CATDEF_REGEXP = Regexp.new("^\\[\\s*#{KEY_REGSRC}\\s*\\]$")
70
- LINE_REGEXP = Regexp.new("^#{DEF_REGSRC}$")
68
+ COMMENT_REGEXP = Regexp.new('^(?:#.*|)$', nil, 'u')
69
+ CATDEF_REGEXP = Regexp.new("^\\[\\s*#{KEY_REGSRC}\\s*\\]$", nil, 'u')
70
+ LINE_REGEXP = Regexp.new("^#{DEF_REGSRC}$", nil, 'u')
71
71
  def load(stream)
72
72
  key_prefix = ""
73
73
  stream.each_with_index do |line, lineno|
74
- line.sub!(/\r?\n\z/, '')
74
+ line.sub!(/\r?\n\z/u, '')
75
75
  case line
76
76
  when COMMENT_REGEXP
77
77
  next
@@ -279,7 +279,7 @@ private
279
279
  when Symbol
280
280
  [name]
281
281
  when String
282
- name.scan(/[^.\\]+(?:\\.[^.\\])*/) # split with unescaped '.'
282
+ name.scan(/[^.\\]+(?:\\.[^.\\])*/u) # split with unescaped '.'
283
283
  when Array
284
284
  name
285
285
  else
@@ -311,7 +311,7 @@ private
311
311
  end
312
312
 
313
313
  def loadstr(str)
314
- str.gsub(/\\./) { |c| eval("\"#{c}\"") }
314
+ str.gsub(/\\./u) { |c| eval("\"#{c}\"") }
315
315
  end
316
316
  end
317
317
 
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - Proxy library.
2
- # Copyright (C) 2000, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - XML QName definition.
2
- # Copyright (C) 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - CGI/mod_ruby stub library
2
- # Copyright (C) 2001, 2003-2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -34,6 +34,11 @@ class CGIStub < Logger::Application
34
34
  def [](var); end
35
35
 
36
36
  def meta_vars; end
37
+
38
+ EMPTY_COOKIES = [].freeze
39
+ def cookies; EMPTY_COOKIES; end
40
+
41
+ def user; end
37
42
  end
38
43
 
39
44
  class SOAPStdinRequest < SOAPRequest
@@ -53,6 +58,18 @@ class CGIStub < Logger::Application
53
58
  'HTTP_SOAPACTION' => ENV['HTTP_SOAPAction']
54
59
  }
55
60
  end
61
+
62
+ def cookies
63
+ if cookie = ENV['HTTP_Cookie'] || ENV['Cookie']
64
+ [WEBrick::Cookie.parse(cookie)]
65
+ else
66
+ EMPTY_COOKIES
67
+ end
68
+ end
69
+
70
+ def user
71
+ ENV['REMOTE_USER']
72
+ end
56
73
  end
57
74
 
58
75
  class SOAPFCGIRequest < SOAPRequest
@@ -72,6 +89,18 @@ class CGIStub < Logger::Application
72
89
  'HTTP_SOAPACTION' => @request.env['HTTP_SOAPAction']
73
90
  }
74
91
  end
92
+
93
+ def cookies
94
+ if cookie = @request.env['HTTP_Cookie'] || @request.env['Cookie']
95
+ [WEBrick::Cookie.parse(cookie)]
96
+ else
97
+ EMPTY_COOKIES
98
+ end
99
+ end
100
+
101
+ def user
102
+ @request.env['REMOTE_USER']
103
+ end
75
104
  end
76
105
 
77
106
  def initialize(appname, default_namespace)
@@ -125,6 +154,10 @@ class CGIStub < Logger::Application
125
154
  end
126
155
  alias add_rpc_headerhandler add_headerhandler
127
156
 
157
+ def filterchain
158
+ @router.filterchain
159
+ end
160
+
128
161
  # method entry interface
129
162
 
130
163
  def add_rpc_method(obj, name, *param)
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - SOAP RPC driver
2
- # Copyright (C) 2000, 2001, 2003-2006 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -62,6 +62,7 @@ class Driver
62
62
  __attr_proxy :generate_explicit_type, true
63
63
  __attr_proxy :return_response_as_xml, true
64
64
  __attr_proxy :headerhandler
65
+ __attr_proxy :filterchain
65
66
  __attr_proxy :streamhandler
66
67
  __attr_proxy :test_loopback_response
67
68
  __attr_proxy :reset_stream
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - RPC element definition.
2
- # Copyright (C) 2000, 2001, 2003, 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -100,6 +100,10 @@ class SOAPMethod < SOAPStruct
100
100
  init_param(@param_def) if @param_def
101
101
  end
102
102
 
103
+ def have_member
104
+ true
105
+ end
106
+
103
107
  def have_outparam?
104
108
  @outparam_names.size > 0
105
109
  end
@@ -112,6 +116,14 @@ class SOAPMethod < SOAPStruct
112
116
  collect_params(OUT, INOUT)
113
117
  end
114
118
 
119
+ def input_param_types
120
+ collect_param_types(IN, INOUT)
121
+ end
122
+
123
+ def output_param_types
124
+ collect_param_types(OUT, INOUT)
125
+ end
126
+
115
127
  def set_param(params)
116
128
  params.each do |param, data|
117
129
  @inparam[param] = data
@@ -129,9 +141,9 @@ class SOAPMethod < SOAPStruct
129
141
 
130
142
  def get_paramtypes(names)
131
143
  types = []
132
- @signature.each do |io_type, name, param_type|
133
- if param_type && idx = names.index(name)
134
- types[idx] = XSD::QName.new(param_type[1], param_type[2])
144
+ @signature.each do |io_type, name, type_qname|
145
+ if type_qname && idx = names.index(name)
146
+ types[idx] = type_qname
135
147
  end
136
148
  end
137
149
  types
@@ -189,9 +201,17 @@ class SOAPMethod < SOAPStruct
189
201
 
190
202
  private
191
203
 
204
+ def collect_param_types(*type)
205
+ names = []
206
+ @signature.each do |io_type, name, type_qname|
207
+ names << type_qname if type.include?(io_type)
208
+ end
209
+ names
210
+ end
211
+
192
212
  def collect_params(*type)
193
213
  names = []
194
- @signature.each do |io_type, name, param_type|
214
+ @signature.each do |io_type, name, type_qname|
195
215
  names << name if type.include?(io_type)
196
216
  end
197
217
  names
@@ -199,15 +219,24 @@ private
199
219
 
200
220
  def init_param(param_def)
201
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
226
+ if nsdef && namedef
227
+ type_qname = XSD::QName.new(nsdef, namedef)
228
+ elsif mapped_class
229
+ type_qname = TypeMap.index(mapped_class)
230
+ end
202
231
  case io_type
203
232
  when IN
204
- @signature.push([IN, name, param_type])
233
+ @signature.push([IN, name, type_qname])
205
234
  @inparam_names.push(name)
206
235
  when OUT
207
- @signature.push([OUT, name, param_type])
236
+ @signature.push([OUT, name, type_qname])
208
237
  @outparam_names.push(name)
209
238
  when INOUT
210
- @signature.push([INOUT, name, param_type])
239
+ @signature.push([INOUT, name, type_qname])
211
240
  @inoutparam_names.push(name)
212
241
  when RETVAL
213
242
  if @retval_name
@@ -215,13 +244,7 @@ private
215
244
  end
216
245
  @retval_name = name
217
246
  @retval_class_name = nil
218
- if param_type
219
- if param_type[0].is_a?(String)
220
- @retval_class_name = Mapping.class_from_name(param_type[0])
221
- else
222
- @retval_class_name = param_type[0]
223
- end
224
- end
247
+ @retval_class_name = mapped_class
225
248
  else
226
249
  raise MethodDefinitionError.new("unknown type: #{io_type}")
227
250
  end
@@ -284,6 +307,10 @@ class SOAPMethodResponse < SOAPMethod
284
307
  @retval = nil
285
308
  end
286
309
 
310
+ def retval
311
+ @retval
312
+ end
313
+
287
314
  def retval=(retval)
288
315
  @retval = retval
289
316
  @retval.elename = @retval.elename.dup_name(@retval_name || 'return')
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - WEBrick HTTP Server
2
- # Copyright (C) 2003, 2004, 2005 by NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -52,6 +52,14 @@ class HTTPServer < Logger::Application
52
52
  @server.shutdown if @server
53
53
  end
54
54
 
55
+ def authenticator
56
+ @soaplet.authenticator
57
+ end
58
+
59
+ def authenticator=(authenticator)
60
+ @soaplet.authenticator = authenticator
61
+ end
62
+
55
63
  def mapping_registry
56
64
  @router.mapping_registry
57
65
  end
@@ -95,6 +103,10 @@ class HTTPServer < Logger::Application
95
103
  end
96
104
  alias add_rpc_headerhandler add_headerhandler
97
105
 
106
+ def filterchain
107
+ @router.filterchain
108
+ end
109
+
98
110
  # method entry interface
99
111
 
100
112
  def add_rpc_method(obj, name, *param)