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

Changeset 1827

Show
Ignore:
Timestamp:
06/03/07 13:56:54 (1 year ago)
Author:
nahi
Message:
  • handle choice + maxOccurs="unbounded" correctly. closes #327.
Files:

Legend:

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

    r1824 r1827  
    437437        default_ns ||= type.namespace if type 
    438438        definition.elements = parse_schema_definition(schema_element, default_ns) 
    439         # needed? 
    440439        if klass < ::Array 
    441440          definition.elements.set_array 
     
    459458      element_definition = parse_schema_element_definition(ele, default_ns) 
    460459      definition << element_definition 
    461       if element_definition.as_array? 
    462         definition.set_array 
    463       end 
    464460    end 
    465461    definition 
  • trunk/lib/soap/mapping/wsdlliteralregistry.rb

    r1824 r1827  
    174174  def complexobj2soapchildren_array(obj, ele, child_ele, allow_nil_value) 
    175175    child = Mapping.get_attribute(obj, child_ele.name.name) 
    176     if child.nil? and obj.respond_to?(:each
     176    if child.nil? and obj.is_a?(::Array
    177177      child = obj 
    178178    end 
     
    227227      nil       # intends no element 
    228228    else 
    229       raise MappingError.new("nil not allowed: #{ele.name.name}") 
     229      warn("nil not allowed: #{ele.name.name}") 
     230      nil 
    230231    end 
    231232  end 
  • trunk/lib/wsdl/soap/classDefCreatorSupport.rb

    r1824 r1827  
    3737  end 
    3838 
    39   def dump_method_signature(operation
     39  def dump_method_signature(operation, element_definitions
    4040    name = operation.name 
    4141    input = operation.input 
     
    4848# 
    4949# ARGS 
    50 #{dump_inout_type(input).chomp} 
     50#{dump_inout_type(input, element_definitions).chomp} 
    5151# 
    5252# RETURNS 
    53 #{dump_inout_type(output).chomp} 
     53#{dump_inout_type(output, element_definitions).chomp} 
    5454# 
    5555__EOD__ 
     
    5757      str <<<<__EOD__ 
    5858# RAISES 
    59 #{dump_fault_type(fault)} 
     59#{dump_fault_type(fault, element_definitions)} 
    6060# 
    6161__EOD__ 
     
    8686private 
    8787 
    88   def dump_inout_type(param
     88  def dump_inout_type(param, element_definitions
    8989    if param 
    9090      message = param.find_message 
     
    9494        if part.type 
    9595          typename = safeconstname(part.type.name) 
    96           params << add_at("#   #{name}", "#{typename} - #{part.type}\n", 20) 
     96          qname = part.type 
     97          params << add_at("#   #{name}", "#{typename} - #{qname}\n", 20) 
    9798        elsif part.element 
    98           typename = safeconstname(part.element.name) 
    99           params << add_at("#   #{name}", "#{typename} - #{part.element}\n", 20) 
     99          ele = element_definitions[part.element] 
     100          if ele.type 
     101            typename = safeconstname(ele.type.name) 
     102            qname = ele.type 
     103          else 
     104            typename = safeconstname(ele.name.name) 
     105            qname = ele.name 
     106          end 
     107          params << add_at("#   #{name}", "#{typename} - #{qname}\n", 20) 
    100108        end 
    101109      end 
     
    129137  end 
    130138 
    131   def dump_fault_type(fault
     139  def dump_fault_type(fault, element_definitions
    132140    fault.collect { |ele| 
    133       dump_inout_type(ele).chomp 
     141      dump_inout_type(ele, element_definitions).chomp 
    134142    }.join("\n") 
    135143  end 
  • trunk/lib/wsdl/soap/clientSkeltonCreator.rb

    r1824 r1827  
    6262 
    6363__EOD__ 
     64    element_definitions = @definitions.collect_elements 
    6465    @definitions.porttype(name).operations.each do |operation| 
    65       result << dump_method_signature(operation
     66      result << dump_method_signature(operation, element_definitions
    6667      result << dump_input_init(operation.input) << "\n" 
    6768      result << dump_operation(operation) << "\n\n" 
  • trunk/lib/wsdl/soap/complexType.rb

    r1824 r1827  
    2424      :TYPE_STRUCT 
    2525    elsif content 
    26       e = elements 
    27       if attributes.empty? and e.size == 1 and e[0].map_as_array? 
     26      if attributes.empty? and map_as_array? 
    2827        if name == ::SOAP::Mapping::MapQName 
    2928          :TYPE_MAP 
     
    108107      end 
    109108    end 
    110     if check_array_content 
     109    if map_as_array? 
    111110      return element_simpletype(elements[0]) 
    112111    end 
     
    118117      raise RuntimeError.new("Assert: not for array") 
    119118    end 
    120     if check_array_content 
     119    if map_as_array? 
    121120      return nested_elements[0] 
    122121    end 
     
    144143  end 
    145144 
    146   def check_array_content 
    147     e = elements 
     145  def map_as_array? 
     146    e = nested_elements 
    148147    e.size == 1 and e[0].map_as_array? 
    149148  end 
  • trunk/lib/wsdl/soap/element.rb

    r1824 r1827  
    1616class Element < Info 
    1717  def map_as_array? 
    18     maxoccurs.nil? or maxoccurs != 1 
     18    # parent sequence / choice may be marked as maxOccurs="unbounded" 
     19    maxoccurs.nil? or maxoccurs != 1 or (parent and parent.map_as_array?) 
    1920  end 
    2021 
  • trunk/lib/wsdl/soap/servantSkeltonCreator.rb

    r1824 r1827  
    5555    class_name = create_class_name(name) 
    5656    c = XSD::CodeGen::ClassDef.new(class_name) 
     57    element_definitions = @definitions.collect_elements 
    5758    operations = @definitions.porttype(name).operations 
    5859    operations.each do |operation| 
     
    6768          EOD 
    6869        end 
    69       m.comment = dump_method_signature(operation
     70      m.comment = dump_method_signature(operation, element_definitions
    7071      c.add_method(m) 
    7172    end 
  • trunk/lib/wsdl/xmlSchema/content.rb

    r1824 r1827  
    4040  def choice? 
    4141    false 
     42  end 
     43 
     44  def map_as_array? 
     45    maxoccurs.nil? or maxoccurs != 1 
    4246  end 
    4347