soap4r_es 0.0.1

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 (165) hide show
  1. checksums.yaml +7 -0
  2. data/bin/wsdl2ruby.rb +140 -0
  3. data/bin/wsdl2ruby_rails.rb +140 -0
  4. data/bin/xsd2ruby.rb +92 -0
  5. data/lib/soap/attachment.rb +109 -0
  6. data/lib/soap/attrproxy.rb +35 -0
  7. data/lib/soap/baseData.rb +1095 -0
  8. data/lib/soap/element.rb +278 -0
  9. data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
  10. data/lib/soap/encodingstyle/handler.rb +121 -0
  11. data/lib/soap/encodingstyle/literalHandler.rb +196 -0
  12. data/lib/soap/encodingstyle/soapHandler.rb +560 -0
  13. data/lib/soap/filter/filterchain.rb +52 -0
  14. data/lib/soap/filter/handler.rb +32 -0
  15. data/lib/soap/filter/streamhandler.rb +30 -0
  16. data/lib/soap/filter.rb +14 -0
  17. data/lib/soap/generator.rb +299 -0
  18. data/lib/soap/header/handler.rb +64 -0
  19. data/lib/soap/header/handlerset.rb +78 -0
  20. data/lib/soap/header/mappinghandler.rb +48 -0
  21. data/lib/soap/header/simplehandler.rb +45 -0
  22. data/lib/soap/httpconfigloader.rb +140 -0
  23. data/lib/soap/mapping/encodedregistry.rb +541 -0
  24. data/lib/soap/mapping/factory.rb +389 -0
  25. data/lib/soap/mapping/literalregistry.rb +392 -0
  26. data/lib/soap/mapping/mapping.rb +577 -0
  27. data/lib/soap/mapping/registry.rb +297 -0
  28. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  29. data/lib/soap/mapping/schemadefinition.rb +171 -0
  30. data/lib/soap/mapping/typeMap.rb +107 -0
  31. data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
  32. data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
  33. data/lib/soap/mapping.rb +13 -0
  34. data/lib/soap/marshal.rb +60 -0
  35. data/lib/soap/mimemessage.rb +243 -0
  36. data/lib/soap/nestedexception.rb +43 -0
  37. data/lib/soap/netHttpClient.rb +242 -0
  38. data/lib/soap/ns.rb +39 -0
  39. data/lib/soap/parser.rb +253 -0
  40. data/lib/soap/processor.rb +67 -0
  41. data/lib/soap/property.rb +330 -0
  42. data/lib/soap/proxy.rb +15 -0
  43. data/lib/soap/rpc/cgistub.rb +249 -0
  44. data/lib/soap/rpc/driver.rb +222 -0
  45. data/lib/soap/rpc/element.rb +375 -0
  46. data/lib/soap/rpc/httpserver.rb +144 -0
  47. data/lib/soap/rpc/methodDef.rb +69 -0
  48. data/lib/soap/rpc/proxy.rb +573 -0
  49. data/lib/soap/rpc/router.rb +672 -0
  50. data/lib/soap/rpc/rpc.rb +26 -0
  51. data/lib/soap/rpc/soaplet.rb +201 -0
  52. data/lib/soap/rpc/standaloneServer.rb +44 -0
  53. data/lib/soap/soap.rb +163 -0
  54. data/lib/soap/streamHandler.rb +302 -0
  55. data/lib/soap/version.rb +12 -0
  56. data/lib/soap/wsdlDriver.rb +165 -0
  57. data/lib/wsdl/binding.rb +66 -0
  58. data/lib/wsdl/data.rb +65 -0
  59. data/lib/wsdl/definitions.rb +237 -0
  60. data/lib/wsdl/documentation.rb +33 -0
  61. data/lib/wsdl/import.rb +81 -0
  62. data/lib/wsdl/importer.rb +39 -0
  63. data/lib/wsdl/info.rb +51 -0
  64. data/lib/wsdl/message.rb +55 -0
  65. data/lib/wsdl/operation.rb +152 -0
  66. data/lib/wsdl/operationBinding.rb +241 -0
  67. data/lib/wsdl/param.rb +94 -0
  68. data/lib/wsdl/parser.rb +180 -0
  69. data/lib/wsdl/part.rb +53 -0
  70. data/lib/wsdl/port.rb +67 -0
  71. data/lib/wsdl/portType.rb +76 -0
  72. data/lib/wsdl/service.rb +62 -0
  73. data/lib/wsdl/soap/address.rb +41 -0
  74. data/lib/wsdl/soap/binding.rb +50 -0
  75. data/lib/wsdl/soap/body.rb +59 -0
  76. data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
  77. data/lib/wsdl/soap/classDefCreator.rb +529 -0
  78. data/lib/wsdl/soap/classDefCreatorSupport.rb +242 -0
  79. data/lib/wsdl/soap/classNameCreator.rb +57 -0
  80. data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
  81. data/lib/wsdl/soap/complexType.rb +174 -0
  82. data/lib/wsdl/soap/data.rb +43 -0
  83. data/lib/wsdl/soap/definitions.rb +201 -0
  84. data/lib/wsdl/soap/driverCreator.rb +121 -0
  85. data/lib/wsdl/soap/element.rb +34 -0
  86. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
  87. data/lib/wsdl/soap/fault.rb +57 -0
  88. data/lib/wsdl/soap/header.rb +87 -0
  89. data/lib/wsdl/soap/headerfault.rb +57 -0
  90. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
  91. data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
  92. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +380 -0
  93. data/lib/wsdl/soap/methodDefCreator.rb +200 -0
  94. data/lib/wsdl/soap/operation.rb +113 -0
  95. data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
  96. data/lib/wsdl/soap/servletStubCreator.rb +105 -0
  97. data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
  98. data/lib/wsdl/soap/wsdl2ruby.rb +249 -0
  99. data/lib/wsdl/types.rb +45 -0
  100. data/lib/wsdl/wsdl.rb +25 -0
  101. data/lib/wsdl/xmlSchema/all.rb +25 -0
  102. data/lib/wsdl/xmlSchema/annotation.rb +35 -0
  103. data/lib/wsdl/xmlSchema/any.rb +62 -0
  104. data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
  105. data/lib/wsdl/xmlSchema/attribute.rb +105 -0
  106. data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
  107. data/lib/wsdl/xmlSchema/choice.rb +59 -0
  108. data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
  109. data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
  110. data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
  111. data/lib/wsdl/xmlSchema/complexType.rb +194 -0
  112. data/lib/wsdl/xmlSchema/content.rb +96 -0
  113. data/lib/wsdl/xmlSchema/data.rb +117 -0
  114. data/lib/wsdl/xmlSchema/element.rb +154 -0
  115. data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
  116. data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
  117. data/lib/wsdl/xmlSchema/group.rb +101 -0
  118. data/lib/wsdl/xmlSchema/import.rb +53 -0
  119. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  120. data/lib/wsdl/xmlSchema/importer.rb +103 -0
  121. data/lib/wsdl/xmlSchema/include.rb +48 -0
  122. data/lib/wsdl/xmlSchema/length.rb +38 -0
  123. data/lib/wsdl/xmlSchema/list.rb +49 -0
  124. data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
  125. data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
  126. data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
  127. data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
  128. data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
  129. data/lib/wsdl/xmlSchema/minlength.rb +38 -0
  130. data/lib/wsdl/xmlSchema/parser.rb +168 -0
  131. data/lib/wsdl/xmlSchema/pattern.rb +37 -0
  132. data/lib/wsdl/xmlSchema/ref.rb +34 -0
  133. data/lib/wsdl/xmlSchema/schema.rb +179 -0
  134. data/lib/wsdl/xmlSchema/sequence.rb +55 -0
  135. data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
  136. data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
  137. data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
  138. data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
  139. data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
  140. data/lib/wsdl/xmlSchema/union.rb +36 -0
  141. data/lib/wsdl/xmlSchema/unique.rb +35 -0
  142. data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
  143. data/lib/wsdl/xmlSchema/xsd2ruby.rb +177 -0
  144. data/lib/xsd/charset.rb +190 -0
  145. data/lib/xsd/codegen/classdef.rb +230 -0
  146. data/lib/xsd/codegen/commentdef.rb +35 -0
  147. data/lib/xsd/codegen/gensupport.rb +277 -0
  148. data/lib/xsd/codegen/methoddef.rb +71 -0
  149. data/lib/xsd/codegen/moduledef.rb +209 -0
  150. data/lib/xsd/codegen.rb +13 -0
  151. data/lib/xsd/datatypes.rb +1465 -0
  152. data/lib/xsd/datatypes1999.rb +21 -0
  153. data/lib/xsd/iconvcharset.rb +33 -0
  154. data/lib/xsd/mapping.rb +69 -0
  155. data/lib/xsd/namedelements.rb +133 -0
  156. data/lib/xsd/ns.rb +183 -0
  157. data/lib/xsd/qname.rb +80 -0
  158. data/lib/xsd/xmlparser/libxmlparser.rb +136 -0
  159. data/lib/xsd/xmlparser/nokogiriparser.rb +63 -0
  160. data/lib/xsd/xmlparser/ogaparser.rb +53 -0
  161. data/lib/xsd/xmlparser/oxparser.rb +97 -0
  162. data/lib/xsd/xmlparser/parser.rb +101 -0
  163. data/lib/xsd/xmlparser/rexmlparser.rb +54 -0
  164. data/lib/xsd/xmlparser.rb +81 -0
  165. metadata +240 -0
