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.
- data/bin/wsdl2ruby.rb +8 -2
- data/lib/soap/baseData.rb +93 -43
- data/lib/soap/element.rb +11 -8
- data/lib/soap/encodingstyle/handler.rb +15 -4
- data/lib/soap/encodingstyle/literalHandler.rb +18 -24
- data/lib/soap/encodingstyle/soapHandler.rb +34 -77
- data/lib/soap/generator.rb +74 -48
- data/lib/soap/header/handler.rb +1 -1
- data/lib/soap/header/mappinghandler.rb +47 -0
- data/lib/soap/mapping/encodedregistry.rb +19 -13
- data/lib/soap/mapping/factory.rb +19 -3
- data/lib/soap/mapping/literalregistry.rb +47 -35
- data/lib/soap/mapping/mapping.rb +92 -24
- data/lib/soap/mapping/registry.rb +34 -18
- data/lib/soap/mapping/schemadefinition.rb +8 -1
- data/lib/soap/mapping/typeMap.rb +18 -0
- data/lib/soap/mapping/wsdlencodedregistry.rb +8 -50
- data/lib/soap/mapping/wsdlliteralregistry.rb +45 -39
- data/lib/soap/nestedexception.rb +42 -0
- data/lib/soap/netHttpClient.rb +1 -0
- data/lib/soap/ns.rb +34 -0
- data/lib/soap/parser.rb +32 -29
- data/lib/soap/processor.rb +1 -1
- data/lib/soap/rpc/driver.rb +1 -0
- data/lib/soap/rpc/element.rb +18 -6
- data/lib/soap/rpc/httpserver.rb +38 -24
- data/lib/soap/rpc/proxy.rb +14 -11
- data/lib/soap/rpc/router.rb +4 -1
- data/lib/soap/soap.rb +7 -6
- data/lib/soap/wsdlDriver.rb +29 -8
- data/lib/tags +5690 -0
- data/lib/wsdl/definitions.rb +26 -40
- data/lib/wsdl/info.rb +11 -0
- data/lib/wsdl/parser.rb +2 -2
- data/lib/wsdl/soap/cgiStubCreator.rb +10 -5
- data/lib/wsdl/soap/classDefCreator.rb +140 -113
- data/lib/wsdl/soap/classDefCreatorSupport.rb +94 -12
- data/lib/wsdl/soap/classNameCreator.rb +54 -0
- data/lib/wsdl/soap/clientSkeltonCreator.rb +6 -5
- data/lib/wsdl/soap/complexType.rb +10 -1
- data/lib/wsdl/soap/definitions.rb +4 -0
- data/lib/wsdl/soap/driverCreator.rb +14 -6
- data/lib/wsdl/soap/element.rb +4 -0
- data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +11 -55
- data/lib/wsdl/soap/literalMappingRegistryCreator.rb +28 -126
- data/lib/wsdl/soap/mappingRegistryCreator.rb +9 -3
- data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +209 -94
- data/lib/wsdl/soap/methodDefCreator.rb +12 -16
- data/lib/wsdl/soap/servantSkeltonCreator.rb +3 -2
- data/lib/wsdl/soap/servletStubCreator.rb +107 -0
- data/lib/wsdl/soap/standaloneServerStubCreator.rb +10 -5
- data/lib/wsdl/soap/wsdl2ruby.rb +28 -13
- data/lib/wsdl/wsdl.rb +2 -1
- data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
- data/lib/wsdl/xmlSchema/attributeGroup.rb +86 -0
- data/lib/wsdl/xmlSchema/choice.rb +4 -1
- data/lib/wsdl/xmlSchema/complexContent.rb +1 -1
- data/lib/wsdl/xmlSchema/complexExtension.rb +9 -1
- data/lib/wsdl/xmlSchema/complexRestriction.rb +8 -0
- data/lib/wsdl/xmlSchema/complexType.rb +38 -5
- data/lib/wsdl/xmlSchema/data.rb +30 -7
- data/lib/wsdl/xmlSchema/element.rb +10 -2
- data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
- data/lib/wsdl/xmlSchema/group.rb +118 -0
- data/lib/wsdl/xmlSchema/import.rb +11 -23
- data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
- data/lib/wsdl/xmlSchema/include.rb +11 -17
- data/lib/wsdl/xmlSchema/length.rb +3 -1
- data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/maxlength.rb +3 -1
- data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/minlength.rb +3 -1
- data/lib/wsdl/xmlSchema/schema.rb +34 -0
- data/lib/wsdl/xmlSchema/sequence.rb +4 -1
- data/lib/wsdl/xmlSchema/simpleExtension.rb +8 -0
- data/lib/wsdl/xmlSchema/simpleRestriction.rb +49 -8
- data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
- data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
- data/lib/wsdl/xmlSchema/xsd2ruby.rb +13 -4
- data/lib/xsd/charset.rb +8 -6
- data/lib/xsd/codegen/classdef.rb +5 -0
- data/lib/xsd/codegen/moduledef.rb +17 -0
- data/lib/xsd/datatypes.rb +165 -20
- data/lib/xsd/mapping.rb +13 -5
- data/lib/xsd/namedelements.rb +8 -0
- data/lib/xsd/ns.rb +50 -14
- data/lib/xsd/qname.rb +3 -2
- data/lib/xsd/xmlparser.rb +4 -3
- data/test/soap/asp.net/test_aspdotnet.rb +1 -1
- data/test/soap/auth/test_basic.rb +4 -3
- data/test/soap/auth/test_digest.rb +4 -3
- data/test/soap/calc/test_calc.rb +6 -4
- data/test/soap/calc/test_calc2.rb +6 -4
- data/test/soap/calc/test_calc_cgi.rb +6 -4
- data/test/soap/fault/test_customfault.rb +6 -4
- data/test/soap/fault/test_soaparray.rb +35 -0
- data/test/soap/filter/test_filter.rb +2 -2
- data/test/soap/header/test_authheader.rb +2 -2
- data/test/soap/header/test_authheader_cgi.rb +3 -3
- data/test/soap/header/test_simplehandler.rb +2 -2
- data/test/soap/helloworld/test_helloworld.rb +6 -4
- data/test/soap/ssl/test_ssl.rb +1 -1
- data/test/soap/struct/test_struct.rb +2 -2
- data/test/soap/swa/test_file.rb +6 -4
- data/test/soap/test_basetype.rb +4 -4
- data/test/soap/test_cookie.rb +2 -2
- data/test/soap/test_custom_ns.rb +50 -8
- data/test/soap/test_custommap.rb +6 -4
- data/test/soap/test_empty.rb +6 -4
- data/test/soap/test_envelopenamespace.rb +2 -2
- data/test/soap/test_extraattr.rb +6 -7
- data/test/soap/test_generator.rb +27 -0
- data/test/soap/test_mapping.rb +10 -0
- data/test/soap/test_nestedexception.rb +56 -0
- data/test/soap/test_nil.rb +6 -4
- data/test/soap/test_no_indent.rb +6 -4
- data/test/soap/test_response_as_xml.rb +2 -2
- data/test/soap/test_streamhandler.rb +6 -3
- data/test/soap/test_styleuse.rb +2 -2
- data/test/soap/wsdlDriver/test_calc.rb +2 -2
- data/test/soap/wsdlDriver/test_document.rb +2 -2
- data/test/soap/wsdlDriver/test_simpletype.rb +2 -2
- data/test/wsdl/abstract/test_abstract.rb +1 -1
- data/test/wsdl/anonymous/expectedClassDef.rb +128 -0
- data/test/wsdl/anonymous/expectedDriver.rb +59 -0
- data/test/wsdl/anonymous/expectedMappingRegistry.rb +176 -0
- data/test/wsdl/anonymous/lp.wsdl +147 -0
- data/test/wsdl/anonymous/test_anonymous.rb +130 -0
- data/test/wsdl/any/expectedDriver.rb +3 -2
- data/test/wsdl/any/expectedEcho.rb +22 -2
- data/test/wsdl/any/expectedMappingRegistry.rb +63 -0
- data/test/wsdl/any/expectedService.rb +3 -1
- data/test/wsdl/any/test_any.rb +2 -7
- data/test/wsdl/axisArray/axisArray.wsdl +31 -4
- data/test/wsdl/axisArray/test_axisarray.rb +58 -3
- data/test/wsdl/choice/choice.wsdl +39 -0
- data/test/wsdl/choice/test_choice.rb +134 -7
- data/test/wsdl/complexcontent/test_echo.rb +1 -1
- data/test/wsdl/datetime/test_datetime.rb +2 -2
- data/test/wsdl/document/array/double.wsdl +45 -6
- data/test/wsdl/document/array/test_array.rb +68 -1
- data/test/wsdl/document/document.wsdl +2 -0
- data/test/wsdl/document/test_nosoapaction.rb +1 -1
- data/test/wsdl/document/test_number.rb +1 -1
- data/test/wsdl/document/test_rpc.rb +78 -9
- data/test/wsdl/fault/test_fault.rb +1 -1
- data/test/wsdl/fault/test_multifault.rb +1 -1
- data/test/wsdl/group/expectedClassdef.rb +58 -0
- data/test/wsdl/group/expectedDriver.rb +51 -0
- data/test/wsdl/group/expectedMappingRegistry.rb +67 -0
- data/test/wsdl/group/group.wsdl +88 -0
- data/test/wsdl/group/test_rpc.rb +145 -0
- data/test/wsdl/list/test_list.rb +1 -1
- data/test/wsdl/map/test_map.rb +2 -2
- data/test/wsdl/marshal/person_org.rb +5 -0
- data/test/wsdl/multiplefault.wsdl +11 -4
- data/test/wsdl/oneway/test_oneway.rb +1 -1
- data/test/wsdl/overload/test_overload.rb +1 -1
- data/test/wsdl/qualified/test_qualified.rb +1 -1
- data/test/wsdl/qualified/test_unqualified.rb +1 -1
- data/test/wsdl/raa/RAAService.rb +62 -57
- data/test/wsdl/raa/expectedClassDef.rb +100 -0
- data/test/wsdl/raa/expectedDriver.rb +96 -0
- data/test/wsdl/raa/expectedMappingRegistry.rb +121 -0
- data/test/wsdl/raa/test_raa.rb +54 -19
- data/test/wsdl/ref/expectedDriver.rb +1 -1
- data/test/wsdl/ref/expectedProduct.rb +101 -16
- data/test/wsdl/ref/test_ref.rb +2 -1
- data/test/wsdl/rpc/test_rpc.rb +1 -2
- data/test/wsdl/rpc/test_rpc_lit.rb +13 -13
- data/test/wsdl/simplecontent/test_simplecontent.rb +5 -5
- data/test/wsdl/simpletype/rpc/expectedDriver.rb +3 -2
- data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +2 -0
- data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +10 -17
- data/test/wsdl/simpletype/rpc/expectedService.rb +4 -2
- data/test/wsdl/simpletype/test_simpletype.rb +2 -2
- data/test/wsdl/soap/test_soapbodyparts.rb +2 -2
- data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +2 -0
- data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +3 -2
- data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +5 -9
- data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +4 -2
- data/test/wsdl/soap/wsdl2ruby/expectedService.rb +4 -2
- data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +6 -0
- data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +1 -1
- data/test/wsdl/soaptype/test_soaptype.rb +1 -1
- data/test/wsdl/test_multiplefault.rb +3 -1
- data/test/xsd/codegen/test_classdef.rb +30 -0
- data/test/xsd/test_ns.rb +21 -0
- data/test/xsd/test_xsd.rb +5 -4
- data/test/xsd/xsd2ruby/expected_mysample.rb +13 -2
- data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +5 -11
- data/test/xsd/xsd2ruby/section.xsd +8 -0
- metadata +40 -8
- data/test/wsdl/axisArray/itemList.rb +0 -14
- data/test/wsdl/raa/RAA.rb +0 -120
- data/test/wsdl/raa/RAAServant.rb +0 -107
- 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
|
-
|
32
|
-
|
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.
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
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 =
|
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 =
|
121
|
-
|
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, :
|
196
|
-
dump_entry_item(var, :
|
197
|
-
dump_entry_item(var, :
|
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,
|
236
|
+
def dump_entry_item(var, key, dump_type = :none)
|
206
237
|
if var.key?(key)
|
207
|
-
|
208
|
-
|
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,
|
261
|
+
def dump_simpletypedef(mpath, qname, simpletype, as_element = nil, opt = {})
|
218
262
|
if simpletype.restriction
|
219
|
-
dump_simpletypedef_restriction(qname, simpletype, as_element,
|
263
|
+
dump_simpletypedef_restriction(mpath, qname, simpletype, as_element, opt)
|
220
264
|
elsif simpletype.list
|
221
|
-
dump_simpletypedef_list(qname, simpletype, as_element,
|
265
|
+
dump_simpletypedef_list(mpath, qname, simpletype, as_element, opt)
|
222
266
|
elsif simpletype.union
|
223
|
-
dump_simpletypedef_union(qname, simpletype, as_element,
|
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,
|
273
|
+
def dump_simpletypedef_restriction(mpath, qname, typedef, as_element, opt)
|
230
274
|
restriction = typedef.restriction
|
231
|
-
|
275
|
+
unless restriction.enumeration?
|
232
276
|
# not supported. minlength?
|
233
277
|
return nil
|
234
278
|
end
|
235
279
|
var = {}
|
236
|
-
var
|
237
|
-
|
238
|
-
|
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,
|
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,
|
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(
|
36
|
+
def dump(name)
|
35
37
|
@types.clear
|
36
38
|
@encoded = false
|
37
39
|
@literal = false
|
38
40
|
methoddef = ""
|
39
|
-
|
40
|
-
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
|
-
|
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
|
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
|
162
|
-
type =
|
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]
|