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
@@ -0,0 +1,37 @@
1
+ # WSDL4R - XMLSchema totalDigits definition for WSDL.
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 'wsdl/info'
10
+
11
+
12
+ module WSDL
13
+ module XMLSchema
14
+
15
+
16
+ class TotalDigits < Info
17
+ def initialize
18
+ super
19
+ end
20
+
21
+ def parse_element(element)
22
+ nil
23
+ end
24
+
25
+ def parse_attr(attr, value)
26
+ case attr
27
+ when FixedAttrName
28
+ parent.fixed[:totaldigits] = to_boolean(value)
29
+ when ValueAttrName
30
+ parent.totaldigits = to_int(value)
31
+ end
32
+ end
33
+ end
34
+
35
+
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ # WSDL4R - XMLSchema whiteSpace definition for WSDL.
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 'wsdl/info'
10
+
11
+
12
+ module WSDL
13
+ module XMLSchema
14
+
15
+
16
+ class WhiteSpace < Info
17
+ def initialize
18
+ super
19
+ end
20
+
21
+ def parse_element(element)
22
+ nil
23
+ end
24
+
25
+ def parse_attr(attr, value)
26
+ case attr
27
+ when FixedAttrName
28
+ parent.fixed[:whitespace] = to_boolean(value)
29
+ when ValueAttrName
30
+ parent.whitespace = value.source
31
+ end
32
+ end
33
+ end
34
+
35
+
36
+ end
37
+ end
@@ -9,7 +9,9 @@
9
9
  require 'xsd/codegen/gensupport'
10
10
  require 'wsdl/xmlSchema/importer'
11
11
  require 'wsdl/soap/classDefCreator'
12
+ require 'wsdl/soap/classDefCreatorSupport'
12
13
  require 'wsdl/soap/literalMappingRegistryCreator'
14
+ require 'wsdl/soap/classNameCreator'
13
15
  require 'logger'
14
16
 
15
17
 
@@ -18,6 +20,8 @@ module XMLSchema
18
20
 
19
21
 
20
22
  class XSD2Ruby
23
+ include WSDL::SOAP::ClassDefCreatorSupport
24
+
21
25
  attr_accessor :location
22
26
  attr_reader :opt
23
27
  attr_accessor :logger
@@ -41,6 +45,7 @@ private
41
45
  @basedir = nil
42
46
  @xsd = nil
43
47
  @name = nil
48
+ @name_creator = WSDL::SOAP::ClassNameCreator.new
44
49
  end
45
50
 
46
51
  def create_file
@@ -55,7 +60,7 @@ private
55
60
  @classdef_filename = @name + '.rb'
56
61
  check_file(@classdef_filename) or return
57
62
  write_file(@classdef_filename) do |f|
58
- f << WSDL::SOAP::ClassDefCreator.new(@xsd, @modulepath).dump
63
+ f << WSDL::SOAP::ClassDefCreator.new(@xsd, @name_creator, @modulepath).dump
59
64
  end
60
65
  end
61
66
 
@@ -78,9 +83,9 @@ private
78
83
  end
79
84
 
80
85
  def dump_mapping_registry
81
- creator = WSDL::SOAP::LiteralMappingRegistryCreator.new(@xsd, @modulepath)
82
- module_name = XSD::CodeGen::GenSupport.safeconstname(
83
- @name + 'MappingRegistry')
86
+ defined_const = {}
87
+ creator = WSDL::SOAP::LiteralMappingRegistryCreator.new(@xsd, @name_creator, @modulepath, defined_const)
88
+ module_name = XSD::CodeGen::GenSupport.safeconstname(@name + 'MappingRegistry')
84
89
  if @modulepath
85
90
  module_name = [@modulepath, module_name].join('::')
86
91
  end
@@ -90,6 +95,10 @@ private
90
95
  varname = 'Registry'
91
96
  m.def_const(varname, '::SOAP::Mapping::LiteralRegistry.new')
92
97
  m.def_code(creator.dump(varname))
98
+ #
99
+ defined_const.each do |ns, tag|
100
+ m.def_const(tag, dq(ns))
101
+ end
93
102
  m.dump
94
103
  end
95
104
 
@@ -77,6 +77,8 @@ public
77
77
  'X_UNKNOWN' => nil,
78
78
  }
79
79
 
80
+ CharsetStrCache = {}
81
+
80
82
 
81
83
  ###
82
84
  ## handlers
