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
@@ -22,14 +22,16 @@ class MappingRegistryCreator
22
22
 
23
23
  attr_reader :definitions
24
24
 
25
- def initialize(definitions, modulepath = nil)
25
+ def initialize(definitions, name_creator, modulepath = nil)
26
26
  @definitions = definitions
27
+ @name_creator = name_creator
27
28
  @modulepath = modulepath
28
29
  end
29
30
 
30
31
  def dump
31
- encoded_creator = EncodedMappingRegistryCreator.new(@definitions, @modulepath)
32
- literal_creator = LiteralMappingRegistryCreator.new(@definitions, @modulepath)
32
+ defined_const = {}
33
+ encoded_creator = EncodedMappingRegistryCreator.new(@definitions, @name_creator, @modulepath, defined_const)
34
+ literal_creator = LiteralMappingRegistryCreator.new(@definitions, @name_creator, @modulepath, defined_const)
33
35
  wsdl_name = @definitions.name ? @definitions.name.name : 'default'
34
36
  module_name = safeconstname(wsdl_name + 'MappingRegistry')
35
37
  if @modulepath
@@ -43,6 +45,10 @@ class MappingRegistryCreator
43
45
  varname = 'LiteralRegistry'
44
46
  m.def_const(varname, '::SOAP::Mapping::LiteralRegistry.new')
45
47
  m.def_code(literal_creator.dump(varname))
48
+ #
49
+ defined_const.each do |ns, tag|
50
+ m.def_const(tag, dq(ns))
51
+ end
46
52
  m.dump
47
53
  end
48
54
  end
@@ -13,10 +13,76 @@ module WSDL
13
13
  module SOAP
14
14
 
15
15
 
16
+ # requires @defined_const = {}, @dump_with_inner, @modulepath
16
17
  module MappingRegistryCreatorSupport
17
18
  include ClassDefCreatorSupport
18
19
  include XSD::CodeGen
19
20
 
21
+ def dump_with_inner
22
+ @dump_with_inner = []
23
+ @dump_with_inner.unshift(yield)
24
+ @dump_with_inner.join("\n")
25
+ end
26
+
27
+ def dump_complextypedef(mpath, qname, typedef, as_element = nil, opt = {})
28
+ case typedef.compoundtype
29
+ when :TYPE_STRUCT, :TYPE_EMPTY
30
+ dump_complex_typemap(mpath, qname, typedef, as_element, opt)
31
+ when :TYPE_ARRAY
32
+ dump_array_typemap(mpath, qname, typedef, as_element, opt)
33
+ when :TYPE_SIMPLE
34
+ dump_simple_typemap(mpath, qname, typedef, as_element, opt)
35
+ when :TYPE_MAP
36
+ # mapped as a general Hash
37
+ nil
38
+ else
39
+ raise RuntimeError.new(
40
+ "unknown kind of complexContent: #{typedef.compoundtype}")
41
+ end
42
+ end
43
+
44
+ def dump_array_typemap(mpath, qname, typedef, as_element, opt)
45
+ if typedef.find_soapenc_arytype
46
+ if opt[:encoded]
47
+ dump_encoded_array_typemap(mpath, qname, typedef, as_element, opt)
48
+ end
49
+ else
50
+ dump_literal_array_typemap(mpath, qname, typedef, as_element, opt)
51
+ end
52
+ end
53
+
54
+ def dump_complex_typemap(mpath, qname, typedef, as_element, opt)
55
+ var = {}
56
+ define_dump_class(var, mpath, qname, typedef, as_element, opt)
57
+ schema_ns = (var[:schema_name] || var[:schema_type]).namespace
58
+ if var[:schema_type] and typedef.base
59
+ var[:schema_basetype] = typedef.base
60
+ end
61
+ parentmodule = var[:class]
62
+ parsed_element =
63
+ parse_elements(typedef.elements, qname.namespace, parentmodule, opt)
64
+ if typedef.choice?
65
+ parsed_element.unshift(:choice)
66
+ end
67
+ var[:schema_element] = dump_schema_element_definition(parsed_element, 2)
68
+ unless typedef.attributes.empty?
69
+ var[:schema_attribute] = define_attribute(typedef.attributes)
70
+ end
71
+ assign_const(schema_ns, 'Ns')
72
+ dump_entry(@varname, var)
73
+ end
74
+
75
+ def dump_simple_typemap(mpath, qname, typedef, as_element, opt)
76
+ var = {}
77
+ define_dump_class(var, mpath, qname, typedef, as_element, opt)
78
+ schema_ns = (var[:schema_name] || var[:schema_type]).namespace
79
+ unless typedef.attributes.empty?
80
+ var[:schema_attribute] = define_attribute(typedef.attributes)
81
+ end
82
+ assign_const(schema_ns, 'Ns')
83
+ dump_entry(@varname, var)
84
+ end
85
+
20
86
  def dump_schema_element_definition(definition, indent = 0)