@@ -0,0 +1,116 @@
1
+ # encoding: UTF-8
2
+ # WSDL4R - Creating LiteralMappingRegistry code from WSDL.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'wsdl/info'
11
+ require 'wsdl/soap/mappingRegistryCreatorSupport'
12
+
13
+
14
+ module WSDL
15
+ module SOAP
16
+
17
+
18
+ class LiteralMappingRegistryCreator
19
+ include MappingRegistryCreatorSupport
20
+
21
+ def initialize(definitions, name_creator, modulepath, defined_const)
22
+ @definitions = definitions
23
+ @name_creator = name_creator
24
+ @modulepath = nil #modulepath #tolgo il modulo per condividere le classi dei modelli tra client e server soap
25
+ @elements = definitions.collect_elements
26
+ @elements.uniq!
27
+ @attributes = definitions.collect_attributes
28
+ @attributes.uniq!
29
+ @simpletypes = definitions.collect_simpletypes
30
+ @simpletypes.uniq!
31
+ @complextypes = definitions.collect_complextypes
32
+ @complextypes.uniq!
33
+ @varname = nil
34
+ @defined_const = defined_const
35
+ end
36
+
37
+ def dump(varname)
38
+ @varname = varname
39
+ result = ''
40
+ str = dump_complextype
41
+ unless str.empty?
42
+ result << "\n" unless result.empty?
43
+ result << str
44
+ end
45
+ str = dump_simpletype
46
+ unless str.empty?
47
+ result << "\n" unless result.empty?
48
+ result << str
49
+ end
50
+ str = dump_element
51
+ unless str.empty?
52
+ result << "\n" unless result.empty?
53
+ result << str
54
+ end
55
+ str = dump_attribute
56
+ unless str.empty?
57
+ result << "\n" unless result.empty?
58
+ result << str
59
+ end
60
+ result
61
+ end
62
+
63
+ private
64
+
65
+ def dump_element
66
+ @elements.collect { |ele|
67
+ # has the definition different from the complexType of the same name
68
+ next if ele.type.nil? and @complextypes[ele.name]
69
+ dump_with_inner {
70
+ if typedef = ele.local_complextype
71
+ dump_complextypedef(@modulepath, ele.name, typedef)
72
+ elsif typedef = ele.local_simpletype
73
+ dump_simpletypedef(@modulepath, ele.name, typedef)
74
+ elsif ele.type
75
+ if typedef = @complextypes[ele.type]
76
+ dump_complextypedef(@modulepath, ele.type, typedef, ele.name)
77
+ elsif typedef = @simpletypes[ele.type]
78
+ dump_simpletypedef(@modulepath, ele.type, typedef, ele.name)
79
+ end
80
+ end
81
+ }
82
+ }.compact.join("\n")
83
+ end
84
+
85
+ def dump_attribute
86
+ @attributes.collect { |attr|
87
+ if attr.local_simpletype
88
+ dump_with_inner {
89
+ dump_simpletypedef(@modulepath, attr.name, attr.local_simpletype)
90
+ }
91
+ end
92
+ }.compact.join("\n")
93
+ end
94
+
95
+ def dump_simpletype
96
+ @simpletypes.collect { |type|
97
+ dump_with_inner {
98
+ dump_simpletypedef(@modulepath, type.name, type)
99
+ }
100
+ }.compact.join("\n")
101
+ end
102
+
103
+ def dump_complextype
104
+ @complextypes.collect { |type|
105
+ unless type.abstract
106
+ dump_with_inner {
107
+ dump_complextypedef(@modulepath, type.name, type)
108
+ }
109
+ end
110
+ }.compact.join("\n")
111
+ end
112
+ end
113
+
114
+
115
+ end
116
+ end
@@ -0,0 +1,59 @@
1
+ # encoding: UTF-8
2
+ # WSDL4R - Creating MappingRegistry code from WSDL.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'wsdl/info'
11
+ require 'wsdl/soap/classDefCreatorSupport'
12
+ require 'wsdl/soap/encodedMappingRegistryCreator'
13
+ require 'wsdl/soap/literalMappingRegistryCreator'
14
+ require 'xsd/codegen/moduledef.rb'
15
+
16
+
17
+ module WSDL
18
+ module SOAP
19
+
20
+
21
+ class MappingRegistryCreator
22
+ include ClassDefCreatorSupport
23
+
24
+ attr_reader :definitions
25
+
26
+ def initialize(definitions, name_creator, modulepath = nil)
27
+ @definitions = definitions
28
+ @name_creator = name_creator
29
+ @modulepath = modulepath
30
+ end
31
+
32
+ def dump
33
+ defined_const = {}
34
+ encoded_creator = EncodedMappingRegistryCreator.new(@definitions, @name_creator, @modulepath, defined_const)
35
+ literal_creator = LiteralMappingRegistryCreator.new(@definitions, @name_creator, @modulepath, defined_const)
36
+ wsdl_name = @definitions.name ? @definitions.name.name : 'default'
37
+ module_name = safeconstname(wsdl_name + 'MappingRegistry')
38
+ if @modulepath
39
+ module_name = [@modulepath, module_name].join('::')
40
+ end
41
+ m = XSD::CodeGen::ModuleDef.new(module_name)
42
+ m.def_require("soap/mapping")
43
+ varname = 'EncodedRegistry'
44
+ m.def_const(varname, '::SOAP::Mapping::EncodedRegistry.new')
45
+ m.def_code(encoded_creator.dump(varname))
46
+ varname = 'LiteralRegistry'
47
+ m.def_const(varname, '::SOAP::Mapping::LiteralRegistry.new')
48
+ m.def_code(literal_creator.dump(varname))
49
+ #
50
+ defined_const.each do |ns, tag|
51
+ m.def_const(tag, dq(ns))
52
+ end
53
+ m.dump
54
+ end
55
+ end
56
+
57
+
58
+ end
59
+ end
@@ -0,0 +1,380 @@
1
+ # encoding: UTF-8
2
+ # WSDL4R - Creating MappingRegistry support.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'wsdl/soap/classDefCreatorSupport'
11
+
12
+
13
+ module WSDL
14
+ module SOAP
15
+ require 'byebug'
16
+
17
+
18
+ # requires @defined_const = {}, @dump_with_inner, @modulepath
19
+ module MappingRegistryCreatorSupport
20
+ include ClassDefCreatorSupport
21
+ include XSD::CodeGen
22
+
23
+ def dump_with_inner
24
+ @dump_with_inner = []
25
+ @dump_with_inner.unshift(yield)
26
+ @dump_with_inner.join("\n")
27
+ end
28
+
29
+ def dump_complextypedef(mpath, qname, typedef, as_element = nil, opt = {})
30
+ case typedef.compoundtype
31
+ when :TYPE_STRUCT, :TYPE_EMPTY
32
+ dump_complex_typemap(mpath, qname, typedef, as_element, opt)
33
+ when :TYPE_ARRAY
34
+ dump_array_typemap(mpath, qname, typedef, as_element, opt)
35
+ when :TYPE_SIMPLE
36
+ dump_simple_typemap(mpath, qname, typedef, as_element, opt)
37
+ when :TYPE_MAP
38
+ # mapped as a general Hash
39
+ nil
40
+ else
41
+ raise RuntimeError.new(
42
+ "unknown kind of complexContent: #{typedef.compoundtype}")
43
+ end
44
+ end
45
+
46
+ def dump_array_typemap(mpath, qname, typedef, as_element, opt)
47
+ if typedef.find_soapenc_arytype
48
+ if opt[:encoded]
49
+ dump_encoded_array_typemap(mpath, qname, typedef, as_element, opt)
50
+ end
51
+ else
52
+ dump_literal_array_typemap(mpath, qname, typedef, as_element, opt)
53
+ end
54
+ end
55
+
56
+ #mappa il complex type
57
+ def dump_complex_typemap(mpath, qname, typedef, as_element, opt)
58
+ var = {}
59
+ define_dump_class(var, mpath, qname, typedef, as_element, opt)
60
+ schema_ns = (var[:schema_name] || var[:schema_type]).namespace
61
+ if var[:schema_type] and typedef.base
62
+ var[:schema_basetype] = typedef.base
63
+ end
64
+ parentmodule = var[:class]
65
+ parsed_element =
66
+ parse_elements(typedef.elements, qname.namespace, parentmodule, opt)
67
+ if typedef.choice?
68
+ parsed_element.unshift(:choice)
69
+ end
70
+ var[:schema_element] = dump_schema_element_definition(parsed_element, 2)
71
+ unless typedef.attributes.empty?
72
+ var[:schema_attribute] = define_attribute(typedef.attributes)
73
+ end
74
+ assign_const(schema_ns, 'Ns')
75
+ dump_entry(@varname, var)
76
+ end
77
+
78
+ #mappa il simple type
79
+ def dump_simple_typemap(mpath, qname, typedef, as_element, opt)
80
+ var = {}
81
+ define_dump_class(var, mpath, qname, typedef, as_element, opt)
82
+ schema_ns = (var[:schema_name] || var[:schema_type]).namespace
83
+ unless typedef.attributes.empty?
84
+ var[:schema_attribute] = define_attribute(typedef.attributes)
85
+ end
86
+ assign_const(schema_ns, 'Ns')
87
+ dump_entry(@varname, var)
88
+ end
89
+
90
+ def dump_schema_element_definition(definition, indent = 0)
91
+ return '[]' if definition.empty?
92
+ sp = ' ' * indent
93
+ if definition[0] == :choice
94
+ definition.shift
95
+ "[ :choice,\n" +
96
+ dump_schema_element(definition, indent + 2) + "\n" + sp + "]"
97
+ elsif definition[0].is_a?(::Array)
98
+ "[\n" +
99
+ dump_schema_element(definition, indent + 2) + "\n" + sp + "]"
100
+ else
101
+ varname, name, type, occurrence = definition
102
+ '[' + [
103
+ varname.dump,
104
+ dump_type(name, type),
105
+ dump_occurrence(occurrence)
106
+ ].compact.join(', ') + ']'
107
+ end
108
+ end
109
+
110
+ def dump_schema_element(schema_element, indent = 0)
111
+ sp = ' ' * indent
112
+ delimiter = ",\n" + sp
113
+ sp + schema_element.collect { |definition|
114
+ dump_schema_element_definition(definition, indent)
115
+ }.join(delimiter)
116
+ end
117
+
118
+ def dump_type(name, type)
119
+ if name
120
+ assign_const(name.namespace, 'Ns')
121
+ '[' + ndq(type) + ', ' + dqname(name) + ']'
122
+ else
123
+ ndq(type)
124
+ end
125
+ end
126
+
127
+ def dump_occurrence(occurrence)
128
+ if occurrence and occurrence != [1, 1] # default
129
+ minoccurs, maxoccurs = occurrence
130
+ maxoccurs ||= 'nil'
131
+ "[#{minoccurs}, #{maxoccurs}]"
132
+ end
133
+ end
134
+
135
+ def parse_elements(elements, base_namespace, mpath, opt)
136
+ schema_element = []
137
+ any = false
138
+ elements.each do |element|
139
+ case element
140
+ when XMLSchema::Any
141
+ # only 1 <any/> is allowed for now.
142
+ raise RuntimeError.new("duplicated 'any'") if any
143
+ any = true
144
+ varname = 'any' # not used
145
+ eleqname = XSD::AnyTypeName
146
+ type = nil
147
+ occurrence = nil
148
+ schema_element << [varname, eleqname, type, occurrence]
149
+ when XMLSchema::Element
150
+ next if element.ref == SchemaName
151
+ typebase = @modulepath
152
+ if element.anonymous_type?
153
+ child_opt = {
154
+ :qualified => (element.elementform == 'qualified'),
155
+ :is_anonymous => true
156
+ }
157
+ @dump_with_inner << dump_complextypedef(mpath, element.name, element.local_complextype, nil, child_opt)
158
+ typebase = mpath
159
+ end
160
+ type = create_type_name(typebase, element)
161
+ name = name_element(element).name
162
+ varname = safevarname(name)
163
+ if element.map_as_array?
164
+ if type
165
+ type += '[]'
166
+ else
167
+ type = '[]'
168
+ end
169
+ end
170
+ # nil means @@schema_ns + varname
171
+ eleqname = element.name || element.ref
172
+ if eleqname && varname == name && eleqname.namespace == base_namespace
173
+ eleqname = nil
174
+ end
175
+ occurrence = [element.minoccurs, element.maxoccurs]
176
+ schema_element << [varname, eleqname, type, occurrence]
177
+ when WSDL::XMLSchema::Sequence
178
+ child_schema_element =
179
+ parse_elements(element.elements, base_namespace, mpath, opt)
180
+ schema_element << child_schema_element
181
+ when WSDL::XMLSchema::Choice
182
+ child_schema_element =
183
+ parse_elements(element.elements, base_namespace, mpath, opt)
184
+ if !element.map_as_array?
185
+ # choice + maxOccurs="unbounded" is treated just as 'all' now.
186
+ child_schema_element.unshift(:choice)
187
+ end
188
+ schema_element << child_schema_element
189
+ when WSDL::XMLSchema::Group
190
+ if element.content.nil?
191
+ warn("no group definition found: #{element}")
192
+ next
193
+ end
194
+ child_schema_element =
195
+ parse_elements(element.content.elements, base_namespace, mpath, opt)
196
+ schema_element.concat(child_schema_element)
197
+ else
198
+ raise RuntimeError.new("unknown type: #{element}")
199
+ end
200
+ end
201
+ schema_element
202
+ end
203
+
204
+ def define_attribute(attributes)
205
+ schema_attribute = []
206
+ attributes.each do |attribute|
207
+ name = name_attribute(attribute)
208
+ if klass = attribute_basetype(attribute)
209
+ type = klass.name
210
+ else
211
+ warn("unresolved attribute type #{attribute.type} for #{name}")
212
+ type = nil
213
+ end
214
+ schema_attribute << [name, type]
215
+ end
216
+ "{\n " +
217
+ schema_attribute.collect { |name, type|
218
+ assign_const(name.namespace, 'Ns')
219
+ dqname(name) + ' => ' + ndq(type)
220
+ }.join(",\n ") +
221
+ "\n }"
222
+ end
223
+
224
+ def dump_entry(regname, var)
225
+ "#{regname}.register(\n " +
226
+ [
227
+ dump_entry_item(var, :class),
228
+ dump_entry_item(var, :soap_class),
229
+ dump_entry_item(var, :schema_name, :qname),
230
+ dump_entry_item(var, :schema_type, :qname),
231
+ dump_entry_item(var, :is_anonymous),
232
+ dump_entry_item(var, :schema_basetype, :qname),
233
+ dump_entry_item(var, :schema_qualified),
234
+ dump_entry_item(var, :schema_element),
235
+ dump_entry_item(var, :schema_attribute)
236
+ ].compact.join(",\n ") +
237
+ "\n)\n"
238
+ end
239
+
240
+ def dump_entry_item(var, key, dump_type = :none)
241
+ if var.key?(key)
242
+ case dump_type
243
+ when :none
244
+ ":#{key} => #{var[key]}"
245
+ when :string
246
+ if @defined_const.key?(var[key])
247
+ ":#{key} => #{@defined_const[var[key]]}"
248
+ else
249
+ ":#{key} => #{ndq(var[key])}"
250
+ end
251
+ when :qname
252
+ qname = var[key]
253
+ if @defined_const.key?(qname.namespace)
254
+ ns = @defined_const[qname.namespace]
255
+ else
256
+ ns = ndq(qname.namespace)
257
+ end
258
+ ":#{key} => XSD::QName.new(#{ns}, #{ndq(qname.name)})"
259
+ else
260
+ raise "Unknown dump type: #{dump_type}"
261
+ end
262
+ end
263
+ end
264
+
265
+ def dump_simpletypedef(mpath, qname, simpletype, as_element = nil, opt = {})
266
+ if simpletype.restriction
267
+ dump_simpletypedef_restriction(mpath, qname, simpletype, as_element, opt)
268
+ elsif simpletype.list
269
+ dump_simpletypedef_list(mpath, qname, simpletype, as_element, opt)
270
+ elsif simpletype.union
271
+ dump_simpletypedef_union(mpath, qname, simpletype, as_element, opt)
272
+ else
273
+ raise RuntimeError.new("unknown kind of simpletype: #{simpletype}")
274
+ end
275
+ end
276
+
277
+ def dump_simpletypedef_restriction(mpath, qname, typedef, as_element, opt)
278
+ restriction = typedef.restriction
279
+ # unless restriction.enumeration?
280
+ # # not supported. minlength?
281
+ # return nil
282
+ # end
283
+ var = {}
284
+ define_dump_class(var, mpath, qname, typedef, as_element, opt)
285
+ schema_ns = (var[:schema_name] || var[:schema_type]).namespace
286
+ assign_const(schema_ns, 'Ns')
287
+ dump_entry(@varname, var)
288
+ end
289
+
290
+ def dump_simpletypedef_list(mpath, qname, typedef, as_element, opt)
291
+ nil
292
+ end
293
+
294
+ def dump_simpletypedef_union(mpath, qname, typedef, as_element, opt)
295
+ nil
296
+ end
297
+
298
+ DEFAULT_ITEM_NAME = XSD::QName.new(nil, 'item')
299
+
300
+ def dump_literal_array_typemap(mpath, qname, typedef, as_element, opt)
301
+ var = {}
302
+ define_dump_class(var, mpath, qname, typedef, as_element, opt)
303
+ schema_ns = (var[:schema_name] || var[:schema_type]).namespace
304
+ parsed_element =
305
+ parse_elements(typedef.elements, qname.namespace, var[:class], opt)
306
+ if parsed_element.empty?
307
+ parsed_element = [create_array_element_definition(typedef, mpath)]
308
+ end
309
+ var[:schema_element] = dump_schema_element_definition(parsed_element, 2)
310
+ assign_const(schema_ns, 'Ns')
311
+ dump_entry(@varname, var)
312
+ end
313
+
314
+ def dump_encoded_array_typemap(mpath, qname, typedef, as_element, opt)
315
+ arytype = typedef.find_arytype || XSD::AnyTypeName
316
+ type = XSD::QName.new(arytype.namespace, arytype.name.sub(/\[(?:,)*\]$/, ''))
317
+ return <<__EOD__
318
+ #{@varname}.set(
319
+ #{mapped_class_name(qname, mpath)},
320
+ ::SOAP::SOAPArray,
321
+ ::SOAP::Mapping::EncodedRegistry::TypedArrayFactory,
322
+ { :type => #{dqname(type)} }
323
+ )
324
+ __EOD__
325
+ end
326
+
327
+ # used when "soapenc:arrayType" definition
328
+ def create_array_element_definition(typedef, mpath)
329
+ child_type = typedef.child_type
330
+ child_element = typedef.find_aryelement
331
+ if child_type == XSD::AnyTypeName
332
+ type = nil
333
+ elsif child_element
334
+ if klass = element_basetype(child_element)
335
+ type = klass.name
336
+ else
337
+ typename = child_element.type || child_element.name
338
+ type = mapped_class_name(typename, mpath)
339
+ end
340
+ elsif child_type
341
+ type = mapped_class_name(child_type, mpath)
342
+ else
343
+ type = nil
344
+ end
345
+ occurrence = [0, nil]
346
+ if child_element and child_element.name
347
+ if child_element.map_as_array?
348
+ type << '[]' if type
349
+ occurrence = [child_element.minoccurs, child_element.maxoccurs]
350
+ end
351
+ child_element_name = child_element.name
352
+ else
353
+ child_element_name = DEFAULT_ITEM_NAME
354
+ end
355
+ [child_element_name.name, child_element_name, type, occurrence]
356
+ end
357
+
358
+ def define_dump_class(var, mpath, qname, typedef, as_element, opt)
359
+ var[:class] = mapped_class_name(qname, mpath)
360
+ if as_element
361
+ var[:schema_name] = as_element
362
+ schema_ns = as_element.namespace
363
+ elsif typedef.name.nil?
364
+ var[:schema_name] = qname
365
+ schema_ns = qname.namespace
366
+ else
367
+ var[:schema_type] = qname
368
+ schema_ns = qname.namespace
369
+ end
370
+ var[:is_anonymous] = opt[:is_anonymous] if opt.key?(:is_anonymous)
371
+ # true, false, or nil
372
+ if opt.key?(:qualified)
373
+ var[:schema_qualified] = opt[:qualified].to_s
374
+ end
375
+ end
376
+ end
377
+
378
+
379
+ end
380
+ end