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
@@ -16,20 +16,17 @@ module WSDL
16
16
  module SOAP
17
17
 
18
18
 
19
+ # requires @defined_const, @simpletypes, @name_creator
19
20
  module ClassDefCreatorSupport
20
21
  include XSD::CodeGen::GenSupport
21
22
 
22
- def create_class_name(qname, modulepath = nil)
23
- if klass = basetype_mapped_class(qname)
24
- ::SOAP::Mapping::DefaultRegistry.find_mapped_obj_class(klass).name
25
- else
26
- name = safeconstname(qname.name)
27
- if modulepath
28
- [modulepath, name].join('::')
29
- else
30
- name
31
- end
32
- end
23
+ def mapped_class_name(qname, modulepath)
24
+ @name_creator.assign_name(qname, modulepath)
25
+ end
26
+
27
+ def mapped_class_basename(qname, modulepath)
28
+ classname = @name_creator.assign_name(qname, modulepath)
29
+ classname.sub(/\A.*:/, '')
33
30
  end
34
31
 
35
32
  def basetype_mapped_class(name)
@@ -80,7 +77,51 @@ __EOD__
80
77
  end
81
78
 
82
79
  def dqname(qname)
83
- qname.dump
80
+ if @defined_const.key?(qname.namespace)
81
+ qname.dump(@defined_const[qname.namespace])
82
+ else
83
+ qname.dump
84
+ end
85
+ end
86
+
87
+ def assign_const(value, prefix = '')
88
+ return if value.nil? or @defined_const.key?(value)
89
+ name = value.scan(/[^:\/]+\/?\z/)[0] || 'C'
90
+ tag = prefix + safeconstname(name)
91
+ if @defined_const.value?(tag)
92
+ idx = 0
93
+ while true
94
+ tag = prefix + safeconstname(name + "_#{idx}")
95
+ break unless @defined_const.value?(tag)
96
+ idx += 1
97
+ raise RuntimeError.new("too much similar names") if idx > 100
98
+ end
99
+ end
100
+ @defined_const[value] = tag
101
+ end
102
+
103
+ def create_type_name(modulepath, element)
104
+ if element.type == XSD::AnyTypeName
105
+ # nil means anyType.
106
+ nil
107
+ elsif simpletype = @simpletypes[element.type]
108
+ if simpletype.restriction and simpletype.restriction.enumeration?
109
+ mapped_class_name(element.type, modulepath)
110
+ else
111
+ nil
112
+ end
113
+ elsif klass = element_basetype(element)
114
+ klass.name
115
+ elsif element.type
116
+ mapped_class_name(element.type, modulepath)
117
+ elsif element.ref
118
+ mapped_class_name(element.ref, modulepath)
119
+ elsif element.anonymous_type?
120
+ # inner class
121
+ mapped_class_name(element.name, modulepath)
122
+ else
123
+ nil
124
+ end
84
125
  end
85
126
 
86
127
  private
@@ -141,6 +182,47 @@ private
141
182
  dump_inout_type(ele, element_definitions).chomp
142
183
  }.join("\n")
143
184
  end
185
+
186
+ def element_basetype(ele)
187
+ if klass = basetype_class(ele.type)
188
+ klass
189
+ elsif ele.local_simpletype
190
+ basetype_class(ele.local_simpletype.base)
191
+ else
192
+ nil
193
+ end
194
+ end
195
+
196
+ def attribute_basetype(attr)
197
+ if klass = basetype_class(attr.type)
198
+ klass
199
+ elsif attr.local_simpletype
200
+ basetype_class(attr.local_simpletype.base)
201
+ else
202
+ nil
203
+ end
204
+ end
205
+
206
+ def basetype_class(type)
207
+ return nil if type.nil?
208
+ if simpletype = @simpletypes[type]
209
+ basetype_mapped_class(simpletype.base)
210
+ else
211
+ basetype_mapped_class(type)
212
+ end
213
+ end
214
+
215
+ def name_element(element)
216
+ return element.name if element.name
217
+ return element.ref if element.ref
218
+ raise RuntimeError.new("cannot define name of #{element}")
219
+ end
220
+
221
+ def name_attribute(attribute)
222
+ return attribute.name if attribute.name
223
+ return attribute.ref if attribute.ref
224
+ raise RuntimeError.new("cannot define name of #{attribute}")
225
+ end
144
226
  end
