Changeset 1915
- Timestamp:
- 08/05/07 23:25:19 (10 months ago)
- Files:
-
- trunk/lib/wsdl/soap/classDefCreator.rb (modified) (6 diffs)
- trunk/lib/wsdl/soap/classDefCreatorSupport.rb (modified) (2 diffs)
- trunk/lib/wsdl/soap/element.rb (modified) (1 diff)
- trunk/lib/wsdl/soap/encodedMappingRegistryCreator.rb (modified) (2 diffs)
- trunk/lib/wsdl/soap/literalMappingRegistryCreator.rb (modified) (2 diffs)
- trunk/lib/wsdl/soap/mappingRegistryCreatorSupport.rb (modified) (5 diffs)
- trunk/lib/xsd/codegen/classdef.rb (modified) (1 diff)
- trunk/lib/xsd/codegen/moduledef.rb (modified) (4 diffs)
- trunk/test/wsdl/anonymous (added)
- trunk/test/wsdl/anonymous/expectedClassDef.rb (added)
- trunk/test/wsdl/anonymous/expectedDriver.rb (added)
- trunk/test/wsdl/anonymous/expectedMappingRegistry.rb (added)
- trunk/test/wsdl/anonymous/lp.wsdl (added)
- trunk/test/wsdl/anonymous/test_anonymous.rb (added)
- trunk/test/wsdl/any/expectedEcho.rb (modified) (1 diff)
- trunk/test/wsdl/any/expectedMappingRegistry.rb (modified) (1 diff)
- trunk/test/wsdl/ref/expectedProduct.rb (modified) (2 diffs)
- trunk/test/xsd/codegen/test_classdef.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/wsdl/soap/classDefCreator.rb
r1914 r1915 245 245 246 246 def dump_classdef(qname, typedef, qualified = false) 247 create_classdef(qname, typedef, qualified).dump 248 end 249 250 def create_classdef(qname, typedef, qualified = false) 247 251 classname = create_class_name(qname) 248 252 check_classname(classname) … … 261 265 c.comment << "\nabstract" if typedef.abstract 262 266 init_lines, init_params = 263 parse_elements(c, typedef.elements, qname.namespace )267 parse_elements(c, typedef.elements, qname.namespace, classname) 264 268 unless typedef.attributes.empty? 265 269 define_attribute(c, typedef.attributes) … … 269 273 init_lines.join("\n") 270 274 end 271 c .dump272 end 273 274 def parse_elements(c, elements, base_namespace )275 c 276 end 277 278 def parse_elements(c, elements, base_namespace, parentmodule) 275 279 init_lines = [] 276 280 init_params = [] … … 291 295 next if element.ref == SchemaName 292 296 name = name_element(element).name 297 typebase = @modulepath 298 if element.anonymous_type? 299 inner = create_classdef(element.name, element.local_complextype) 300 inner.comment = "inner class for member: #{name}\n" + inner.comment 301 c.innermodule << inner 302 typebase = parentmodule 303 end 293 304 attrname = safemethodname(name) 294 305 varname = safevarname(name) … … 300 311 init_params << "#{varname} = nil" 301 312 end 302 c.comment << "\n #{attrname} - #{create_type_name(element ) || '(any)'}"313 c.comment << "\n #{attrname} - #{create_type_name(element, typebase) || '(any)'}" 303 314 when WSDL::XMLSchema::Sequence 304 315 child_init_lines, child_init_params = 305 parse_elements(c, element.elements, base_namespace )316 parse_elements(c, element.elements, base_namespace, parentmodule) 306 317 init_lines.concat(child_init_lines) 307 318 init_params.concat(child_init_params) 308 319 when WSDL::XMLSchema::Choice 309 320 child_init_lines, child_init_params = 310 parse_elements(c, element.elements, base_namespace )321 parse_elements(c, element.elements, base_namespace, parentmodule) 311 322 init_lines.concat(child_init_lines) 312 323 init_params.concat(child_init_params) … … 317 328 end 318 329 child_init_lines, child_init_params = 319 parse_elements(c, element.content.elements, base_namespace )330 parse_elements(c, element.content.elements, base_namespace, parentmodule) 320 331 init_lines.concat(child_init_lines) 321 332 init_params.concat(child_init_params) trunk/lib/wsdl/soap/classDefCreatorSupport.rb
r1914 r1915 105 105 end 106 106 107 def create_type_name(element )107 def create_type_name(element, modulepath = @modulepath) 108 108 if element.type == XSD::AnyTypeName 109 # nil means anyType. 109 110 nil 110 111 elsif simpletype = @simpletypes[element.type] 111 112 if simpletype.restriction and simpletype.restriction.enumeration? 112 create_class_name(element.type, @modulepath)113 create_class_name(element.type, modulepath) 113 114 else 114 115 nil … … 117 118 klass.name 118 119 elsif element.type 119 create_class_name(element.type, @modulepath)120 create_class_name(element.type, modulepath) 120 121 elsif element.ref 121 create_class_name(element.ref, @modulepath) 122 else 123 nil 124 # nil means anyType. 125 # TODO: do we define a class for local complexType from it's name? 126 # create_class_name(element.name, @modulepath) 127 # 128 # <element> 129 # <complexType> 130 # <seq...> 131 # </complexType> 132 # </element> 122 create_class_name(element.ref, modulepath) 123 elsif element.anonymous_type? 124 # inner class 125 create_class_name(element.name, modulepath) 126 else 127 nil 133 128 end 134 129 end trunk/lib/wsdl/soap/element.rb
r1827 r1915 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 trunk/lib/wsdl/soap/encodedMappingRegistryCreator.rb
r1895 r1915 76 76 end 77 77 78 def dump_struct_typemap(qname, typedef)79 var = {}80 var[:class] = create_class_name(qname, @modulepath)81 var[:schema_ns] = qname.namespace82 if typedef.name.nil?83 # local complextype of a element84 var[:schema_name] = qname.name85 else86 # named complextype87 var[:schema_type] = qname.name88 end89 parsed_element = parse_elements(typedef.elements, qname.namespace)90 var[:schema_element] = dump_schema_element_definition(parsed_element, 2)91 assign_const(var[:schema_ns], 'Ns')92 dump_entry(@varname, var)93 end94 95 78 def dump_array_typemap(qname, typedef) 96 79 arytype = typedef.find_arytype || XSD::AnyTypeName … … 106 89 __EOD__ 107 90 end 108 109 def dump_simple_typemap(qname, typedef)110 var = {}111 var[:class] = create_class_name(qname, @modulepath)112 var[:schema_ns] = qname.namespace113 var[:schema_type] = qname.name114 assign_const(var[:schema_ns], 'Ns')115 dump_entry(@varname, var)116 end117 91 end 118 92 trunk/lib/wsdl/soap/literalMappingRegistryCreator.rb
r1895 r1915 119 119 end 120 120 121 def dump_struct_typemap(qname, typedef, as_element = nil, qualified = false)122 var = {}123 var[:class] = create_class_name(qname, @modulepath)124 if as_element125 var[:schema_name] = as_element.name126 var[:schema_ns] = as_element.namespace127 elsif typedef.name.nil?128 var[:schema_name] = qname.name129 var[:schema_ns] = qname.namespace130 else131 var[:schema_type] = qname.name132 var[:schema_ns] = qname.namespace133 end134 var[:schema_qualified] = qualified.to_s135 136 parsed_element = parse_elements(typedef.elements, qname.namespace)137 if typedef.choice?138 parsed_element.unshift(:choice)139 end140 var[:schema_element] = dump_schema_element_definition(parsed_element, 2)141 unless typedef.attributes.empty?142 var[:schema_attribute] = define_attribute(typedef.attributes)143 end144 assign_const(var[:schema_ns], 'Ns')145 dump_entry(@varname, var)146 end147 148 121 DEFAULT_ITEM_NAME = XSD::QName.new(nil, 'item') 149 122 … … 191 164 dump_entry(@varname, var) 192 165 end 193 194 def dump_simple_typemap(qname, type_or_element, as_element, qualified)195 var = {}196 var[:class] = create_class_name(qname, @modulepath)197 if as_element198 var[:schema_name] = as_element.name199 var[:schema_ns] = as_element.namespace200 elsif type_or_element.name.nil?201 var[:schema_name] = qname.name202 var[:schema_ns] = qname.namespace203 else204 var[:schema_type] = qname.name205 var[:schema_ns] = qname.namespace206 end207 unless type_or_element.attributes.empty?208 var[:schema_attribute] = define_attribute(type_or_element.attributes)209 end210 assign_const(var[:schema_ns], 'Ns')211 dump_entry(@varname, var)212 end213 166 end 214 167 trunk/lib/wsdl/soap/mappingRegistryCreatorSupport.rb
r1914 r1915 14 14 15 15 16 # requires @defined_const = {} 16 # requires @defined_const = {}, @dump_struct_typemap_innerstruct 17 17 module MappingRegistryCreatorSupport 18 18 include ClassDefCreatorSupport 19 19 include XSD::CodeGen 20 21 def dump_struct_typemap(qname, typedef, as_element = nil, qualified = nil) 22 @dump_struct_typemap_innerstruct = [] 23 @dump_struct_typemap_innerstruct.unshift( 24 dump_complex_typemap(qname, typedef, @modulepath, as_element, qualified)) 25 @dump_struct_typemap_innerstruct.join("\n") 26 end 27 28 def dump_complex_typemap(qname, typedef, parentmodule, as_element = nil, qualified = nil) 29 var = {} 30 var[:class] = create_class_name(qname, parentmodule) 31 if as_element 32 var[:schema_name] = as_element.name 33 var[:schema_ns] = as_element.namespace 34 elsif typedef.name.nil? 35 var[:schema_name] = qname.name 36 var[:schema_ns] = qname.namespace 37 else 38 var[:schema_type] = qname.name 39 var[:schema_ns] = qname.namespace 40 end 41 # true, false, or nil 42 unless qualified.nil? 43 var[:schema_qualified] = qualified.to_s 44 end 45 parentmodule = var[:class] 46 parsed_element = parse_elements(typedef.elements, qname.namespace, 47 parentmodule, qualified) 48 if typedef.choice? 49 parsed_element.unshift(:choice) 50 end 51 var[:schema_element] = dump_schema_element_definition(parsed_element, 2) 52 unless typedef.attributes.empty? 53 var[:schema_attribute] = define_attribute(typedef.attributes) 54 end 55 assign_const(var[:schema_ns], 'Ns') 56 dump_entry(@varname, var) 57 end 58 59 def dump_simple_typemap(qname, typedef, as_element = nil, qualified = nil) 60 var = {} 61 var[:class] = create_class_name(qname, @modulepath) 62 if as_element 63 var[:schema_name] = as_element.name 64 var[:schema_ns] = as_element.namespace 65 elsif typedef.name.nil? 66 var[:schema_name] = qname.name 67 var[:schema_ns] = qname.namespace 68 else 69 var[:schema_type] = qname.name 70 var[:schema_ns] = qname.namespace 71 end 72 unless typedef.attributes.empty? 73 var[:schema_attribute] = define_attribute(typedef.attributes) 74 end 75 assign_const(var[:schema_ns], 'Ns') 76 dump_entry(@varname, var) 77 end 20 78 21 79 def dump_schema_element_definition(definition, indent = 0) … … 64 122 end 65 123 66 def parse_elements(elements, base_namespace )124 def parse_elements(elements, base_namespace, parentmodule, qualified = false) 67 125 schema_element = [] 68 126 any = false … … 80 138 when XMLSchema::Element 81 139 next if element.ref == SchemaName 82 type = create_type_name(element) 140 typebase = @modulepath 141 if element.anonymous_type? 142 @dump_struct_typemap_innerstruct << 143 dump_complex_typemap(element.name, element.local_complextype, 144 parentmodule, nil, qualified) 145 typebase = parentmodule 146 end 147 type = create_type_name(element, typebase) 83 148 name = name_element(element).name 84 149 varname = safevarname(name) … … 98 163 schema_element << [varname, eleqname, type, occurrence] 99 164 when WSDL::XMLSchema::Sequence 100 child_schema_element = parse_elements(element.elements, base_namespace) 165 child_schema_element = 166 parse_elements(element.elements, base_namespace, parentmodule, qualified) 101 167 schema_element << child_schema_element 102 168 when WSDL::XMLSchema::Choice 103 child_schema_element = parse_elements(element.elements, base_namespace) 169 child_schema_element = 170 parse_elements(element.elements, base_namespace, parentmodule, qualified) 104 171 child_schema_element.unshift(:choice) 105 172 schema_element << child_schema_element … … 109 176 next 110 177 end 111 child_schema_element = parse_elements(element.content.elements, base_namespace) 178 child_schema_element = 179 parse_elements(element.content.elements, base_namespace, parentmodule, qualified) 112 180 schema_element.concat(child_schema_element) 113 181 else trunk/lib/xsd/codegen/classdef.rb
r1824 r1915 60 60 spacer = true 61 61 buf << dump_const 62 end 63 unless @innermodule.empty? 64 buf << dump_emptyline # always add 1 empty line 65 spacer = true 66 buf << dump_innermodule 62 67 end 63 68 unless @code.empty? trunk/lib/xsd/codegen/moduledef.rb
r1824 r1915 19 19 include GenSupport 20 20 include CommentDef 21 22 attr_reader :innermodule 21 23 22 24 def initialize(name) … … 27 29 @requirepath = [] 28 30 @methoddef = [] 31 @innermodule = [] 29 32 end 30 33 … … 78 81 buf << dump_const 79 82 end 83 unless @innermodule.empty? 84 buf << dump_emptyline # always add 1 empty line 85 spacer = true 86 buf << dump_innermodule 87 end 80 88 unless @code.empty? 81 89 buf << dump_emptyline if spacer … … 107 115 @const.sort.collect { |var, value| 108 116 %Q(#{var} = #{dump_value(value)}) 117 }.join("\n") 118 ) 119 end 120 121 def dump_innermodule 122 dump_static( 123 @innermodule.collect { |moduledef| 124 moduledef.dump 109 125 }.join("\n") 110 126 ) trunk/test/wsdl/any/expectedEcho.rb
r1891 r1915 25 25 # {urn:example.com:echo-type}setOutputAndCompleteRequest 26 26 # taskId - SOAP::SOAPString 27 # data - (any)27 # data - SetOutputAndCompleteRequest::C_Data 28 28 # participantToken - SOAP::SOAPString 29 29 class SetOutputAndCompleteRequest 30 31 # inner class for member: data 32 # {}data 33 class C_Data 34 attr_reader :__xmlele_any 35 36 def set_any(elements) 37 @__xmlele_any = elements 38 end 39 40 def initialize 41 @__xmlele_any = nil 42 end 43 end 44 30 45 attr_accessor :taskId 31 46 attr_accessor :data trunk/test/wsdl/any/expectedMappingRegistry.rb
r1904 r1915 52 52 :schema_element => [ 53 53 ["taskId", ["SOAP::SOAPString", XSD::QName.new(nil, "taskId")]], 54 ["data", [ nil, XSD::QName.new(nil, "data")]],54 ["data", ["WSDL::Any::SetOutputAndCompleteRequest::C_Data", XSD::QName.new(nil, "data")]], 55 55 ["participantToken", ["SOAP::SOAPString", XSD::QName.new(nil, "participantToken")]] 56 ] 57 ) 58 59 LiteralRegistry.register( 60 :class => WSDL::Any::SetOutputAndCompleteRequest::C_Data, 61 :schema_ns => nil, 62 :schema_name => "data", 63 :schema_qualified => true, 64 :schema_element => [ 65 ["any", [nil, XSD::QName.new(NsXMLSchema, "anyType")]] 56 66 ] 57 67 ) trunk/test/wsdl/ref/expectedProduct.rb
r1891 r1915 135 135 # bag - WSDL::Ref::Product 136 136 # rating - SOAP::SOAPString 137 # comment_1 - (any)137 # comment_1 - ProductBag::Comment_1 138 138 # comment_2 - WSDL::Ref::Comment 139 139 # m___point - WSDL::Ref::C__point … … 144 144 AttrYesno = XSD::QName.new("urn:ref", "yesno") 145 145 146 # inner class for member: Comment_1 147 # {}Comment_1 148 # xmlattr_msgid - SOAP::SOAPString 149 class Comment_1 150 AttrMsgid = XSD::QName.new(nil, "msgid") 151 152 def __xmlattr 153 @__xmlattr ||= {} 154 end 155 156 def xmlattr_msgid 157 __xmlattr[AttrMsgid] 158 end 159 160 def xmlattr_msgid=(value) 161 __xmlattr[AttrMsgid] = value 162 end 163 164 def initialize 165 @__xmlattr = {} 166 end 167 end 168 146 169 attr_accessor :bag 147 170 attr_accessor :rating trunk/test/xsd/codegen/test_classdef.rb
r1380 r1915 87 87 88 88 def bar 89 end 90 end 91 EOD 92 end 93 94 def test_innermodule 95 c = ClassDef.new("Foo") 96 c.def_const("BAR", 1) 97 c.def_method('baz') { "Qux.new.quxx" } 98 c2 = ClassDef.new("Qux") 99 c2.def_method('quxx') { "Quxx::QUXXX" } 100 m3 = ModuleDef.new("Quxx") 101 m3.def_const("QUXXX", 2) 102 c.innermodule << c2 << m3 103 assert_equal(format(<<-EOD), c.dump) 104 class Foo 105 BAR = 1 106 107 class Qux 108 def quxx 109 Quxx::QUXXX 110 end 111 end 112 113 module Quxx 114 QUXXX = 2 115 end 116 117 def baz 118 Qux.new.quxx 89 119 end 90 120 end