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
@@ -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
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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.
|
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
|
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(
|
53
|
-
drv_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
|
-
|
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
|
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
|
-
|
59
|
-
|
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
|
data/lib/wsdl/soap/element.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
65
|
-
if ele.
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
100
|
-
|
101
|
-
|
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
|
-
|
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
|
|