145
227
 
146
228
 
@@ -0,0 +1,54 @@
1
+ # WSDL4R - Class name creator.
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 'soap/mapping/typeMap'
10
+ require 'xsd/codegen/gensupport'
11
+
12
+
13
+ module WSDL
14
+ module SOAP
15
+
16
+
17
+ class ClassNameCreator
18
+ include XSD::CodeGen::GenSupport
19
+
20
+ def initialize
21
+ @classname = {}
22
+ end
23
+
24
+ def assign_name(qname, modulepath = nil)
25
+ key = [modulepath, qname]
26
+ unless @classname.key?(key)
27
+ if klass = ::SOAP::TypeMap[qname]
28
+ name =
29
+ ::SOAP::Mapping::DefaultRegistry.find_mapped_obj_class(klass).name
30
+ else
31
+ name = safeconstname(qname.name)
32
+ if modulepath
33
+ name = [modulepath, name].join('::')
34
+ end
35
+ while @classname.value?(name)
36
+ name += '_'
37
+ end
38
+ check_classname(name)
39
+ end
40
+ @classname[key] = name.freeze
41
+ end
42
+ @classname[key]
43
+ end
44
+
45
+ def check_classname(name)
46
+ if Object.constants.include?(name)
47
+ warn("created definition re-opens an existing toplevel class: #{name}. consider to use --module_path option of wsdl2ruby.rb")
48
+ end
49
+ end
50
+ end
51
+
52
+
53
+ end
54
+ end
@@ -19,8 +19,9 @@ class ClientSkeltonCreator
19
19
 
20
20
  attr_reader :definitions
21
21
 
22
- def initialize(definitions, modulepath = nil)
22
+ def initialize(definitions, name_creator, modulepath = nil)
23
23
  @definitions = definitions
24
+ @name_creator = name_creator
24
25
  @modulepath = modulepath
25
26
  end
26
27
 
@@ -36,7 +37,7 @@ class ClientSkeltonCreator
36
37
  result << "\n\n"
37
38
  end
38
39
  services.ports.each do |port|
39
- result << dump_porttype(port.porttype.name)
40
+ result << dump_porttype(port.porttype)
40
41
  result << "\n"
41
42
  end
42
43
  if @modulepath
@@ -49,8 +50,8 @@ class ClientSkeltonCreator
49
50
 
50
51
  private
51
52
 
52
- def dump_porttype(name)
53
- drv_name = create_class_name(name)
53
+ def dump_porttype(porttype)
54
+ drv_name = mapped_class_basename(porttype.name, @modulepath)
54
55
 
55
56
  result = ""
56
57
  result << <<__EOD__
@@ -62,7 +63,7 @@ obj.wiredump_dev = STDERR if $DEBUG
62
63
 
63
64
  __EOD__
64
65
  element_definitions = @definitions.collect_elements
65
- @definitions.porttype(name).operations.each do |operation|
66
+ porttype.operations.each do |operation|
66
67
  result << dump_method_signature(operation, element_definitions)
67
68
  result << dump_input_init(operation.input) << "\n"
68
69
  result << dump_operation(operation) << "\n\n"
@@ -93,7 +93,7 @@ class ComplexType < Info
93
93
  ele.local_complextype
94
94
  end
95
95
 
96
- def find_arytype
96
+ def find_soapenc_arytype
97
97
  unless compoundtype == :TYPE_ARRAY