21
87
  return '[]' if definition.empty?
22
88
  sp = ' ' * indent
@@ -47,6 +113,7 @@ module MappingRegistryCreatorSupport
47
113
 
48
114
  def dump_type(name, type)
49
115
  if name
116
+ assign_const(name.namespace, 'Ns')
50
117
  '[' + ndq(type) + ', ' + dqname(name) + ']'
51
118
  else
52
119
  ndq(type)
@@ -61,7 +128,7 @@ module MappingRegistryCreatorSupport
61
128
  end
62
129
  end
63
130
 
64
- def parse_elements(elements, base_namespace)
131
+ def parse_elements(elements, base_namespace, mpath, opt)
65
132
  schema_element = []
66
133
  any = false
67
134
  elements.each do |element|
@@ -76,32 +143,22 @@ module MappingRegistryCreatorSupport
76
143
  occurrence = nil
77
144
  schema_element << [varname, eleqname, type, occurrence]
78
145
  when XMLSchema::Element
79
- if element.type == XSD::AnyTypeName
80
- type = nil
81
- elsif @simpletypes[element.type]
82
- type = create_class_name(element.type, @modulepath)
83
- elsif klass = element_basetype(element)
84
- type = klass.name
85
- elsif element.type
86
- type = create_class_name(element.type, @modulepath)
87
- elsif element.ref
88
- next if element.ref == SchemaName
89
- type = create_class_name(element.ref, @modulepath)
90
- else
91
- type = nil # means anyType.
92
- # do we define a class for local complexType from it's name?
93
- # type = create_class_name(element.name, @modulepath)
94
- # <element>
95
- # <complexType>
96
- # <seq...>
97
- # </complexType>
98
- # </element>
146
+ next if element.ref == SchemaName
147
+ typebase = @modulepath
148
+ if element.anonymous_type?
149
+ child_opt = {
150
+ :qualified => (element.elementform == 'qualified'),
151
+ :is_anonymous => true
152
+ }
153
+ @dump_with_inner << dump_complextypedef(mpath, element.name, element.local_complextype, nil, child_opt)
154
+ typebase = mpath
99
155
  end
156
+ type = create_type_name(typebase, element)
100
157
  name = name_element(element).name
101
158
  varname = safevarname(name)
102
159
  if element.map_as_array?
103
160
  if type
104
- type << '[]'
161
+ type += '[]'
105
162
  else
106
163
  type = '[]'
107
164
  end
@@ -114,12 +171,25 @@ module MappingRegistryCreatorSupport
114
171
  occurrence = [element.minoccurs, element.maxoccurs]
115
172
  schema_element << [varname, eleqname, type, occurrence]
116
173
  when WSDL::XMLSchema::Sequence
117
- child_schema_element = parse_elements(element.elements, base_namespace)
174
+ child_schema_element =
175
+ parse_elements(element.elements, base_namespace, mpath, opt)
118
176
  schema_element << child_schema_element
119
177
  when WSDL::XMLSchema::Choice
120
- child_schema_element = parse_elements(element.elements, base_namespace)
121
- child_schema_element.unshift(:choice)
178
+ child_schema_element =
179
+ parse_elements(element.elements, base_namespace, mpath, opt)
180
+ if !element.map_as_array?
181
+ # choice + maxOccurs="unbounded" is treated just as 'all' now.
182
+ child_schema_element.unshift(:choice)
183
+ end
122
184
  schema_element << child_schema_element
185
+ when WSDL::XMLSchema::Group
186
+ if element.content.nil?
187
+ warn("no group definition found: #{element}")
188
+ next
189
+ end
190
+ child_schema_element =
191
+ parse_elements(element.content.elements, base_namespace, mpath, opt)
192
+ schema_element.concat(child_schema_element)
123
193
  else
124
194
  raise RuntimeError.new("unknown type: #{element}")
125
195
  end