@@ -119,26 +121,26 @@ public
119
121
 
120
122
  def Charset.charset_str(label)
121
123
  if CharsetMap.respond_to?(:key)
122
- CharsetMap.key(label.downcase) || 'X_UNKNOWN'
124
+ CharsetStrCache[label] ||= CharsetMap.key(label.downcase) || 'X_UNKNOWN'
123
125
  else
124
- CharsetMap.index(label.downcase) || 'X_UNKNOWN'
126
+ CharsetStrCache[label] ||= CharsetMap.index(label.downcase) || 'X_UNKNOWN'
125
127
  end
126
128
  end
127
129
 
128
130
  # us_ascii = '[\x00-\x7F]'
129
131
  us_ascii = '[\x9\xa\xd\x20-\x7F]' # XML 1.0 restricted.
130
- USASCIIRegexp = Regexp.new("\\A#{us_ascii}*\\z", nil, "NONE")
132
+ USASCIIRegexp = Regexp.new("\\A#{us_ascii}*\\z", nil, 'NONE')
131
133
 
132
134
  twobytes_euc = '(?:[\x8E\xA1-\xFE][\xA1-\xFE])'
133
135
  threebytes_euc = '(?:\x8F[\xA1-\xFE][\xA1-\xFE])'
134
136
  character_euc = "(?:#{us_ascii}|#{twobytes_euc}|#{threebytes_euc})"
135
- EUCRegexp = Regexp.new("\\A#{character_euc}*\\z", nil, "NONE")
137
+ EUCRegexp = Regexp.new("\\A#{character_euc}*\\z", nil, 'NONE')
136
138
 
137
139
  # onebyte_sjis = '[\x00-\x7F\xA1-\xDF]'
138
140
  onebyte_sjis = '[\x9\xa\xd\x20-\x7F\xA1-\xDF]' # XML 1.0 restricted.
139
141
  twobytes_sjis = '(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'
140
142
  character_sjis = "(?:#{onebyte_sjis}|#{twobytes_sjis})"
141
- SJISRegexp = Regexp.new("\\A#{character_sjis}*\\z", nil, "NONE")
143
+ SJISRegexp = Regexp.new("\\A#{character_sjis}*\\z", nil, 'NONE')
142
144
 
143
145
  # 0xxxxxxx
144
146
  # 110yyyyy 10xxxxxx
@@ -149,7 +151,7 @@ public
149
151
  fourbytes_utf8 = '(?:[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF])'
150
152
  character_utf8 =
151
153
  "(?:#{us_ascii}|#{twobytes_utf8}|#{threebytes_utf8}|#{fourbytes_utf8})"
152
- UTF8Regexp = Regexp.new("\\A#{character_utf8}*\\z", nil, "NONE")
154
+ UTF8Regexp = Regexp.new("\\A#{character_utf8}*\\z", nil, 'NONE')
153
155
 
154
156
  def Charset.is_us_ascii(str)
155
157
  USASCIIRegexp =~ str
@@ -60,6 +60,11 @@ class ClassDef < ModuleDef
60
60
  spacer = true
61
61
  buf << dump_const
62
62
  end
63
+ unless @innermodule.empty?
64
+ buf << dump_emptyline # always add 1 empty line
65
+ spacer = true
66
+ buf << dump_innermodule
67
+ end
63
68
  unless @code.empty?
64
69
  buf << dump_emptyline if spacer
65
70
  spacer = true
@@ -19,6 +19,9 @@ class ModuleDef
19
19
  include GenSupport
20
20
  include CommentDef
21
21
 
22
+ attr_reader :name
23
+ attr_reader :innermodule
24
+
22
25
  def initialize(name)
23
26
  @name = name
24
27
  @comment = nil
@@ -26,6 +29,7 @@ class ModuleDef
26
29
  @code = []
27
30
  @requirepath = []
28
31
  @methoddef = []
32
+ @innermodule = []
29
33
  end
30
34
 
31
35
  def def_require(path)
@@ -77,6 +81,11 @@ class ModuleDef
77
81
  spacer = true
78
82
  buf << dump_const
79
83
  end
84
+ unless @innermodule.empty?
85
+ buf << dump_emptyline # always add 1 empty line
86
+ spacer = true
87
+ buf << dump_innermodule
88
+ end
80
89
  unless @code.empty?
81
90
  buf << dump_emptyline if spacer
82
91
  spacer = true
