soap4r 1.5.7 → 1.5.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. data/bin/wsdl2ruby.rb +8 -2
  2. data/lib/soap/baseData.rb +93 -43
  3. data/lib/soap/element.rb +11 -8
  4. data/lib/soap/encodingstyle/handler.rb +15 -4
  5. data/lib/soap/encodingstyle/literalHandler.rb +18 -24
  6. data/lib/soap/encodingstyle/soapHandler.rb +34 -77
  7. data/lib/soap/generator.rb +74 -48
  8. data/lib/soap/header/handler.rb +1 -1
  9. data/lib/soap/header/mappinghandler.rb +47 -0
  10. data/lib/soap/mapping/encodedregistry.rb +19 -13
  11. data/lib/soap/mapping/factory.rb +19 -3
  12. data/lib/soap/mapping/literalregistry.rb +47 -35
  13. data/lib/soap/mapping/mapping.rb +92 -24
  14. data/lib/soap/mapping/registry.rb +34 -18
  15. data/lib/soap/mapping/schemadefinition.rb +8 -1
  16. data/lib/soap/mapping/typeMap.rb +18 -0
  17. data/lib/soap/mapping/wsdlencodedregistry.rb +8 -50
  18. data/lib/soap/mapping/wsdlliteralregistry.rb +45 -39
  19. data/lib/soap/nestedexception.rb +42 -0
  20. data/lib/soap/netHttpClient.rb +1 -0
  21. data/lib/soap/ns.rb +34 -0
  22. data/lib/soap/parser.rb +32 -29
  23. data/lib/soap/processor.rb +1 -1
  24. data/lib/soap/rpc/driver.rb +1 -0
  25. data/lib/soap/rpc/element.rb +18 -6
  26. data/lib/soap/rpc/httpserver.rb +38 -24
  27. data/lib/soap/rpc/proxy.rb +14 -11
  28. data/lib/soap/rpc/router.rb +4 -1
  29. data/lib/soap/soap.rb +7 -6
  30. data/lib/soap/wsdlDriver.rb +29 -8
  31. data/lib/tags +5690 -0
  32. data/lib/wsdl/definitions.rb +26 -40
  33. data/lib/wsdl/info.rb +11 -0
  34. data/lib/wsdl/parser.rb +2 -2
  35. data/lib/wsdl/soap/cgiStubCreator.rb +10 -5
  36. data/lib/wsdl/soap/classDefCreator.rb +140 -113
  37. data/lib/wsdl/soap/classDefCreatorSupport.rb +94 -12
  38. data/lib/wsdl/soap/classNameCreator.rb +54 -0
  39. data/lib/wsdl/soap/clientSkeltonCreator.rb +6 -5
  40. data/lib/wsdl/soap/complexType.rb +10 -1
  41. data/lib/wsdl/soap/definitions.rb +4 -0
  42. data/lib/wsdl/soap/driverCreator.rb +14 -6
  43. data/lib/wsdl/soap/element.rb +4 -0
  44. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +11 -55
  45. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +28 -126
  46. data/lib/wsdl/soap/mappingRegistryCreator.rb +9 -3
  47. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +209 -94
  48. data/lib/wsdl/soap/methodDefCreator.rb +12 -16
  49. data/lib/wsdl/soap/servantSkeltonCreator.rb +3 -2
  50. data/lib/wsdl/soap/servletStubCreator.rb +107 -0
  51. data/lib/wsdl/soap/standaloneServerStubCreator.rb +10 -5
  52. data/lib/wsdl/soap/wsdl2ruby.rb +28 -13
  53. data/lib/wsdl/wsdl.rb +2 -1
  54. data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
  55. data/lib/wsdl/xmlSchema/attributeGroup.rb +86 -0
  56. data/lib/wsdl/xmlSchema/choice.rb +4 -1
  57. data/lib/wsdl/xmlSchema/complexContent.rb +1 -1
  58. data/lib/wsdl/xmlSchema/complexExtension.rb +9 -1
  59. data/lib/wsdl/xmlSchema/complexRestriction.rb +8 -0
  60. data/lib/wsdl/xmlSchema/complexType.rb +38 -5
  61. data/lib/wsdl/xmlSchema/data.rb +30 -7
  62. data/lib/wsdl/xmlSchema/element.rb +10 -2
  63. data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
  64. data/lib/wsdl/xmlSchema/group.rb +118 -0
  65. data/lib/wsdl/xmlSchema/import.rb +11 -23
  66. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  67. data/lib/wsdl/xmlSchema/include.rb +11 -17
  68. data/lib/wsdl/xmlSchema/length.rb +3 -1
  69. data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
  70. data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
  71. data/lib/wsdl/xmlSchema/maxlength.rb +3 -1
  72. data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
  73. data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
  74. data/lib/wsdl/xmlSchema/minlength.rb +3 -1
  75. data/lib/wsdl/xmlSchema/schema.rb +34 -0
  76. data/lib/wsdl/xmlSchema/sequence.rb +4 -1
  77. data/lib/wsdl/xmlSchema/simpleExtension.rb +8 -0
  78. data/lib/wsdl/xmlSchema/simpleRestriction.rb +49 -8
  79. data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
  80. data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
  81. data/lib/wsdl/xmlSchema/xsd2ruby.rb +13 -4
  82. data/lib/xsd/charset.rb +8 -6
  83. data/lib/xsd/codegen/classdef.rb +5 -0
  84. data/lib/xsd/codegen/moduledef.rb +17 -0
  85. data/lib/xsd/datatypes.rb +165 -20
  86. data/lib/xsd/mapping.rb +13 -5
  87. data/lib/xsd/namedelements.rb +8 -0
  88. data/lib/xsd/ns.rb +50 -14
  89. data/lib/xsd/qname.rb +3 -2
  90. data/lib/xsd/xmlparser.rb +4 -3
  91. data/test/soap/asp.net/test_aspdotnet.rb +1 -1
  92. data/test/soap/auth/test_basic.rb +4 -3
  93. data/test/soap/auth/test_digest.rb +4 -3
  94. data/test/soap/calc/test_calc.rb +6 -4
  95. data/test/soap/calc/test_calc2.rb +6 -4
  96. data/test/soap/calc/test_calc_cgi.rb +6 -4
  97. data/test/soap/fault/test_customfault.rb +6 -4
  98. data/test/soap/fault/test_soaparray.rb +35 -0
  99. data/test/soap/filter/test_filter.rb +2 -2
  100. data/test/soap/header/test_authheader.rb +2 -2
  101. data/test/soap/header/test_authheader_cgi.rb +3 -3
  102. data/test/soap/header/test_simplehandler.rb +2 -2
  103. data/test/soap/helloworld/test_helloworld.rb +6 -4
  104. data/test/soap/ssl/test_ssl.rb +1 -1
  105. data/test/soap/struct/test_struct.rb +2 -2
  106. data/test/soap/swa/test_file.rb +6 -4
  107. data/test/soap/test_basetype.rb +4 -4
  108. data/test/soap/test_cookie.rb +2 -2
  109. data/test/soap/test_custom_ns.rb +50 -8
  110. data/test/soap/test_custommap.rb +6 -4
  111. data/test/soap/test_empty.rb +6 -4
  112. data/test/soap/test_envelopenamespace.rb +2 -2
  113. data/test/soap/test_extraattr.rb +6 -7
  114. data/test/soap/test_generator.rb +27 -0
  115. data/test/soap/test_mapping.rb +10 -0
  116. data/test/soap/test_nestedexception.rb +56 -0
  117. data/test/soap/test_nil.rb +6 -4
  118. data/test/soap/test_no_indent.rb +6 -4
  119. data/test/soap/test_response_as_xml.rb +2 -2
  120. data/test/soap/test_streamhandler.rb +6 -3
  121. data/test/soap/test_styleuse.rb +2 -2
  122. data/test/soap/wsdlDriver/test_calc.rb +2 -2
  123. data/test/soap/wsdlDriver/test_document.rb +2 -2
  124. data/test/soap/wsdlDriver/test_simpletype.rb +2 -2
  125. data/test/wsdl/abstract/test_abstract.rb +1 -1
  126. data/test/wsdl/anonymous/expectedClassDef.rb +128 -0
  127. data/test/wsdl/anonymous/expectedDriver.rb +59 -0
  128. data/test/wsdl/anonymous/expectedMappingRegistry.rb +176 -0
  129. data/test/wsdl/anonymous/lp.wsdl +147 -0
  130. data/test/wsdl/anonymous/test_anonymous.rb +130 -0
  131. data/test/wsdl/any/expectedDriver.rb +3 -2
  132. data/test/wsdl/any/expectedEcho.rb +22 -2
  133. data/test/wsdl/any/expectedMappingRegistry.rb +63 -0
  134. data/test/wsdl/any/expectedService.rb +3 -1
  135. data/test/wsdl/any/test_any.rb +2 -7
  136. data/test/wsdl/axisArray/axisArray.wsdl +31 -4
  137. data/test/wsdl/axisArray/test_axisarray.rb +58 -3
  138. data/test/wsdl/choice/choice.wsdl +39 -0
  139. data/test/wsdl/choice/test_choice.rb +134 -7
  140. data/test/wsdl/complexcontent/test_echo.rb +1 -1
  141. data/test/wsdl/datetime/test_datetime.rb +2 -2
  142. data/test/wsdl/document/array/double.wsdl +45 -6
  143. data/test/wsdl/document/array/test_array.rb +68 -1
  144. data/test/wsdl/document/document.wsdl +2 -0
  145. data/test/wsdl/document/test_nosoapaction.rb +1 -1
  146. data/test/wsdl/document/test_number.rb +1 -1
  147. data/test/wsdl/document/test_rpc.rb +78 -9
  148. data/test/wsdl/fault/test_fault.rb +1 -1
  149. data/test/wsdl/fault/test_multifault.rb +1 -1
  150. data/test/wsdl/group/expectedClassdef.rb +58 -0
  151. data/test/wsdl/group/expectedDriver.rb +51 -0
  152. data/test/wsdl/group/expectedMappingRegistry.rb +67 -0
  153. data/test/wsdl/group/group.wsdl +88 -0
  154. data/test/wsdl/group/test_rpc.rb +145 -0
  155. data/test/wsdl/list/test_list.rb +1 -1
  156. data/test/wsdl/map/test_map.rb +2 -2
  157. data/test/wsdl/marshal/person_org.rb +5 -0
  158. data/test/wsdl/multiplefault.wsdl +11 -4
  159. data/test/wsdl/oneway/test_oneway.rb +1 -1
  160. data/test/wsdl/overload/test_overload.rb +1 -1
  161. data/test/wsdl/qualified/test_qualified.rb +1 -1
  162. data/test/wsdl/qualified/test_unqualified.rb +1 -1
  163. data/test/wsdl/raa/RAAService.rb +62 -57
  164. data/test/wsdl/raa/expectedClassDef.rb +100 -0
  165. data/test/wsdl/raa/expectedDriver.rb +96 -0
  166. data/test/wsdl/raa/expectedMappingRegistry.rb +121 -0
  167. data/test/wsdl/raa/test_raa.rb +54 -19
  168. data/test/wsdl/ref/expectedDriver.rb +1 -1
  169. data/test/wsdl/ref/expectedProduct.rb +101 -16
  170. data/test/wsdl/ref/test_ref.rb +2 -1
  171. data/test/wsdl/rpc/test_rpc.rb +1 -2
  172. data/test/wsdl/rpc/test_rpc_lit.rb +13 -13
  173. data/test/wsdl/simplecontent/test_simplecontent.rb +5 -5
  174. data/test/wsdl/simpletype/rpc/expectedDriver.rb +3 -2
  175. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +2 -0
  176. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +10 -17
  177. data/test/wsdl/simpletype/rpc/expectedService.rb +4 -2
  178. data/test/wsdl/simpletype/test_simpletype.rb +2 -2
  179. data/test/wsdl/soap/test_soapbodyparts.rb +2 -2
  180. data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +2 -0
  181. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +3 -2
  182. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +5 -9
  183. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +4 -2
  184. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +4 -2
  185. data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +6 -0
  186. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +1 -1
  187. data/test/wsdl/soaptype/test_soaptype.rb +1 -1
  188. data/test/wsdl/test_multiplefault.rb +3 -1
  189. data/test/xsd/codegen/test_classdef.rb +30 -0
  190. data/test/xsd/test_ns.rb +21 -0
  191. data/test/xsd/test_xsd.rb +5 -4
  192. data/test/xsd/xsd2ruby/expected_mysample.rb +13 -2
  193. data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +5 -11
  194. data/test/xsd/xsd2ruby/section.xsd +8 -0
  195. metadata +40 -8
  196. data/test/wsdl/axisArray/itemList.rb +0 -14
  197. data/test/wsdl/raa/RAA.rb +0 -120
  198. data/test/wsdl/raa/RAAServant.rb +0 -107
  199. data/test/wsdl/raa/server.rb +0 -103
@@ -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 }'.")