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
@@ -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]