@@ -110,6 +119,14 @@ private
110
119
  )
111
120
  end
112
121
 
122
+ def dump_innermodule
123
+ dump_static(
124
+ @innermodule.collect { |moduledef|
125
+ moduledef.dump
126
+ }.join("\n")
127
+ )
128
+ end
129
+
113
130
  def dump_code
114
131
  dump_static(@code.join("\n"))
115
132
  end
@@ -8,6 +8,7 @@
8
8
 
9
9
  require 'xsd/qname'
10
10
  require 'xsd/charset'
11
+ require 'soap/nestedexception'
11
12
  require 'uri'
12
13
 
13
14
 
@@ -48,15 +49,15 @@ QNameLiteral = 'QName'
48
49
  NormalizedStringLiteral = 'normalizedString'
49
50
  TokenLiteral = 'token'
50
51
  LanguageLiteral = 'language'
51
- #3.3.4 NMTOKEN
52
- #3.3.5 NMTOKENS
53
- #3.3.6 Name
54
- #3.3.7 NCName
55
- #3.3.8 ID
56
- #3.3.9 IDREF
57
- #3.3.10 IDREFS
58
- #3.3.11 ENTITY
59
- #3.3.12 ENTITIES
52
+ NMTOKENLiteral = 'NMTOKEN'
53
+ NMTOKENSLiteral = 'NMTOKENS'
54
+ NameLiteral = 'Name'
55
+ NCNameLiteral = 'NCName'
56
+ IDLiteral = 'ID'
57
+ IDREFLiteral = 'IDREF'
58
+ IDREFSLiteral = 'IDREFS'
59
+ ENTITYLiteral = 'ENTITY'
60
+ ENTITIESLiteral = 'ENTITIES'
60
61
  IntegerLiteral = 'integer'
61
62
  NonPositiveIntegerLiteral = 'nonPositiveInteger'
62
63
  NegativeIntegerLiteral = 'negativeInteger'
@@ -77,7 +78,7 @@ AttrNilName = QName.new(InstanceNamespace, NilLiteral)
77
78
  AnyTypeName = QName.new(Namespace, AnyTypeLiteral)
78
79
  AnySimpleTypeName = QName.new(Namespace, AnySimpleTypeLiteral)
79
80
 
80
- class Error < StandardError; end
81
+ class Error < StandardError; include ::SOAP::NestedException; end
81
82
  class ValueSpaceError < Error; end
82
83
 
83
84
 
@@ -343,7 +344,7 @@ private
343
344
  begin
344
345
  return narrow32bit(Float(str))
345
346
  rescue ArgumentError
346
- raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
347
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.", $!)
347
348
  end
348
349
  end
349
350
  end
@@ -409,10 +410,10 @@ private
409
410
  begin
410
411
  return Float(str + '0')
411
412
  rescue ArgumentError
412
- raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
413
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.", $!)
413
414
  end
414
415
  else
415
- raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
416
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.", $!)
416
417
  end
417
418
  end
418
419
  end
@@ -454,8 +455,8 @@ private
454
455
  unless Regexp.last_match
455
456
  raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
456
457
  end
457
- if ($5 and ((!$2 and !$3 and !$4) or (!$6 and !$7 and !$8)))
458
- # Should we allow 'PT5S' here?
458
+ if $5 and !$6 and !$7 and !$8
459
+ # allows durations lower than a day such as 'PT5S'.
459
460
  raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
460
461
  end
461
462
  sign = $1
@@ -491,12 +492,12 @@ private
491
492
  r << "#{ @min }M" if @min.nonzero?
492
493
  r << "#{ @sec }S" if @sec.nonzero?
493
494
  str << l
494
- if l.empty?
495
- str << "0D"
496
- end
497
495
  unless r.empty?
498
496
  str << "T" << r
499
497
  end
498
+ if l.empty? and r.empty?
499
+ str << "0D"
500
+ end
500
501
  str
501
502
  end
502
503
  end
@@ -950,7 +951,7 @@ private
950
951
  begin
951
952
  URI.parse(value.to_s.strip)
952
953
  rescue URI::InvalidURIError
953
- raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
954
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.", $!)
954
955
  end
955
956
  end
956
957
  end
@@ -1052,6 +1053,150 @@ private
1052
1053
  end
1053
1054
  end
1054
1055
 
