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

Changeset 1805

Show
Ignore:
Timestamp:
05/24/07 22:26:37 (1 year ago)
Author:
nahi
Message:
  • support typed element which type is qualified.

<element name="foo" type="tns:mytype"/>
<complexType name="mytype" ...>

  • tune up.
Files:

Legend:

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

    r1799 r1805  
    165165 
    166166  def decode_tag_end(ns, node) 
     167    textbufstr = @textbuf.join 
     168    @textbuf.clear 
    167169    o = node.node 
    168170    if o.is_a?(SOAPUnknown) 
    169       if /\A\s*\z/ =~ @textbuf.join 
     171      if /\A\s*\z/ =~ textbufstr 
    170172        newnode = o.as_element 
    171173      else 
     
    175177      o = node.node 
    176178    end 
    177  
    178     decode_textbuf(o) 
     179    decode_textbuf(o, textbufstr) 
    179180  end 
    180181 
     
    228229private 
    229230 
    230   def decode_textbuf(node) 
    231     textbufstr = @textbuf.join 
    232     @textbuf.clear 
     231  def decode_textbuf(node, textbufstr) 
    233232    case node 
    234233    when XSD::XSDString, SOAPElement 
  • trunk/lib/soap/encodingstyle/soapHandler.rb

    r1799 r1805  
    187187 
    188188  def decode_tag_end(ns, node) 
     189    textbufstr = @textbuf.join 
     190    @textbuf.clear 
    189191    o = node.node 
    190192    if o.is_a?(SOAPUnknown) 
    191       newnode = if /\A\s*\z/ =~ @textbuf.join 
     193      newnode = if /\A\s*\z/ =~ textbufstr 
    192194        o.as_struct 
    193195      else 
     
    200202      o = node.node 
    201203    end 
    202     decode_textbuf(o
     204    decode_textbuf(o, textbufstr
    203205    # unlink definedtype 
    204206    o.definedtype = nil 
     
    464466  end 
    465467 
    466   def decode_textbuf(node) 
    467     textbufstr = @textbuf.join 
    468     @textbuf.clear 
     468  def decode_textbuf(node, textbufstr) 
    469469    case node 
    470470    when XSD::XSDHexBinary, XSD::XSDBase64Binary 
  • trunk/lib/soap/mapping/encodedregistry.rb

    r1788 r1805  
    364364    if klass 
    365365      klass_definition = schema_definition_from_class(klass) 
    366       if definition and definition.class_for.ancestors.include?(klass) 
     366      if definition and (definition.class_for < klass) 
    367367        klass = definition.class_for 
    368368      else 
     
    486486 
    487487  def typedobj2soap(value, klass) 
    488     if klass and klass.ancestors.include?(::SOAP::SOAPBasetype) 
     488    if klass and klass.include?(::SOAP::SOAPBasetype) 
    489489      base2soap(value, klass) 
    490490    else 
     
    529529      raise MappingError.new("unknown class: #{klass}") 
    530530    end 
    531     if klass.ancestors.include?(::SOAP::SOAPBasetype) 
     531    if klass.include?(::SOAP::SOAPBasetype) 
    532532      obj = base2obj(value, klass) 
    533533    else 
  • trunk/lib/soap/mapping/factory.rb

    r1726 r1805  
    6464      else 
    6565        klass = Mapping.class_from_name(eledef.type) 
    66         if klass && klass.ancestors.include?(::SOAP::SOAPBasetype) 
     66        if klass && klass.include?(::SOAP::SOAPBasetype) 
    6767          value = klass.new(child) 
    6868        else 
  • trunk/lib/soap/mapping/literalregistry.rb

    r1788 r1805  
    7171  def any2soap(obj, qname) 
    7272    ele = nil 
    73     if definition = schema_definition_from_class(obj.class) 
     73    if obj.is_a?(SOAP::Mapping::Object) 
     74      ele = mappingobj2soap(obj, qname) 
     75    elsif definition = schema_definition_from_elename(qname) 
    7476      ele = stubobj2soap(obj, qname, definition) 
    75     elsif obj.is_a?(SOAP::Mapping::Object) 
    76       ele = mappingobj2soap(obj, qname) 
    77     elsif obj.is_a?(Hash) 
     77    elsif definition = schema_definition_from_class(obj.class) 
     78      ele = stubobj2soap(obj, qname, definition) 
     79    else 
     80      ele = anyobj2soap(obj, qname) 
     81    end 
     82    ele 
     83  end 
     84 
     85  def anyobj2soap(obj, qname) 
     86    ele = nil 
     87    case obj 
     88    when Hash 
    7889      ele = SOAPElement.from_obj(obj, nil) 
    7990      ele.elename = qname 
    80     elsif obj.is_a?(Array) 
     91    when Array 
    8192      # treat as a list of simpletype 
    8293      ele = SOAPElement.new(qname, obj.join(" ")) 
    83     elsif obj.is_a?(XSD::QName) 
     94    when XSD::QName 
    8495      ele = SOAPElement.new(qname) 
    8596      ele.text = obj 
     
    111122    if definition.attributes 
    112123      definition.attributes.each do |qname, param| 
    113         at = obj.__send__( 
    114           XSD::CodeGen::GenSupport.safemethodname('xmlattr_' + qname.name)) 
     124        at = Mapping.get_attribute(obj, XSD::CodeGen::GenSupport.safemethodname('xmlattr_' + qname.name)) 
    115125        ele.extraattr[qname] = at 
    116126      end 
     
    172182      end 
    173183    end 
     184    add_attributes2soap(obj, ele) 
    174185    ele 
    175186  end 
     
    247258  def elesoapchild2obj(value, eledef) 
    248259    if eledef.mapped_class 
    249       child_definition = schema_definition_from_class(eledef.mapped_class
    250       if child_definition 
    251         any2obj(value, child_definition.class_for) 
    252       else 
    253         if eledef.mapped_class.ancestors.include?(::SOAP::SOAPBasetype) 
    254           base2obj(value, eledef.mapped_class
     260      if eledef.mapped_class.include?(::SOAP::SOAPBasetype
     261        base2obj(value, eledef.mapped_class) 
     262      else 
     263        child_definition = schema_definition_from_class(eledef.mapped_class) 
     264        if child_definition 
     265          any2obj(value, child_definition.class_for
    255266        else 
    256267          any2obj(value, eledef.mapped_class) 
     
    278289        if class_name 
    279290          klass = Mapping.class_from_name(class_name) 
    280           if klass.ancestors.include?(::SOAP::SOAPBasetype) 
     291          if klass.include?(::SOAP::SOAPBasetype) 
    281292            child = klass.new(attr).data 
    282293          end 
  • trunk/lib/soap/mapping/mapping.rb

    r1800 r1805  
    300300  end 
    301301 
     302  EMPTY_ATTRIBUTES = {}.freeze 
    302303  def self.get_attributes_for_any(obj) 
    303304    if obj.respond_to?(:__xmlele_any) 
    304       obj.__xmlele_any 
     305      obj.__xmlele_any || EMPTY_ATTRIBUTES 
    305306    else 
    306307      get_attributes(obj) 
     
    315316      return obj[attr_name] || obj[attr_name.intern] 
    316317    else 
     318      if obj.respond_to?(attr_name) 
     319        return obj.__send__(attr_name) 
     320      end 
    317321      iv = obj.instance_variables 
    318322      name = XSD::CodeGen::GenSupport.safevarname(attr_name) 
     
    322326        return obj.instance_variable_get("@#{attr_name}") 
    323327      end 
    324       if obj.is_a?(::Struct) or obj.is_a?(Marshallable) 
    325         if obj.respond_to?(name) 
    326           return obj.__send__(name) 
    327         elsif obj.respond_to?(attr_name) 
    328           return obj.__send__(attr_name) 
    329         end 
     328      if obj.respond_to?(name) 
     329        return obj.__send__(name) 
    330330      end 
    331331      nil 
     
    438438        definition.elements = parse_schema_definition(schema_element, default_ns) 
    439439        # needed? 
    440         if klass.ancestors.include?(::Array) 
     440        if klass < ::Array 
    441441          definition.elements.set_array 
    442442        end 
  • trunk/lib/soap/mapping/schemadefinition.rb

    r1790 r1805  
    3535 
    3636module SchemaComplexTypeDefinition 
     37  include Enumerable 
     38 
     39  def initialize 
     40    @content = [] 
     41    @element_cache = {} 
     42  end 
     43 
    3744  def is_concrete_definition 
    3845    true 
     46  end 
     47 
     48  def <<(ele) 
     49    @content << ele 
     50  end 
     51 
     52  def each 
     53    @content.each do |ele| 
     54      yield ele 
     55    end 
     56  end 
     57 
     58  def size 
     59    @content.size 
    3960  end 
    4061 
     
    4869 
    4970  def find_element(qname) 
     71    @element_cache[qname] ||= search_element(qname) 
     72  end 
     73 
     74private 
     75 
     76  def search_element(qname) 
    5077    each do |ele| 
    5178      if ele.respond_to?(:find_element) 
     
    6491end 
    6592 
    66 class SchemaEmptyDefinition < ::Array 
     93class SchemaEmptyDefinition 
    6794  include SchemaComplexTypeDefinition 
    6895 
    6996  def initialize 
    7097    super() 
    71     freeze 
     98    @content.freeze 
    7299  end 
    73100end 
    74101 
    75 class SchemaSequenceDefinition < ::Array 
     102class SchemaSequenceDefinition 
    76103  include SchemaComplexTypeDefinition 
     104 
     105  def initialize 
     106    super() 
     107  end 
    77108 
    78109  def choice? 
     
    90121end 
    91122 
    92 class SchemaChoiceDefinition < ::Array 
     123class SchemaChoiceDefinition 
    93124  include SchemaComplexTypeDefinition 
     125 
     126  def initialize 
     127    super() 
     128  end 
    94129 
    95130  def choice? 
  • trunk/lib/soap/mapping/wsdlencodedregistry.rb

    r1739 r1805  
    227227      if item and item.mapped_class 
    228228        # klass must be a SOAPBasetype or a class 
    229         if item.mapped_class.ancestors.include?(::SOAP::SOAPBasetype) 
     229        if item.mapped_class.include?(::SOAP::SOAPBasetype) 
    230230          if value.respond_to?(:data) 
    231231            child = item.mapped_class.new(value.data).data 
  • trunk/lib/wsdl/soap/classDefCreator.rb

    r1802 r1805  
    106106 
    107107  def dump_complextype 
    108     @complextypes.collect { |type| 
     108    definitions = @complextypes.collect { |type| 
    109109      dump_complextypedef(type.name, type) if type.abstract 
    110     }.compact.join("\n") + 
    111     @complextypes.collect { |type| 
     110    }.compact 
     111    definitions += @complextypes.collect { |type| 
    112112      dump_complextypedef(type.name, type) unless type.abstract 
    113     }.compact.join("\n") 
     113    }.compact 
     114    definitions.join("\n") 
    114115  end 
    115116 
  • trunk/lib/wsdl/soap/literalMappingRegistryCreator.rb

    r1790 r1805  
    6464      qualified = (ele.elementform == 'qualified') 
    6565      if ele.local_complextype 
    66         dump_complextypedef(ele.name, ele.local_complextype, qualified) 
     66        dump_complextypedef(ele.name, ele.local_complextype, nil, qualified) 
    6767      elsif ele.local_simpletype 
    68         dump_simpletypedef(ele.name, ele.local_simpletype, qualified) 
     68        dump_simpletypedef(ele.name, ele.local_simpletype, nil, qualified) 
     69      elsif ele.type 
     70        if typedef = @complextypes[ele.type] 
     71          dump_complextypedef(ele.type, typedef, ele.name, qualified) 
     72        elsif typedef = @simpletypes[ele.type] 
     73          dump_simpletypedef(ele.type, typedef, ele.name, qualified) 
     74        else 
     75          nil 
     76        end 
    6977      else 
    7078        nil 
     
    93101  end 
    94102 
    95   def dump_complextypedef(qname, typedef, qualified = false) 
     103  def dump_complextypedef(qname, typedef, as_element = nil, qualified = false) 
    96104    case typedef.compoundtype 
    97105    when :TYPE_STRUCT, :TYPE_EMPTY 
    98       dump_struct_typemap(qname, typedef, qualified) 
     106      dump_struct_typemap(qname, typedef, as_element, qualified) 
    99107    when :TYPE_ARRAY 
    100108      dump_array_typemap(qname, typedef) 
    101109    when :TYPE_SIMPLE 
    102       dump_simple_typemap(qname, typedef
     110      dump_simple_typemap(qname, typedef, as_element, qualified
    103111    when :TYPE_MAP 
    104112      # mapped as a general Hash 
     
    110118  end 
    111119 
    112   def dump_struct_typemap(qname, typedef, qualified = false) 
     120  def dump_struct_typemap(qname, typedef, as_element = nil, qualified = false) 
    113121    var = {} 
    114122    var[:class] = create_class_name(qname, @modulepath) 
    115     if typedef.name.nil? 
    116       # local complextype of a element 
     123    if as_element 
     124      var[:schema_name] = as_element.name 
     125      var[:schema_ns] = as_element.namespace 
     126    elsif typedef.name.nil? 
    117127      var[:schema_name] = qname.name 
    118     els
    119       # named complextyp
     128      var[:schema_ns] = qname.namespac
     129    els
    120130      var[:schema_type] = qname.name 
    121     end 
    122     var[:schema_ns] = qname.namespace 
     131      var[:schema_ns] = qname.namespace 
     132    end 
    123133    var[:schema_qualified] = qualified.to_s 
    124134 
     
    172182  end 
    173183 
    174   def dump_simple_typemap(qname, type_or_element
     184  def dump_simple_typemap(qname, type_or_element, as_element, qualified
    175185    var = {} 
    176186    var[:class] = create_class_name(qname, @modulepath) 
    177     var[:schema_ns] = qname.namespace 
    178     var[:schema_type] = qname.name 
     187    if as_element 
     188      var[:schema_name] = as_element.name 
     189      var[:schema_ns] = as_element.namespace 
     190    elsif type_or_element.name.nil? 
     191      var[:schema_name] = qname.name 
     192      var[:schema_ns] = qname.namespace 
     193    else 
     194      var[:schema_type] = qname.name 
     195      var[:schema_ns] = qname.namespace 
     196    end 
    179197    unless type_or_element.attributes.empty? 
    180198      var[:schema_attribute] = define_attribute(type_or_element.attributes) 
  • trunk/lib/wsdl/soap/mappingRegistryCreatorSupport.rb

    r1788 r1805  
    198198  end 
    199199 
    200   def dump_simpletypedef(qname, simpletype, qualified = false) 
     200  def dump_simpletypedef(qname, simpletype, as_element = nil, qualified = false) 
    201201    if simpletype.restriction 
    202       dump_simpletypedef_restriction(qname, simpletype, qualified) 
     202      dump_simpletypedef_restriction(qname, simpletype, as_element, qualified) 
    203203    elsif simpletype.list 
    204       dump_simpletypedef_list(qname, simpletype, qualified) 
     204      dump_simpletypedef_list(qname, simpletype, as_element, qualified) 
    205205    elsif simpletype.union 
    206       dump_simpletypedef_union(qname, simpletype, qualified) 
     206      dump_simpletypedef_union(qname, simpletype, as_element, qualified) 
    207207    else 
    208208      raise RuntimeError.new("unknown kind of simpletype: #{simpletype}") 
     
    210210  end 
    211211 
    212   def dump_simpletypedef_restriction(qname, typedef, qualified) 
     212  def dump_simpletypedef_restriction(qname, typedef, as_element, qualified) 
    213213    restriction = typedef.restriction 
    214214    if restriction.enumeration.empty? 
     
    218218    var = {} 
    219219    var[:class] = create_class_name(qname, @modulepath) 
    220     var[:schema_ns] = qname.namespace 
    221     if typedef.name.nil? 
     220    if as_element 
    222221      var[:schema_type] = nil 
     222      var[:schema_ns] = as_element.namespace 
     223    elsif typedef.name.nil? 
     224      var[:schema_type] = nil 
     225      var[:schema_ns] = qname.namespace 
    223226    else 
    224227      var[:schema_type] = qname.name 
     228      var[:schema_ns] = qname.namespace 
    225229    end 
    226230    dump_entry(@varname, var) 
    227231  end 
    228232 
    229   def dump_simpletypedef_list(qname, typedef, qualified) 
     233  def dump_simpletypedef_list(qname, typedef, as_element, qualified) 
    230234    nil 
    231235  end 
    232236 
    233   def dump_simpletypedef_union(qname, typedef, qualified) 
     237  def dump_simpletypedef_union(qname, typedef, as_element, qualified) 
    234238    nil 
    235239  end 
  • trunk/test/soap/literalArrayMapping/test_definedarray.rb

    r1794 r1805  
    2323  def test_amazonresponse 
    2424    drv = AWSECommerceServicePortType.new 
     25    drv.wiredump_dev = STDOUT if $DEBUG 
    2526    drv.test_loopback_response << File.read(pathname('amazonresponse.xml')) 
    2627    obj = drv.itemSearch(ItemSearch.new) 
    27     assert_equal(3, obj.items[0].item[0].tracks.size) 
     28    assert_equal(3, obj.items.item.tracks.disc.size) 
    2829  end 
    2930end 
  • trunk/test/wsdl/document/test_rpc.rb

    r1794 r1805  
    191191 
    192192    echo = {'struct1' => {'m_string' => 'mystring1', 'm_datetime' => '2005-03-17T19:47:31+01:00'},  
    193           'struct-2' => {'m_string' => 'mystring2', 'm_datetime' => '2005-03-17T19:47:32+02:00'}} 
     193          'struct_2' => {'m_string' => 'mystring2', 'm_datetime' => '2005-03-17T19:47:32+02:00'}} 
    194194    ret = @client.echo(echo) 
    195195    timeformat = "%Y-%m-%dT%H:%M:%S" 
  • trunk/test/wsdl/qualified/test_unqualified.rb

    r1794 r1805  
    106106    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    107107  <env:Body> 
    108     <n1:login xmlns:n1="urn:lp" 
    109         xsi:type="n1:login"> 
     108    <n1:login xmlns:n1="urn:lp"> 
    110109      <username>NaHi</username> 
    111110      <password>passwd</password> 
  • trunk/test/wsdl/simplecontent/simplecontent.wsdl

    r1742 r1805  
    3333      </complexType> 
    3434 
     35      <element name="PhoneNumberElement" type="tns:PhoneNumber" /> 
    3536      <complexType name="PhoneNumber"> 
    3637        <simpleContent>