98
98
  raise RuntimeError.new("Assert: not for array")
99
99
  end
@@ -106,6 +106,15 @@ class ComplexType < Info
106
106
  end
107
107
  end
108
108
  end
109
+ end
110
+
111
+ def find_arytype
112
+ unless compoundtype == :TYPE_ARRAY
113
+ raise RuntimeError.new("Assert: not for array")
114
+ end
115
+ if arytype = find_soapenc_arytype
116
+ return arytype
117
+ end
109
118
  if map_as_array?
110
119
  return element_simpletype(elements[0])
111
120
  end
@@ -133,6 +133,10 @@ private
133
133
  next
134
134
  end
135
135
  fault_binding = get_fault_binding(op_binding, fault.name)
136
+ if fault_binding.soapfault.nil?
137
+ warn("WARNING: no soap:fault found for wsdl:fault \"#{fault_binding.name}\" in operation \"#{operation.name}\" \n\n")
138
+ next
139
+ end
136
140
  if fault_binding.soapfault.name != fault_binding.name
137
141
  warn("WARNING: name of soap:fault \"#{fault_binding.soapfault.name}\" doesn't match the name of wsdl:fault \"#{fault_binding.name}\" in operation \"#{operation.name}\" \n\n")
138
142
  next
@@ -21,19 +21,22 @@ class DriverCreator
21
21
  include ClassDefCreatorSupport
22
22
 
23
23
  attr_reader :definitions
24
+ attr_accessor :drivername_postfix
24
25
 
25
- def initialize(definitions, modulepath = nil)
26
+ def initialize(definitions, name_creator, modulepath = nil)
26
27
  @definitions = definitions
28
+ @name_creator = name_creator
27
29
  @modulepath = modulepath
30
+ @drivername_postfix = ''
28
31
  end
29
32
 
30
33
  def dump(porttype = nil)
31
- result = ''
34
+ result = "require 'soap/rpc/driver'\n\n"
32
35
  if @modulepath
33
- result << "\n"
34
36
  @modulepath.each do |name|
35
37
  result << "module #{name}\n"
36
38
  end
39
+ result << "\n"
37
40
  end
38
41
  if porttype.nil?
39
42
  @definitions.porttypes.each do |type|
@@ -55,8 +58,11 @@ class DriverCreator
55
58
  private
56
59
 
57
60
  def dump_porttype(porttype)
58
- class_name = create_class_name(porttype)
59
- result = MethodDefCreator.new(@definitions, @modulepath).dump(porttype)
61
+ drivername = porttype.name + @drivername_postfix
62
+ qname = XSD::QName.new(porttype.namespace, drivername)
63
+ class_name = mapped_class_basename(qname, @modulepath)
64
+ defined_const = {}
65
+ result = MethodDefCreator.new(@definitions, @name_creator, @modulepath, defined_const).dump(porttype)
60
66
  methoddef = result[:methoddef]
61
67
  binding = @definitions.bindings.find { |item| item.type == porttype }
62
68
  if binding.nil? or binding.soapbinding.nil?
@@ -66,7 +72,6 @@ private
66
72
  address = @definitions.porttype(porttype).locations[0]
67
73
 
68
74
  c = XSD::CodeGen::ClassDef.new(class_name, "::SOAP::RPC::Driver")
69
- c.def_require("soap/rpc/driver")
70
75
  c.def_const("DefaultEndpointUrl", ndq(address))
71
76
  c.def_code <<-EOD