1056
+ class XSDNMTOKEN < XSDToken
1057
+ Type = QName.new(Namespace, NMTOKENLiteral)
1058
+
1059
+ def initialize(value = nil)
1060
+ init(Type, value)
1061
+ end
1062
+
1063
+ private
1064
+
1065
+ def screen_data(value)
1066
+ super
1067
+ # TODO: check lexical space and convert to a value
1068
+ value
1069
+ end
1070
+ end
1071
+
1072
+ class XSDNMTOKENS < XSDNMTOKEN
1073
+ Type = QName.new(Namespace, NMTOKENSLiteral)
1074
+
1075
+ def initialize(value = nil)
1076
+ init(Type, value)
1077
+ end
1078
+
1079
+ private
1080
+
1081
+ def screen_data(value)
1082
+ # derived by list
1083
+ # TODO: check lexical space and convert to a value
1084
+ value
1085
+ end
1086
+ end
1087
+
1088
+ class XSDName < XSDToken
1089
+ Type = QName.new(Namespace, NameLiteral)
1090
+
1091
+ def initialize(value = nil)
1092
+ init(Type, value)
1093
+ end
1094
+
1095
+ private
1096
+
1097
+ def screen_data(value)
1098
+ super
1099
+ # TODO: check lexical space and convert to a value
1100
+ value
1101
+ end
1102
+ end
1103
+
1104
+ class XSDNCName < XSDName
1105
+ Type = QName.new(Namespace, NCNameLiteral)
1106
+
1107
+ def initialize(value = nil)
1108
+ init(Type, value)
1109
+ end
1110
+
1111
+ private
1112
+
1113
+ def screen_data(value)
1114
+ super
1115
+ # TODO: check lexical space and convert to a value
1116
+ value
1117
+ end
1118
+ end
1119
+
1120
+ class XSDID < XSDNCName
1121
+ Type = QName.new(Namespace, IDLiteral)
1122
+
1123
+ def initialize(value = nil)
1124
+ init(Type, value)
1125
+ end
1126
+
1127
+ private
1128
+
1129
+ def screen_data(value)
1130
+ super
1131
+ # TODO: check lexical space and convert to a value
1132
+ value
1133
+ end
1134
+ end
1135
+
1136
+ class XSDIDREF < XSDNCName
1137
+ Type = QName.new(Namespace, IDREFLiteral)
1138
+
1139
+ def initialize(value = nil)
1140
+ init(Type, value)
1141
+ end
1142
+
1143
+ private
1144
+
1145
+ def screen_data(value)
1146
+ super
1147
+ # TODO: check lexical space and convert to a value
1148
+ value
1149
+ end
1150
+ end
1151
+
1152
+ class XSDIDREFS < XSDIDREF
1153
+ Type = QName.new(Namespace, IDREFSLiteral)
1154
+
1155
+ def initialize(value = nil)
1156
+ init(Type, value)
1157
+ end
1158
+
1159
+ private
1160
+
1161
+ def screen_data(value)
1162
+ # derived by list
1163
+ # TODO: check lexical space and convert to a value
1164
+ value
1165
+ end
1166
+ end
1167
+
1168
+ class XSDENTITY < XSDNCName
1169
+ Type = QName.new(Namespace, ENTITYLiteral)
1170
+
1171
+ def initialize(value = nil)
1172
+ init(Type, value)
1173
+ end
1174
+
1175
+ private
1176
+
1177
+ def screen_data(value)
1178
+ super
1179
+ # TODO: check lexical space and convert to a value
1180
+ value
1181
+ end
1182
+ end
1183
+
1184
+ class XSDENTITIES < XSDENTITY
1185
+ Type = QName.new(Namespace, ENTITIESLiteral)
1186
+
1187
+ def initialize(value = nil)
1188
+ init(Type, value)
1189
+ end
1190
+
1191
+ private
1192
+
1193
+ def screen_data(value)
1194
+ # derived by list
1195
+ # TODO: check lexical space and convert to a value
1196
+ value
1197
+ end
1198
+ end
1199
+
1055
1200
  class XSDInteger < XSDDecimal
1056
1201
  Type = QName.new(Namespace, IntegerLiteral)
1057
1202
 
@@ -1065,7 +1210,7 @@ private
1065
1210
  begin
1066
1211
  data = Integer(str)
1067
1212
  rescue ArgumentError
1068
- raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
1213
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.", $!)
1069
1214
  end
1070
1215
  unless validate(data)
1071
1216
  raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")