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