@@ -127,35 +197,6 @@ module MappingRegistryCreatorSupport
127
197
  schema_element
128
198
  end
129
199
 
130
- def element_basetype(ele)
131
- if klass = basetype_class(ele.type)
132
- klass
133
- elsif ele.local_simpletype
134
- basetype_class(ele.local_simpletype.base)
135
- else
136
- nil
137
- end
138
- end
139
-
140
- def attribute_basetype(attr)
141
- if klass = basetype_class(attr.type)
142
- klass
143
- elsif attr.local_simpletype
144
- basetype_class(attr.local_simpletype.base)
145
- else
146
- nil
147
- end
148
- end
149
-
150
- def basetype_class(type)
151
- return nil if type.nil?
152
- if simpletype = @simpletypes[type]
153
- basetype_mapped_class(simpletype.base)
154
- else
155
- basetype_mapped_class(type)
156
- end
157
- end
158
-
159
200
  def define_attribute(attributes)
160
201
  schema_attribute = []
161
202
  attributes.each do |attribute|
@@ -170,31 +211,21 @@ module MappingRegistryCreatorSupport
170
211
  end
171
212
  "{\n " +
172
213
  schema_attribute.collect { |name, type|
214
+ assign_const(name.namespace, 'Ns')
173
215
  dqname(name) + ' => ' + ndq(type)
174
216
  }.join(",\n ") +
175
217
  "\n }"
176
218
  end
177
219
 
178
- def name_element(element)
179
- return element.name if element.name
180
- return element.ref if element.ref
181
- raise RuntimeError.new("cannot define name of #{element}")
182
- end
183
-
184
- def name_attribute(attribute)
185
- return attribute.name if attribute.name
186
- return attribute.ref if attribute.ref
187
- raise RuntimeError.new("cannot define name of #{attribute}")
188
- end
189
-
190
220
  def dump_entry(regname, var)
191
221
  "#{regname}.register(\n " +