72
77
  Methods = [
@@ -101,6 +106,9 @@ Methods = [
101
106
  end
102
107
  EOD
103
108
  end
109
+ defined_const.each do |ns, tag|
110
+ c.def_const(tag, dq(ns))
111
+ end
104
112
  c.dump
105
113
  end
106
114
  end
@@ -19,6 +19,10 @@ class Element < Info
19
19
  maxoccurs.nil? or maxoccurs != 1 or (parent and parent.map_as_array?)
20
20
  end
21
21
 
22
+ def anonymous_type?
23
+ !@ref and @name and @local_complextype
24
+ end
25
+
22
26
  def attributes
23
27
  @local_complextype.attributes
24
28
  end
@@ -19,14 +19,16 @@ class EncodedMappingRegistryCreator
19
19
 
20
20
  attr_reader :definitions
21
21
 
22
- def initialize(definitions, modulepath)
22
+ def initialize(definitions, name_creator, modulepath, defined_const)
23
23
  @definitions = definitions
24
+ @name_creator = name_creator
24
25
  @modulepath = modulepath
25
26
  @simpletypes = definitions.collect_simpletypes
26
27
  @simpletypes.uniq!
27
28
  @complextypes = definitions.collect_complextypes
28
29
  @complextypes.uniq!
29
30
  @varname = nil
31
+ @defined_const = defined_const
30
32
  end
31
33
 
32
34
  def dump(varname)
@@ -49,67 +51,21 @@ private
49
51
 
50
52
  def dump_complextype
51
53
  @complextypes.collect { |type|
52
- dump_complextypedef(type.name, type) unless type.abstract
54
+ unless type.abstract
55
+ dump_with_inner {
56
+ dump_complextypedef(@modulepath, type.name, type, nil, :encoded => true)
57
+ }
58
+ end
53
59
  }.compact.join("\n")
54
60
  end
55
61
 
56
62
  def dump_simpletype
57
63
  @simpletypes.collect { |type|
58
- dump_simpletypedef(type.name, type)
64
+ dump_with_inner {
65
+ dump_simpletypedef(@modulepath, type.name, type, nil, :encoded => true)
66
+ }
59
67
  }.compact.join("\n")
60
68
  end
61
-
62
- def dump_complextypedef(qname, typedef)
63
- case typedef.compoundtype
64
- when :TYPE_STRUCT, :TYPE_EMPTY
65
- dump_struct_typemap(qname, typedef)
66
- when :TYPE_ARRAY
67
- dump_array_typemap(qname, typedef)
68
- when :TYPE_SIMPLE
69
- dump_simple_typemap(qname, typedef)
70
- when :TYPE_MAP
71
- nil
72
- else
73
- raise NotImplementedError.new("must not reach here: #{typedef.compoundtype}")
74
- end
75
- end
76
-
77
- def dump_struct_typemap(qname, typedef)
78
- var = {}
79
- var[:class] = create_class_name(qname, @modulepath)
80
- var[:schema_ns] = qname.namespace
81
- if typedef.name.nil?
82
- # local complextype of a element
83
- var[:schema_name] = qname.name
84
- else
85
- # named complextype
86
- var[:schema_type] = qname.name
87
- end
88
- parsed_element = parse_elements(typedef.elements, qname.namespace)
89
- var[:schema_element] = dump_schema_element_definition(parsed_element, 2)
90
- dump_entry(@varname, var)
91
- end
92
-
93
- def dump_array_typemap(qname, typedef)
94
- arytype = typedef.find_arytype || XSD::AnyTypeName
95
- type = XSD::QName.new(arytype.namespace, arytype.name.sub(/\[(?:,)*\]$/, ''))
96
- return <<__EOD__
97
- #{@varname}.set(
98
- #{create_class_name(qname, @modulepath)},
99
- ::SOAP::SOAPArray,
100
- ::SOAP::Mapping::EncodedRegistry::TypedArrayFactory,
101
- { :type => #{dqname(type)} }
102
- )
103
- __EOD__
104
- end
105
-
106
- def dump_simple_typemap(qname, typedef)
107
- var = {}
108
- var[:class] = create_class_name(qname, @modulepath)
109
- var[:schema_ns] = qname.namespace
110
- var[:schema_type] = qname.name
111
- dump_entry(@varname, var)
112
- end
113
69
  end
114
70
 
115
71
 
@@ -17,8 +17,9 @@ module SOAP
17
17
  class LiteralMappingRegistryCreator
18
18
  include MappingRegistryCreatorSupport
19
19
 
20
- def initialize(definitions, modulepath)
20
+ def initialize(definitions, name_creator, modulepath, defined_const)
21
21
  @definitions = definitions
22
+ @name_creator = name_creator
22
23
  @modulepath = modulepath
23
24
  @elements = definitions.collect_elements
24
25
  @elements.uniq!
@@ -29,6 +30,7 @@ class LiteralMappingRegistryCreator
29
30
  @complextypes = definitions.collect_complextypes
30
31
  @complextypes.uniq!
31
32
  @varname = nil
33
+ @defined_const = defined_const
32
34
  end
33
35
 
34
36
  def dump(varname)
@@ -61,150 +63,50 @@ private
61
63
 
62
64
  def dump_element
63
65
  @elements.collect { |ele|
64
- qualified = (ele.elementform == 'qualified')
65
- if ele.local_complextype
66
- dump_complextypedef(ele.name, ele.local_complextype, nil, qualified)
67
- elsif ele.local_simpletype
68
- dump_simpletypedef(ele.name, ele.local_simpletype, nil, qualified)
69
- elsif ele.type
70
- if typedef = @complextypes[ele.type]
71
- dump_complextypedef(ele.type, typedef, ele.name, qualified)
72
- elsif typedef = @simpletypes[ele.type]
73
- dump_simpletypedef(ele.type, typedef, ele.name, qualified)
74
- else
75
- nil
66
+ # has the definition different from the complexType of the same name
67
+ next if ele.type.nil? and @complextypes[ele.name]
68
+ dump_with_inner {
69
+ if typedef = ele.local_complextype
70
+ dump_complextypedef(@modulepath, ele.name, typedef)
71
+ elsif typedef = ele.local_simpletype
72
+ dump_simpletypedef(@modulepath, ele.name, typedef)
73
+ elsif ele.type
74
+ if typedef = @complextypes[ele.type]
75
+ dump_complextypedef(@modulepath, ele.type, typedef, ele.name)
76
+ elsif typedef = @simpletypes[ele.type]
77
+ dump_simpletypedef(@modulepath, ele.type, typedef, ele.name)
78
+ end
76
79
  end
77
- else
78
- nil
79
- end
80
+ }
80
81
  }.compact.join("\n")
81
82
  end
82
83
 
83
84
  def dump_attribute
84
85
  @attributes.collect { |attr|
85
86
  if attr.local_simpletype
86
- dump_simpletypedef(attr.name, attr.local_simpletype)
87
+ dump_with_inner {
88
+ dump_simpletypedef(@modulepath, attr.name, attr.local_simpletype)
89
+ }
87
90
  end
88
91
  }.compact.join("\n")
89
92
  end
90
93
 
91
94
  def dump_simpletype
92
95
  @simpletypes.collect { |type|
93
- dump_simpletypedef(type.name, type)
96
+ dump_with_inner {
97
+ dump_simpletypedef(@modulepath, type.name, type)
98
+ }
94
99
  }.compact.join("\n")
95
100
  end
96
101
 
97
102
  def dump_complextype
98
103
  @complextypes.collect { |type|
99
- dump_complextypedef(type.name, type) unless type.abstract
100
- }.compact.join("\n")
101
- end
102
-
103
- def dump_complextypedef(qname, typedef, as_element = nil, qualified = false)
104
- case typedef.compoundtype
105
- when :TYPE_STRUCT, :TYPE_EMPTY
106
- dump_struct_typemap(qname, typedef, as_element, qualified)
107
- when :TYPE_ARRAY
108
- dump_array_typemap(qname, typedef)
109
- when :TYPE_SIMPLE
110
- dump_simple_typemap(qname, typedef, as_element, qualified)
111
- when :TYPE_MAP
112
- # mapped as a general Hash
113
- nil
114
- else
115
- raise RuntimeError.new(
116
- "unknown kind of complexContent: #{typedef.compoundtype}")
117
- end
118
- end
119
-
120
- def dump_struct_typemap(qname, typedef, as_element = nil, qualified = false)
121
- var = {}
122
- var[:class] = create_class_name(qname, @modulepath)
123
- if as_element
124
- var[:schema_name] = as_element.name
125
- var[:schema_ns] = as_element.namespace
126
- elsif typedef.name.nil?
127
- var[:schema_name] = qname.name
128
- var[:schema_ns] = qname.namespace
129
- else
130
- var[:schema_type] = qname.name
131
- var[:schema_ns] = qname.namespace
132
- end
133
- var[:schema_qualified] = qualified.to_s
134
-
135
- parsed_element = parse_elements(typedef.elements, qname.namespace)
136
- if typedef.choice?
137
- parsed_element.unshift(:choice)
138
- end
139
- var[:schema_element] = dump_schema_element_definition(parsed_element, 2)
140
- unless typedef.attributes.empty?
141
- var[:schema_attribute] = define_attribute(typedef.attributes)
142
- end
143
- dump_entry(@varname, var)
144
- end
145
-
146
- DEFAULT_ITEM_NAME = XSD::QName.new(nil, 'item')
147
-
148
- def dump_array_typemap(qname, typedef)
149
- var = {}
150
- var[:class] = create_class_name(qname, @modulepath)
151
- var[:schema_ns] = qname.namespace
152
- if typedef.name.nil?
153
- # local complextype of a element
154
- var[:schema_name] = qname.name
155
- else
156
- # named complextype
157
- var[:schema_type] = qname.name
158
- end
159
- child_type = typedef.child_type
160
- child_element = typedef.find_aryelement
161
- if child_type == XSD::AnyTypeName
162
- type = nil
163
- elsif child_element
164
- if klass = element_basetype(child_element)
165
- type = klass.name
166
- else
167
- typename = child_element.type || child_element.name
168
- type = create_class_name(typename, @modulepath)
104
+ unless type.abstract
105
+ dump_with_inner {
106
+ dump_complextypedef(@modulepath, type.name, type)
107
+ }
169
108
  end
170
- elsif child_type
171
- type = create_class_name(child_type, @modulepath)
172
- else
173
- type = nil
174
- end
175
- occurrence = [0, nil]
176
- if child_element and child_element.name
177
- if child_element.map_as_array?
178
- type << '[]' if type
179
- occurrence = [child_element.minoccurs, child_element.maxoccurs]
180
- end
181
- child_element_name = child_element.name
182
- else
183
- child_element_name = DEFAULT_ITEM_NAME
184
- end
185
- parsed_element = []
186
- parsed_element << [child_element_name.name, child_element_name, type, occurrence]
187
- var[:schema_element] = dump_schema_element_definition(parsed_element, 2)
188
- dump_entry(@varname, var)
189
- end
190
-
191
- def dump_simple_typemap(qname, type_or_element, as_element, qualified)
192
- var = {}
193
- var[:class] = create_class_name(qname, @modulepath)
194
- if as_element
195
- var[:schema_name] = as_element.name
196
- var[:schema_ns] = as_element.namespace
197
- elsif type_or_element.name.nil?
198
- var[:schema_name] = qname.name
199
- var[:schema_ns] = qname.namespace
200
- else
201
- var[:schema_type] = qname.name
202
- var[:schema_ns] = qname.namespace
203
- end
204
- unless type_or_element.attributes.empty?
205
- var[:schema_attribute] = define_attribute(type_or_element.attributes)
206
- end
207
- dump_entry(@varname, var)
109
+ }.compact.join("\n")
208
110
  end
209
111
  end
210
112