Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 1891

Show
Ignore:
Timestamp:
07/20/07 00:08:51 (1 year ago)
Author:
nahi
Message:
  • wsdl2ruby.rb generated too much 'XSD::QName.new(...)' parts. let wsdl2ruby.rb extract common namespace definitions as constants.
  • let wsdl2ruby.rb generate member types as a comment for each class in classdef file.
  • closes #384.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RELEASE_en.html

    r1888 r1891  
    9393'Emil Marceta' for contributing a patch for one-way service support. 
    9494'Ernie' for contributing a helloworld WSDL sample and WSDL service feature of HTTPServer. 
    95 'Felipe Contreras' for contributing an union + memberType sample and patches for missing 'require'
     95'Felipe Contreras' for contributing an union + memberType sample, patches for missing 'require', and a patch to allow to customize default ns definition of SOAP Envelope
    9696'Greg Lappen' for contributing an eBaySvc sample. 
    9797'Ger Apeldoorn' for contributing a sample of complex type + MIME attachment. 
  • trunk/lib/wsdl/soap/classDefCreator.rb

    r1865 r1891  
    1010require 'wsdl/soap/classDefCreatorSupport' 
    1111require 'xsd/codegen' 
     12require 'set' 
    1213 
    1314 
     
    3536      @faulttypes = definitions.collect_faulttypes 
    3637    end 
     38    @defined_const = {} 
    3739  end 
    3840 
     
    284286          init_params << "#{varname} = nil" 
    285287        end 
     288        c.comment << "\n  #{attrname} - #{create_type_name(element) || '(any)'}" 
    286289      when WSDL::XMLSchema::Sequence 
    287290        child_init_lines, child_init_params = 
     
    331334 
    332335  def define_attribute(c, attributes) 
     336    const = {} 
     337    unless attributes.empty? 
     338      c.def_method("__xmlattr") do <<-__EOD__ 
     339          @__xmlattr ||= {} 
     340        __EOD__ 
     341      end 
     342    end 
    333343    attributes.each do |attribute| 
    334344      name = name_attribute(attribute) 
    335345      methodname = safemethodname('xmlattr_' + name.name) 
     346      constname = 'Attr' + safeconstname(name.name) 
     347      const[constname] ||= 0 
     348      if (const[constname] += 1) > 1 
     349        constname += "_#{const[constname]}" 
     350      end 
     351      c.def_const(constname, dqname(name)) 
    336352      c.def_method(methodname) do <<-__EOD__ 
    337           (@__xmlattr ||= {})[#{dqname(name)}] 
     353          __xmlattr[#{constname}] 
    338354        __EOD__ 
    339355      end 
    340356      c.def_method(methodname + '=', 'value') do <<-__EOD__ 
    341           (@__xmlattr ||= {})[#{dqname(name)}] = value 
     357          __xmlattr[#{constname}] = value 
    342358        __EOD__ 
    343359      end 
     360      c.comment << "\n  #{methodname} - #{attribute_basetype(attribute) || '(any)'}" 
    344361    end 
    345362  end 
  • trunk/lib/wsdl/soap/classDefCreatorSupport.rb

    r1827 r1891  
    1717 
    1818 
     19# requires @defined_const and @modulepath 
    1920module ClassDefCreatorSupport 
    2021  include XSD::CodeGen::GenSupport 
     
    8182 
    8283  def dqname(qname) 
    83     qname.dump 
     84    if @defined_const.key?(qname.namespace) 
     85      qname.dump(@defined_const[qname.namespace]) 
     86    else 
     87      qname.dump 
     88    end 
     89  end 
     90 
     91  def create_type_name(element) 
     92    if element.type == XSD::AnyTypeName 
     93      nil 
     94    elsif @simpletypes[element.type] 
     95      create_class_name(element.type, @modulepath) 
     96    elsif klass = element_basetype(element) 
     97      klass.name 
     98    elsif element.type 
     99      create_class_name(element.type, @modulepath) 
     100    elsif element.ref 
     101      create_class_name(element.ref, @modulepath) 
     102    else 
     103      nil 
     104      # nil means anyType. 
     105      # TODO: do we define a class for local complexType from it's name? 
     106      #   create_class_name(element.name, @modulepath) 
     107      # 
     108      # <element> 
     109      #   <complexType> 
     110      #     <seq...> 
     111      #   </complexType> 
     112      # </element> 
     113    end 
    84114  end 
    85115 
  • trunk/lib/wsdl/soap/encodedMappingRegistryCreator.rb

    r1824 r1891  
    2020  attr_reader :definitions 
    2121 
    22   def initialize(definitions, modulepath
     22  def initialize(definitions, modulepath, defined_const
    2323    @definitions = definitions 
    2424    @modulepath = modulepath 
     
    2828    @complextypes.uniq! 
    2929    @varname = nil 
     30    @defined_const = defined_const 
    3031  end 
    3132 
     
    9495    arytype = typedef.find_arytype || XSD::AnyTypeName 
    9596    type = XSD::QName.new(arytype.namespace, arytype.name.sub(/\[(?:,)*\]$/, '')) 
     97    assign_const(type.namespace, 'Ns') 
    9698    return <<__EOD__ 
    9799#{@varname}.set( 
  • trunk/lib/wsdl/soap/literalMappingRegistryCreator.rb

    r1865 r1891  
    1818  include MappingRegistryCreatorSupport 
    1919 
    20   def initialize(definitions, modulepath
     20  def initialize(definitions, modulepath, defined_const
    2121    @definitions = definitions 
    2222    @modulepath = modulepath 
     
    3030    @complextypes.uniq! 
    3131    @varname = nil 
     32    @defined_const = defined_const 
    3233  end 
    3334 
  • trunk/lib/wsdl/soap/mappingRegistryCreator.rb

    r1855 r1891  
    2929 
    3030  def dump 
    31     encoded_creator = EncodedMappingRegistryCreator.new(@definitions, @modulepath) 
    32     literal_creator = LiteralMappingRegistryCreator.new(@definitions, @modulepath) 
     31    defined_const = {} 
     32    encoded_creator = EncodedMappingRegistryCreator.new(@definitions, @modulepath, defined_const) 
     33    literal_creator = LiteralMappingRegistryCreator.new(@definitions, @modulepath, defined_const) 
    3334    wsdl_name = @definitions.name ? @definitions.name.name : 'default' 
    3435    module_name = safeconstname(wsdl_name + 'MappingRegistry') 
     
    4445    m.def_const(varname, '::SOAP::Mapping::LiteralRegistry.new') 
    4546    m.def_code(literal_creator.dump(varname)) 
     47    # 
     48    defined_const.each do |ns, tag| 
     49      m.def_const(tag, dq(ns)) 
     50    end 
    4651    m.dump 
    4752  end 
  • trunk/lib/wsdl/soap/mappingRegistryCreatorSupport.rb

    r1880 r1891  
    1414 
    1515 
     16# requires @defined_const = {} 
    1617module MappingRegistryCreatorSupport 
    1718  include ClassDefCreatorSupport 
     
    4849  def dump_type(name, type) 
    4950    if name 
     51      assign_const(name.namespace, 'Ns') 
    5052      '[' + ndq(type) + ', ' + dqname(name) + ']' 
    5153    else 
    5254      ndq(type) 
    5355    end 
     56  end 
     57 
     58  def assign_const(value, prefix = '') 
     59    return if value.nil? or @defined_const.key?(value) 
     60    name = value.scan(/[^:\/]+\z/)[0] || '' 
     61    tag = prefix + safeconstname(name) 
     62    if @defined_const.value?(tag) 
     63      idx = 0 
     64      while true 
     65        tag = prefix + safeconstname(name + "_#{idx}") 
     66        break unless @defined_const.value?(tag) 
     67        idx += 1 
     68        raise RuntimeError.new("too much similar names") if idx > 100 
     69      end 
     70    end 
     71    @defined_const[value] = tag 
    5472  end 
    5573 
     
    7795        schema_element << [varname, eleqname, type, occurrence] 
    7896      when XMLSchema::Element 
    79         if element.type == XSD::AnyTypeName 
    80           type = nil 
    81         elsif @simpletypes[element.type] 
    82           type = create_class_name(element.type, @modulepath) 
    83         elsif klass = element_basetype(element) 
    84           type = klass.name 
    85         elsif element.type 
    86           type = create_class_name(element.type, @modulepath) 
    87         elsif element.ref 
    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> 
    99         end 
     97        next if element.ref == SchemaName 
     98        type = create_type_name(element) 
    10099        name = name_element(element).name 
    101100        varname = safevarname(name) 
     
    171170    "{\n    " + 
    172171      schema_attribute.collect { |name, type| 
     172        assign_const(name.namespace, 'Ns') 
    173173        dqname(name) + ' => ' + ndq(type) 
    174174      }.join(",\n    ") + 
     
    206206    if var.key?(key) 
    207207      if as_string 
    208         ":#{key} => #{ndq(var[key])}" 
     208        if @defined_const.key?(var[key]) 
     209          ":#{key} => #{@defined_const[var[key]]}" 
     210        else 
     211          ":#{key} => #{ndq(var[key])}" 
     212        end 
    209213      else 
    210214        ":#{key} => #{var[key]}" 
     
    245249      var[:schema_ns] = qname.namespace 
    246250    end 
     251    assign_const(var[:schema_ns], 'Ns') 
    247252    dump_entry(@varname, var) 
    248253  end 
  • trunk/lib/wsdl/xmlSchema/xsd2ruby.rb

    r1857 r1891  
    1010require 'wsdl/xmlSchema/importer' 
    1111require 'wsdl/soap/classDefCreator' 
     12require 'wsdl/soap/classDefCreatorSupport' 
    1213require 'wsdl/soap/literalMappingRegistryCreator' 
    1314require 'logger' 
     
    1920 
    2021class XSD2Ruby 
     22  include WSDL::SOAP::ClassDefCreatorSupport 
     23 
    2124  attr_accessor :location 
    2225  attr_reader :opt 
     
    7982 
    8083  def dump_mapping_registry 
    81     creator = WSDL::SOAP::LiteralMappingRegistryCreator.new(@xsd, @modulepath) 
     84    defined_const = {} 
     85    creator = WSDL::SOAP::LiteralMappingRegistryCreator.new(@xsd, @modulepath, defined_const) 
    8286    module_name = XSD::CodeGen::GenSupport.safeconstname( 
    8387      @name + 'MappingRegistry') 
     
    9195    m.def_const(varname, '::SOAP::Mapping::LiteralRegistry.new') 
    9296    m.def_code(creator.dump(varname)) 
     97    # 
     98    defined_const.each do |ns, tag| 
     99      m.def_const(tag, dq(ns)) 
     100    end 
    93101    m.dump 
    94102  end 
  • trunk/lib/xsd/qname.rb

    r1824 r1891  
    2525  end 
    2626 
    27   def dump 
    28     ns = @namespace.nil? ? 'nil' : @namespace.dump 
     27  def dump(predefined_ns = nil) 
     28    ns = predefined_ns 
     29    ns ||= @namespace.nil? ? 'nil' : @namespace.dump 
    2930    name = @name.nil? ? 'nil' : @name.dump 
    3031    "XSD::QName.new(#{ns}, #{name})" 
  • trunk/test/wsdl/any/expectedEcho.rb

    r1790 r1891  
    55 
    66# {urn:example.com:echo-type}foo.bar 
     7#   before - SOAP::SOAPString 
     8#   after - SOAP::SOAPString 
    79class FooBar 
    810  attr_accessor :before 
     
    2224 
    2325# {urn:example.com:echo-type}setOutputAndCompleteRequest 
     26#   taskId - SOAP::SOAPString 
     27#   data - (any) 
     28#   participantToken - SOAP::SOAPString 
    2429class SetOutputAndCompleteRequest 
    2530  attr_accessor :taskId 
  • trunk/test/wsdl/marshal/person_org.rb

    r1731 r1891  
    22 
    33# {http://www.jin.gr.jp/~nahi/xmlns/sample/Person}Person 
     4#   familyname - SOAP::SOAPString 
     5#   givenname - SOAP::SOAPString 
     6#   var1 - SOAP::SOAPInt 
     7#   var2 - SOAP::SOAPDouble 
     8#   var3 - SOAP::SOAPString 
    49class Person 
    510  attr_accessor :familyname 
  • trunk/test/wsdl/ref/expectedProduct.rb

    r1788 r1891  
    11require 'xsd/qname' 
    22 
     3module WSDL::Ref 
     4 
     5 
    36# {urn:ref}Product 
     7#   name - SOAP::SOAPString 
     8#   rating - SOAP::SOAPString 
    49class Product 
    510  attr_accessor :name 
     
    1318 
    1419# {urn:ref}Comment 
     20#   xmlattr_msgid - SOAP::SOAPString 
    1521class Comment < ::String 
     22  AttrMsgid = XSD::QName.new(nil, "msgid") 
     23 
     24  def __xmlattr 
     25    @__xmlattr ||= {} 
     26  end 
     27 
    1628  def xmlattr_msgid 
    17     (@__xmlattr ||= {})[XSD::QName.new(nil, "msgid")
     29    __xmlattr[AttrMsgid
    1830  end 
    1931 
    2032  def xmlattr_msgid=(value) 
    21     (@__xmlattr ||= {})[XSD::QName.new(nil, "msgid")] = value 
     33    __xmlattr[AttrMsgid] = value 
    2234  end 
    2335 
     
    2941 
    3042# {urn:ref}_point 
     43#   xmlattr_unit - SOAP::SOAPString 
    3144class C__point < ::String 
     45  AttrUnit = XSD::QName.new(nil, "unit") 
     46 
     47  def __xmlattr 
     48    @__xmlattr ||= {} 
     49  end 
     50 
    3251  def xmlattr_unit 
    33     (@__xmlattr ||= {})[XSD::QName.new(nil, "unit")
     52    __xmlattr[AttrUnit
    3453  end 
    3554 
    3655  def xmlattr_unit=(value) 
    37     (@__xmlattr ||= {})[XSD::QName.new(nil, "unit")] = value 
     56    __xmlattr[AttrUnit] = value 
    3857  end 
    3958 
     
    4564 
    4665# {urn:ref}Document 
     66#   xmlattr_ID - SOAP::SOAPString 
    4767class Document < ::String 
     68  AttrID = XSD::QName.new(nil, "ID") 
     69 
     70  def __xmlattr 
     71    @__xmlattr ||= {} 
     72  end 
     73 
    4874  def xmlattr_ID 
    49     (@__xmlattr ||= {})[XSD::QName.new(nil, "ID")
     75    __xmlattr[AttrID
    5076  end 
    5177 
    5278  def xmlattr_ID=(value) 
    53     (@__xmlattr ||= {})[XSD::QName.new(nil, "ID")] = value 
     79    __xmlattr[AttrID] = value 
    5480  end 
    5581 
     
    6187 
    6288# {urn:ref}DerivedChoice_BaseSimpleContent 
     89#   varStringExt - SOAP::SOAPString 
     90#   varFloatExt - SOAP::SOAPFloat 
     91#   xmlattr_ID - SOAP::SOAPString 
     92#   xmlattr_attrStringExt - SOAP::SOAPString 
    6393class DerivedChoice_BaseSimpleContent < Document 
     94  AttrAttrStringExt = XSD::QName.new(nil, "attrStringExt") 
     95  AttrID = XSD::QName.new(nil, "ID") 
     96 
    6497  attr_accessor :varStringExt 
    6598  attr_accessor :varFloatExt 
    6699 
     100  def __xmlattr 
     101    @__xmlattr ||= {} 
     102  end 
     103 
    67104  def xmlattr_ID 
    68     (@__xmlattr ||= {})[XSD::QName.new(nil, "ID")
     105    __xmlattr[AttrID
    69106  end 
    70107 
    71108  def xmlattr_ID=(value) 
    72     (@__xmlattr ||= {})[XSD::QName.new(nil, "ID")] = value 
     109    __xmlattr[AttrID] = value 
    73110  end 
    74111 
    75112  def xmlattr_attrStringExt 
    76     (@__xmlattr ||= {})[XSD::QName.new(nil, "attrStringExt")
     113    __xmlattr[AttrAttrStringExt
    77114  end 
    78115 
    79116  def xmlattr_attrStringExt=(value) 
    80     (@__xmlattr ||= {})[XSD::QName.new(nil, "attrStringExt")] = value 
     117    __xmlattr[AttrAttrStringExt] = value 
    81118  end 
    82119 
     
    96133 
    97134# {urn:ref}Product-Bag 
     135#   bag - WSDL::Ref::Product 
     136#   rating - SOAP::SOAPString 
     137#   comment_1 - (any) 
     138#   comment_2 - WSDL::Ref::Comment 
     139#   m___point - WSDL::Ref::C__point 
     140#   xmlattr_version - SOAP::SOAPString 
     141#   xmlattr_yesno - SOAP::SOAPString 
    98142class ProductBag 
     143  AttrVersion = XSD::QName.new("urn:ref", "version") 
     144  AttrYesno = XSD::QName.new("urn:ref", "yesno") 
     145 
    99146  attr_accessor :bag 
    100147  attr_accessor :rating 
     
    110157  end 
    111158 
     159  def __xmlattr 
     160    @__xmlattr ||= {} 
     161  end 
     162 
    112163  def xmlattr_version 
    113     (@__xmlattr ||= {})[XSD::QName.new("urn:ref", "version")
     164    __xmlattr[AttrVersion
    114165  end 
    115166 
    116167  def xmlattr_version=(value) 
    117     (@__xmlattr ||= {})[XSD::QName.new("urn:ref", "version")] = value 
     168    __xmlattr[AttrVersion] = value 
    118169  end 
    119170 
    120171  def xmlattr_yesno 
    121     (@__xmlattr ||= {})[XSD::QName.new("urn:ref", "yesno")
     172    __xmlattr[AttrYesno
    122173  end 
    123174 
    124175  def xmlattr_yesno=(value) 
    125     (@__xmlattr ||= {})[XSD::QName.new("urn:ref", "yesno")] = value 
     176    __xmlattr[AttrYesno] = value 
    126177  end 
    127178 
     
    137188 
    138189# {urn:ref}Creator 
     190#   xmlattr_Role - SOAP::SOAPString 
    139191class Creator < ::String 
     192  AttrRole = XSD::QName.new(nil, "Role") 
     193 
     194  def __xmlattr 
     195    @__xmlattr ||= {} 
     196  end 
     197 
    140198  def xmlattr_Role 
    141     (@__xmlattr ||= {})[XSD::QName.new(nil, "Role")
     199    __xmlattr[AttrRole
    142200  end 
    143201 
    144202  def xmlattr_Role=(value) 
    145     (@__xmlattr ||= {})[XSD::QName.new(nil, "Role")] = value 
     203    __xmlattr[AttrRole] = value 
    146204  end 
    147205 
     
    157215  Y = Yesno.new("Y") 
    158216end 
     217 
     218 
     219end 
  • trunk/test/wsdl/ref/test_ref.rb

    r1794 r1891  
    112112    gen.basedir = DIR 
    113113    gen.logger.level = Logger::FATAL 
     114    gen.opt['module_path'] = self.class.to_s.sub(/::[^:]+$/, '') 
    114115    gen.opt['classdef'] = nil 
    115116    gen.opt['force'] = true 
  • trunk/test/wsdl/simpletype/rpc/expectedEchoVersion.rb

    r1773 r1891  
    22 
    33# {urn:example.com:simpletype-rpc-type}version_struct 
     4#   version - Version 
     5#   msg - SOAP::SOAPString 
    46class Version_struct 
    57  attr_accessor :version 
  • trunk/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb

    r1880 r1891  
    55  EncodedRegistry = ::SOAP::Mapping::EncodedRegistry.new 
    66  LiteralRegistry = ::SOAP::Mapping::LiteralRegistry.new 
     7  NsSimpletypeRpcType = "urn:example.com:simpletype-rpc-type" 
    78 
    89  EncodedRegistry.register( 
     
    1819  EncodedRegistry.register( 
    1920    :class => Version, 
    20     :schema_ns => "urn:example.com:simpletype-rpc-type"
     21    :schema_ns => NsSimpletypeRpcType
    2122    :schema_type => "version" 
    2223  ) 
     
    2425  EncodedRegistry.register( 
    2526    :class => StateType, 
    26     :schema_ns => "urn:example.com:simpletype-rpc-type"
     27    :schema_ns => NsSimpletypeRpcType
    2728    :schema_type => "stateType" 
    2829  ) 
     
    3031  EncodedRegistry.register( 
    3132    :class => ZipIntType, 
    32     :schema_ns => "urn:example.com:simpletype-rpc-type"
     33    :schema_ns => NsSimpletypeRpcType
    3334    :schema_type => "zipIntType" 
    3435  ) 
     
    3637  LiteralRegistry.register( 
    3738    :class => Version_struct, 
    38     :schema_ns => "urn:example.com:simpletype-rpc-type"
     39    :schema_ns => NsSimpletypeRpcType
    3940    :schema_type => "version_struct", 
    4041    :schema_qualified => false, 
     
    4748  LiteralRegistry.register( 
    4849    :class => Version, 
    49     :schema_ns => "urn:example.com:simpletype-rpc-type"
     50    :schema_ns => NsSimpletypeRpcType
    5051    :schema_type => "version" 
    5152  ) 
     
    5354  LiteralRegistry.register( 
    5455    :class => StateType, 
    55     :schema_ns => "urn:example.com:simpletype-rpc-type"
     56    :schema_ns => NsSimpletypeRpcType
    5657    :schema_type => "stateType" 
    5758  ) 
     
    5960  LiteralRegistry.register( 
    6061    :class => ZipIntType, 
    61     :schema_ns => "urn:example.com:simpletype-rpc-type"
     62    :schema_ns => NsSimpletypeRpcType
    6263    :schema_type => "zipIntType" 
    6364  ) 
  • trunk/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb

    r1731 r1891  
    22 
    33# {urn:example.com:simpletype-rpc-type}version_struct 
     4#   version - Version 
     5#   msg - SOAP::SOAPString 
    46class Version_struct 
    57  attr_accessor :version 
  • trunk/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb

    r1880 r1891  
    55  EncodedRegistry = ::SOAP::Mapping::EncodedRegistry.new 
    66  LiteralRegistry = ::SOAP::Mapping::LiteralRegistry.new 
     7  NsSimpletypeRpcType = "urn:example.com:simpletype-rpc-type" 
    78 
    89  EncodedRegistry.register( 
     
    1819  EncodedRegistry.register( 
    1920    :class => Version, 
    20     :schema_ns => "urn:example.com:simpletype-rpc-type"
     21    :schema_ns => NsSimpletypeRpcType
    2122    :schema_type => "version" 
    2223  ) 
     
    2425  LiteralRegistry.register( 
    2526    :class => Version_struct, 
    26     :schema_ns => "urn:example.com:simpletype-rpc-type"
     27    :schema_ns => NsSimpletypeRpcType
    2728    :schema_type => "version_struct", 
    2829    :schema_qualified => false, 
     
    3536  LiteralRegistry.register( 
    3637    :class => Version, 
    37     :schema_ns => "urn:example.com:simpletype-rpc-type"
     38    :schema_ns => NsSimpletypeRpcType
    3839    :schema_type => "version" 
    3940  ) 
  • trunk/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb

    r1731 r1891  
    22 
    33# {urn:mysample}question 
     4#   something - SOAP::SOAPString 
    45class Question 
    56  attr_accessor :something 
     
    1112 
    1213# {urn:mysample}section 
     14#   sectionID - SOAP::SOAPInt 
     15#   name - SOAP::SOAPString 
     16#   description - SOAP::SOAPString 
     17#   index - SOAP::SOAPInt 
     18#   firstQuestion - Question 
    1319class Section 
    1420  attr_accessor :sectionID 
  • trunk/test/xsd/xsd2ruby/expected_mysample.rb

    r1857 r1891  
    55 
    66# {urn:mysample}question 
     7#   something - SOAP::SOAPString 
    78class Question 
    89  attr_accessor :something 
     
    1415 
    1516# {urn:mysample}section 
     17#   sectionID - SOAP::SOAPInt 
     18#   name - SOAP::SOAPString 
     19#   description - SOAP::SOAPString 
     20#   index - SOAP::SOAPInt 
     21#   firstQuestion - XSD::XSD2Ruby::Question 
    1622class Section 
    1723  attr_accessor :sectionID 
     
    3541 
    3642# {urn:mysample}sectionElement 
     43#   sectionID - SOAP::SOAPInt 
     44#   name - SOAP::SOAPString 
     45#   description - SOAP::SOAPString 
     46#   index - SOAP::SOAPInt 
     47#   firstQuestion - XSD::XSD2Ruby::Question 
    3748class SectionElement 
    3849  attr_accessor :sectionID