192
222
  [
193
223
  dump_entry_item(var, :class),
194
224
  dump_entry_item(var, :soap_class),
195
- dump_entry_item(var, :schema_ns, true),
196
- dump_entry_item(var, :schema_name, true),
197
- dump_entry_item(var, :schema_type, true),
225
+ dump_entry_item(var, :schema_name, :qname),
226
+ dump_entry_item(var, :schema_type, :qname),
227
+ dump_entry_item(var, :is_anonymous),
228
+ dump_entry_item(var, :schema_basetype, :qname),
198
229
  dump_entry_item(var, :schema_qualified),
199
230
  dump_entry_item(var, :schema_element),
200
231
  dump_entry_item(var, :schema_attribute)
@@ -202,58 +233,142 @@ module MappingRegistryCreatorSupport
202
233
  "\n)\n"
203
234
  end
204
235
 
205
- def dump_entry_item(var, key, as_string = false)
236
+ def dump_entry_item(var, key, dump_type = :none)
206
237
  if var.key?(key)
207
- if as_string
208
- ":#{key} => #{ndq(var[key])}"
209
- else
238
+ case dump_type
239
+ when :none
210
240
  ":#{key} => #{var[key]}"
241
+ when :string
242
+ if @defined_const.key?(var[key])
243
+ ":#{key} => #{@defined_const[var[key]]}"
244
+ else
245
+ ":#{key} => #{ndq(var[key])}"
246
+ end
247
+ when :qname
248
+ qname = var[key]
249
+ if @defined_const.key?(qname.namespace)
250
+ ns = @defined_const[qname.namespace]
251
+ else
252
+ ns = ndq(qname.namespace)
253
+ end
254
+ ":#{key} => XSD::QName.new(#{ns}, #{ndq(qname.name)})"
255
+ else
256
+ raise "Unknown dump type: #{dump_type}"
211
257
  end
212
- else
213
- nil
214
258
  end
215
259
  end
216
260
 
217
- def dump_simpletypedef(qname, simpletype, as_element = nil, qualified = false)
261
+ def dump_simpletypedef(mpath, qname, simpletype, as_element = nil, opt = {})
218
262
  if simpletype.restriction
219
- dump_simpletypedef_restriction(qname, simpletype, as_element, qualified)
263
+ dump_simpletypedef_restriction(mpath, qname, simpletype, as_element, opt)
220
264
  elsif simpletype.list
221
- dump_simpletypedef_list(qname, simpletype, as_element, qualified)
265
+ dump_simpletypedef_list(mpath, qname, simpletype, as_element, opt)
222
266
  elsif simpletype.union
223
- dump_simpletypedef_union(qname, simpletype, as_element, qualified)
267
+ dump_simpletypedef_union(mpath, qname, simpletype, as_element, opt)
224
268
  else
225
269
  raise RuntimeError.new("unknown kind of simpletype: #{simpletype}")
226
270
  end
227
271
  end
228
272
 
229
- def dump_simpletypedef_restriction(qname, typedef, as_element, qualified)
273
+ def dump_simpletypedef_restriction(mpath, qname, typedef, as_element, opt)
230
274
  restriction = typedef.restriction
231
- if restriction.enumeration.empty?
275
+ unless restriction.enumeration?
232
276
  # not supported. minlength?
233
277
  return nil
234
278
  end
235
279
  var = {}
236
- var[:class] = create_class_name(qname, @modulepath)
237
- if as_element
238
- var[:schema_type] = nil
239
- var[:schema_ns] = as_element.namespace
240
- elsif typedef.name.nil?
241
- var[:schema_type] = nil
242
- var[:schema_ns] = qname.namespace
243
- else
244
- var[:schema_type] = qname.name
245
- var[:schema_ns] = qname.namespace
246
- end
280
+ define_dump_class(var, mpath, qname, typedef, as_element, opt)
281
+ schema_ns = (var[:schema_name] || var[:schema_type]).namespace
282
+ assign_const(schema_ns, 'Ns')
247
283
  dump_entry(@varname, var)
248
284
  end
249
285
 
250
- def dump_simpletypedef_list(qname, typedef, as_element, qualified)
286
+ def dump_simpletypedef_list(mpath, qname, typedef, as_element, opt)
251
287
  nil
252
288
  end
253
289
 
254
- def dump_simpletypedef_union(qname, typedef, as_element, qualified)
290
+ def dump_simpletypedef_union(mpath, qname, typedef, as_element, opt)
255
291
  nil
256
292
  end
293
+
294
+ DEFAULT_ITEM_NAME = XSD::QName.new(nil, 'item')
295
+
296
+ def dump_literal_array_typemap(mpath, qname, typedef, as_element, opt)
297
+ var = {}
298
+ define_dump_class(var, mpath, qname, typedef, as_element, opt)
299
+ schema_ns = (var[:schema_name] || var[:schema_type]).namespace
300
+ parsed_element =
301
+ parse_elements(typedef.elements, qname.namespace, var[:class], opt)
302
+ if parsed_element.empty?
303
+ parsed_element = [create_array_element_definition(typedef, mpath)]
304
+ end
305
+ var[:schema_element] = dump_schema_element_definition(parsed_element, 2)
306
+ assign_const(schema_ns, 'Ns')
307
+ dump_entry(@varname, var)
308
+ end
309
+
310
+ def dump_encoded_array_typemap(mpath, qname, typedef, as_element, opt)
311
+ arytype = typedef.find_arytype || XSD::AnyTypeName
312
+ type = XSD::QName.new(arytype.namespace, arytype.name.sub(/\[(?:,)*\]$/, ''))
313
+ return <<__EOD__
314
+ #{@varname}.set(
315
+ #{mapped_class_name(qname, mpath)},
316
+ ::SOAP::SOAPArray,
317
+ ::SOAP::Mapping::EncodedRegistry::TypedArrayFactory,
318
+ { :type => #{dqname(type)} }
319
+ )
320
+ __EOD__
321
+ end
322
+
323
+ # used when "soapenc:arrayType" definition
324
+ def create_array_element_definition(typedef, mpath)
325
+ child_type = typedef.child_type
326
+ child_element = typedef.find_aryelement
327
+ if child_type == XSD::AnyTypeName
328
+ type = nil
329
+ elsif child_element
330
+ if klass = element_basetype(child_element)
331
+ type = klass.name
332
+ else
333
+ typename = child_element.type || child_element.name
334
+ type = mapped_class_name(typename, mpath)
335
+ end
336
+ elsif child_type
337
+ type = mapped_class_name(child_type, mpath)
338
+ else
339
+ type = nil
340
+ end
341
+ occurrence = [0, nil]
342
+ if child_element and child_element.name
343
+ if child_element.map_as_array?
344
+ type << '[]' if type
345
+ occurrence = [child_element.minoccurs, child_element.maxoccurs]
346
+ end
347
+ child_element_name = child_element.name
348
+ else
349
+ child_element_name = DEFAULT_ITEM_NAME
350
+ end
351
+ [child_element_name.name, child_element_name, type, occurrence]
352
+ end
353
+
354
+ def define_dump_class(var, mpath, qname, typedef, as_element, opt)
355
+ var[:class] = mapped_class_name(qname, mpath)
356
+ if as_element
357
+ var[:schema_name] = as_element
358
+ schema_ns = as_element.namespace
359
+ elsif typedef.name.nil?
360
+ var[:schema_name] = qname
361
+ schema_ns = qname.namespace
362
+ else
363
+ var[:schema_type] = qname
364
+ schema_ns = qname.namespace
365
+ end
366
+ var[:is_anonymous] = opt[:is_anonymous] if opt.key?(:is_anonymous)
367
+ # true, false, or nil
368
+ if opt.key?(:qualified)
369
+ var[:schema_qualified] = opt[:qualified].to_s
370
+ end
371
+ end
257
372
  end
258
373
 
259
374
 
@@ -20,8 +20,9 @@ class MethodDefCreator
20
20
 
21
21
  attr_reader :definitions
22
22
 
23
- def initialize(definitions, modulepath)
23
+ def initialize(definitions, name_creator, modulepath, defined_const)
24
24
  @definitions = definitions
25
+ @name_creator = name_creator
25
26
  @modulepath = modulepath
26
27
  @simpletypes = @definitions.collect_simpletypes
27
28
  @complextypes = @definitions.collect_complextypes
@@ -29,15 +30,16 @@ class MethodDefCreator
29
30
  @types = []
30
31
  @encoded = false
31
32
  @literal = false
33
+ @defined_const = defined_const
32
34
  end
33
35
 
34
- def dump(porttype)
36
+ def dump(name)
35
37
  @types.clear
36
38
  @encoded = false
37
39
  @literal = false
38
40
  methoddef = ""
39
- port = @definitions.porttype(porttype)
40
- binding = port.find_binding
41
+ porttype = @definitions.porttype(name)
42
+ binding = porttype.find_binding
41
43
  if binding
42
44
  binding.operations.each do |op_bind|
43
45
  next unless op_bind # no binding is defined
@@ -96,7 +98,8 @@ private
96
98
  binding.fault.each do |fault|
97
99
  op_fault = {}
98
100
  soapfault = fault.soapfault
99
- faultclass = create_class_name(fault.name, @modulepath)
101
+ next if soapfault.nil?
102
+ faultclass = mapped_class_name(fault.name, @modulepath)
100
103
  op_fault[:ns] = fault.name.namespace
101
104
  op_fault[:name] = fault.name.name
102
105
  op_fault[:namespace] = soapfault.namespace
@@ -138,8 +141,9 @@ __EOD__
138
141
  @literal = true
139
142
  end
140
143
  if style == :rpc
144
+ assign_const(qname.namespace, 'Ns')
141
145
  return <<__EOD__
142
- [ #{qname.dump},
146
+ [ #{dqname(qname)},
143
147
  #{definitions}]
144
148
  __EOD__
145
149
  else
@@ -158,16 +162,8 @@ __EOD__
158
162
  [nil, part.element.namespace, part.element.name]
159
163
  elsif definedtype = @complextypes[part.type]
160
164
  case definedtype.compoundtype
161
- when :TYPE_STRUCT, :TYPE_EMPTY # ToDo: empty should be treated as void.
162
- type = create_class_name(part.type, @modulepath)
163
- [type, part.type.namespace, part.type.name]
164
- when :TYPE_ARRAY
165
- arytype = definedtype.find_arytype || XSD::AnyTypeName
166
- arytypename = arytype.name.sub(/\[(?:,)*\]$/, '')
167
- arytypedef = create_class_name(XSD::QName.new(nil, arytypename), @modulepath)
168
- [arytypedef + '[]', part.type.namespace, part.type.name]
169
- when :TYPE_SIMPLE
170
- type = create_class_name(part.type, @modulepath)
165
+ when :TYPE_STRUCT, :TYPE_EMPTY, :TYPE_ARRAY, :TYPE_SIMPLE
166
+ type = mapped_class_name(part.type, @modulepath)
171
167
  [type, part.type.namespace, part.type.name]
172
168
  when :TYPE_MAP
173
169
  [Hash.name, part.type.namespace, part.type.name]