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

Changeset 1660

Show
Ignore:
Timestamp:
11/03/05 09:55:40 (3 years ago)
Author:
nahi
Message:

added support of <list> of <simpleType>. closes #3.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/soap/encodingstyle/soapHandler.rb

    r1652 r1660  
    383383 
    384384  def decode_defined_simpletype(elename, typename, typedef, arytypestr) 
    385     o = decode_basetype(TypeMap[typedef.base], elename) 
    386     o.definedtype = typedef 
    387     o 
     385    if typedef.base 
     386      o = decode_basetype(TypeMap[typedef.base], elename) 
     387      o.definedtype = typedef 
     388      o 
     389    else 
     390      raise RuntimeError.new("unsupported simpleType: #{typedef}") 
     391    end 
    388392  end 
    389393 
  • trunk/lib/soap/mapping/wsdlencodedregistry.rb

    r1655 r1660  
    125125    type.check_lexical_format(obj) 
    126126    return SOAPNil.new if obj.nil?      # ToDo: check nillable. 
    127     o = base2soap(obj, TypeMap[type.base]) 
    128     o 
     127    if type.base 
     128      base2soap(obj, TypeMap[type.base]) 
     129    elsif type.list 
     130      base2soap(obj.join(" "), SOAP::SOAPString) 
     131    else 
     132      raise MappingError.new("unsupported simpleType: #{type}") 
     133    end 
    129134  end 
    130135 
  • trunk/lib/soap/mapping/wsdlliteralregistry.rb

    r1655 r1660  
    113113    type.check_lexical_format(obj) 
    114114    return SOAPNil.new if obj.nil?      # TODO: check nillable. 
    115     o = base2soap(obj, TypeMap[type.base]) 
    116     o 
     115    if type.base 
     116      base2soap(obj, TypeMap[type.base]) 
     117    elsif type.list 
     118      base2soap(obj.join(" "), SOAP::SOAPString) 
     119    else 
     120      raise MappingError.new("unsupported simpleType: #{type}") 
     121    end 
    117122  end 
    118123 
     
    240245      ele = SOAPElement.from_obj(obj) 
    241246      ele.elename = qname 
     247      ele 
     248    elsif obj.is_a?(Array) 
     249      # treat as a list of simpletype 
     250      ele = SOAPElement.new(qname, obj.join(" ")) 
    242251      ele 
    243252    elsif obj.is_a?(XSD::QName) 
  • trunk/lib/soap/rpc/element.rb

    r1624 r1660  
    164164    res_qnames = [res_qnames] if res_qnames.is_a?(XSD::QName) 
    165165    param_def = [] 
    166     req_qnames.each do |qname| 
    167       param_def << [IN, qname.name, [nil, qname.namespace, qname.name]] 
    168     end 
    169     res_qnames.each do |qname| 
    170       param_def << [OUT, qname.name, [nil, qname.namespace, qname.name]] 
     166    # req_qnames and res_qnames can be nil 
     167    if req_qnames 
     168      req_qnames.each do |qname| 
     169        param_def << [IN, qname.name, [nil, qname.namespace, qname.name]] 
     170      end 
     171    end 
     172    if res_qnames 
     173      res_qnames.each do |qname| 
     174        param_def << [OUT, qname.name, [nil, qname.namespace, qname.name]] 
     175      end 
    171176    end 
    172177    param_def 
  • trunk/lib/wsdl/soap/classDefCreator.rb

    r1655 r1660  
    9797 
    9898  def dump_simpletypedef(qname, simpletype) 
    99     if !simpletype.restriction or simpletype.restriction.enumeration.empty? 
     99    if simpletype.restriction 
     100      dump_simpletypedef_restriction(qname, simpletype.restriction) 
     101    elsif simpletype.list 
     102      dump_simpletypedef_list(qname, simpletype.list) 
     103    else 
     104      raise RuntimeError.new("unknown kind of simpletype: #{simpletype}") 
     105    end 
     106  end 
     107 
     108  def dump_simpletypedef_restriction(qname, restriction) 
     109    if restriction.enumeration.empty? 
     110      # not supported.  minlength? 
    100111      return nil 
    101112    end 
    102113    c = XSD::CodeGen::ModuleDef.new(create_class_name(qname)) 
    103114    c.comment = "#{qname}" 
     115    define_enum_restriction(c, restriction.enumeration) 
     116    c.dump 
     117  end 
     118 
     119  def dump_simpletypedef_list(qname, list) 
     120    c = XSD::CodeGen::ClassDef.new(create_class_name(qname), '::Array') 
     121    c.comment = "#{qname}" 
     122    if simpletype = list.local_simpletype 
     123      if simpletype.restriction.nil? 
     124        raise RuntimeError.new( 
     125          "unknown kind of simpletype: #{simpletype}") 
     126      end 
     127      define_enum_restriction(c, simpletype.restriction.enumeration) 
     128      c.comment << "\n  contains list of #{create_class_name(qname)}::*" 
     129    elsif list.itemtype 
     130      c.comment << "\n  contains list of #{create_class_name(list.itemtype)}::*" 
     131    else 
     132      raise RuntimeError.new("unknown kind of list: #{list}") 
     133    end 
     134    c.dump 
     135  end 
     136 
     137  def define_enum_restriction(c, enumeration) 
    104138    const = {} 
    105     simpletype.restriction.enumeration.each do |value| 
     139    enumeration.each do |value| 
    106140      constname = safeconstname(value) 
    107141      const[constname] ||= 0 
     
    111145      c.def_const(constname, ndq(value)) 
    112146    end 
    113     c.dump 
    114147  end 
    115148 
  • trunk/lib/wsdl/soap/methodDefCreator.rb

    r1653 r1660  
    120120      ['::' + mapped.name] 
    121121    elsif definedtype = @simpletypes[part.type] 
    122       ['::' + basetype_mapped_class(definedtype.base).name] 
     122      if definedtype.base 
     123        ['::' + basetype_mapped_class(definedtype.base).name] 
     124      else 
     125        raise RuntimeError.new("unsupported simpleType: #{definedtype}") 
     126      end 
    123127    elsif definedtype = @elements[part.element] 
    124128      #['::SOAP::SOAPStruct', part.element.namespace, part.element.name] 
     
    149153      ['::' + mapped.name, nil, part.name] 
    150154    elsif definedtype = @simpletypes[part.type] 
    151       ['::' + basetype_mapped_class(definedtype.base).name, nil, part.name] 
     155      if definedtype.base 
     156        ['::' + basetype_mapped_class(definedtype.base).name, nil, part.name] 
     157      else 
     158        raise RuntimeError.new("unsupported simpleType: #{definedtype}") 
     159      end 
    152160    elsif definedtype = @elements[part.element] 
    153161      ['::SOAP::SOAPElement', part.element.namespace, part.element.name] 
  • trunk/lib/wsdl/xmlSchema/data.rb

    r1643 r1660  
    2525require 'wsdl/xmlSchema/choice' 
    2626require 'wsdl/xmlSchema/sequence' 
     27require 'wsdl/xmlSchema/list' 
    2728require 'wsdl/xmlSchema/attribute' 
    2829require 'wsdl/xmlSchema/unique' 
     
    4849IncludeName = XSD::QName.new(XSD::Namespace, 'include') 
    4950LengthName = XSD::QName.new(XSD::Namespace, 'length') 
     51ListName = XSD::QName.new(XSD::Namespace, 'list') 
    5052PatternName = XSD::QName.new(XSD::Namespace, 'pattern') 
    5153RestrictionName = XSD::QName.new(XSD::Namespace, 'restriction') 
     
    6466FormAttrName = XSD::QName.new(nil, 'form') 
    6567IdAttrName = XSD::QName.new(nil, 'id') 
     68ItemTypeAttrName = XSD::QName.new(nil, 'itemType') 
    6669MaxOccursAttrName = XSD::QName.new(nil, 'maxOccurs') 
    6770MinOccursAttrName = XSD::QName.new(nil, 'minOccurs') 
  • trunk/lib/wsdl/xmlSchema/simpleType.rb

    r1520 r1660  
    1818  attr_accessor :name 
    1919  attr_reader :restriction 
     20  attr_reader :list 
    2021 
    2122  def check_lexical_format(value) 
    2223    if @restriction 
    2324      check_restriction(value) 
     25    elsif @list 
     26      # TODO: check 
    2427    else 
    2528      raise ArgumentError.new("incomplete simpleType") 
     
    3134      @restriction.base 
    3235    else 
    33       raise ArgumentError.new("incomplete simpleType") 
     36      nil 
    3437    end 
    3538  end 
     
    3942    @name = name 
    4043    @restriction = nil 
     44    @list = nil 
    4145  end 
    4246 
     
    5054      @restriction = SimpleRestriction.new 
    5155      @restriction 
     56    when ListName 
     57      @list = List.new 
     58      @list 
    5259    end 
    5360  end