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

Changeset 1719

Show
Ignore:
Timestamp:
09/09/06 10:51:37 (2 years ago)
Author:
nahi
Message:

dump xsi:type=... for typed SOAP node for document/literal service as same as for rpc/encoded service. SOAP node which is defined as an element does not include xsi:type (not changed).
You can disable it with Driver#generate_explicit_type = false.
closes #234.

Files:

Legend:

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

    r1672 r1719  
    9494  def decode_epilogue 
    9595  end 
     96 
     97  def encode_qname(attrs, ns, qname) 
     98    unless qname.namespace.nil? 
     99      SOAPGenerator.assign_ns(attrs, ns, qname.namespace) 
     100      ns.name(qname) 
     101    else 
     102      qname.name 
     103    end 
     104  end 
    96105end 
    97106 
  • trunk/lib/soap/encodingstyle/literalHandler.rb

    r1636 r1719  
    3030    attrs = {} 
    3131    name = generator.encode_name(ns, data, attrs) 
    32     data.extraattr.each do |k, v| 
     32    data.extraattr.each do |key, value| 
     33      next if !@generate_explicit_type and key == XSD::AttrTypeName 
    3334      # ToDo: check generator.attributeformdefault here 
    34       if k.is_a?(XSD::QName) 
    35         if k.namespace 
    36           SOAPGenerator.assign_ns(attrs, ns, k.namespace) 
    37           k = ns.name(k) 
    38         else 
    39           k = k.name 
    40         end 
    41       end 
    42       attrs[k] = v 
     35      if key.is_a?(XSD::QName) 
     36        key = encode_qname(attrs, ns, key) 
     37      end 
     38      if value.is_a?(XSD::QName) 
     39        value = encode_qname(attrs, ns, value) 
     40      end 
     41      attrs[key] = value 
    4342    end 
    4443    case data 
  • trunk/lib/soap/encodingstyle/soapHandler.rb

    r1682 r1719  
    292292 
    293293    data.extraattr.each do |key, value| 
    294       SOAPGenerator.assign_ns(attrs, ns, key.namespace) 
    295       attrs[ns.name(key)] = encode_attr_value(generator, ns, key, value) 
     294      if key.is_a?(XSD::QName) 
     295        keytag = encode_qname(attrs, ns, key) 
     296      end 
     297      attrs[keytag] = encode_attr_value(generator, ns, key, value) 
    296298    end 
    297299    if data.id 
     
    302304 
    303305  def encode_attr_value(generator, ns, qname, value) 
    304     if value.is_a?(SOAPType) 
     306    case value 
     307    when SOAPType 
    305308      ref = SOAPReference.new(value) 
    306309      generator.add_reftarget(qname.name, value) 
    307310      ref.refidstr 
     311    when XSD::QName 
     312      encode_qname(attrs, ns, value) 
    308313    else 
    309314      value.to_s 
  • trunk/lib/soap/mapping/mapping.rb

    r1697 r1719  
    398398 
    399399  class SchemaDefinition 
    400     attr_reader :elements 
    401  
    402     def initialize(*arg) 
    403       super 
     400    attr_reader :ns, :type, :elements 
     401 
     402    def initialize(ns, type) 
     403      @ns = ns 
     404      @type = type 
    404405      @elements = [] 
    405406      @choice = false 
     
    433434    def parse_schema_element_definition(klass, schema_element) 
    434435      schema_ns = schema_ns_definition(klass) 
    435       definition = SchemaDefinition.new 
     436      schema_type = schema_type_definition(klass) 
     437      definition = SchemaDefinition.new(schema_ns, schema_type) 
    436438      if schema_element[0] == :choice 
    437439        schema_element.shift 
  • trunk/lib/soap/mapping/wsdlliteralregistry.rb

    r1712 r1719  
    281281      (obj.class.class_variables.include?('@@schema_qualified') and 
    282282      obj.class.class_eval('@@schema_qualified')) 
    283     add_elements2soap(obj, ele) 
    284     ele 
    285   end 
    286  
    287   def mappingobj2soap(obj, qname) 
    288     ele = SOAPElement.new(qname) 
    289     obj.__xmlele.each do |key, value| 
    290       if value.is_a?(::Array) 
    291         value.each do |item| 
    292           ele.add(obj2soap(item, key)) 
    293         end 
    294       else 
    295         ele.add(obj2soap(value, key)) 
    296       end 
    297     end 
    298     ele 
    299   end 
    300  
    301   def add_elements2soap(obj, ele) 
    302283    definition = schema_element_definition(obj.class) 
     284    ele.extraattr[XSD::AttrTypeName] = 
     285      XSD::QName.new(definition.ns, definition.type) 
    303286    any = nil 
    304287    if definition.have_any? 
     
    326309      end 
    327310    end 
     311    ele 
     312  end 
     313 
     314  def mappingobj2soap(obj, qname) 
     315    ele = SOAPElement.new(qname) 
     316    obj.__xmlele.each do |key, value| 
     317      if value.is_a?(::Array) 
     318        value.each do |item| 
     319          ele.add(obj2soap(item, key)) 
     320        end 
     321      else 
     322        ele.add(obj2soap(value, key)) 
     323      end 
     324    end 
     325    ele 
    328326  end 
    329327   
     
    332330    if attributes 
    333331      attributes.each do |qname, param| 
    334         attr = obj.__send__( 
     332        at = obj.__send__( 
    335333          XSD::CodeGen::GenSupport.safemethodname('xmlattr_' + qname.name)) 
    336         ele.extraattr[qname] = attr 
     334        ele.extraattr[qname] = at 
    337335      end 
    338336    elsif obj.respond_to?(:__xmlattr) 
  • trunk/lib/wsdl/soap/classDefCreator.rb

    r1693 r1719  
    3838    result = "require 'xsd/qname'\n" 
    3939    if type 
    40       result = dump_classdef(type.name, type) 
     40      result << dump_classdef(type.name, type) 
    4141    else 
    4242      str = dump_element 
     
    6969    @elements.collect { |ele| 
    7070      if ele.local_complextype 
    71         qualified = ele.elementform == 'qualified' 
     71        qualified = (ele.elementform == 'qualified') 
    7272        dump_complextypedef(ele.name, ele.local_complextype, qualified) 
    7373      elsif ele.local_simpletype 
     
    101101  def dump_simpletypedef(qname, simpletype) 
    102102    if simpletype.restriction 
    103       dump_simpletypedef_restriction(qname, simpletype.restriction
     103      dump_simpletypedef_restriction(qname, simpletype
    104104    elsif simpletype.list 
    105       dump_simpletypedef_list(qname, simpletype.list
     105      dump_simpletypedef_list(qname, simpletype
    106106    else 
    107107      raise RuntimeError.new("unknown kind of simpletype: #{simpletype}") 
     
    109109  end 
    110110 
    111   def dump_simpletypedef_restriction(qname, restriction) 
     111  def dump_simpletypedef_restriction(qname, typedef) 
     112    restriction = typedef.restriction 
    112113    if restriction.enumeration.empty? 
    113114      # not supported.  minlength? 
     
    117118    c = ClassDef.new(classname, '::String') 
    118119    c.comment = "#{qname}" 
    119     c.def_classvar('schema_type', ndq(qname.name)) 
     120    if typedef.name.nil? 
     121      # local simpletype of a element 
     122      c.def_classvar('schema_type', ndq(nil)) 
     123    else 
     124      # named simpletype 
     125      c.def_classvar('schema_type', ndq(qname.name)) 
     126    end 
    120127    c.def_classvar('schema_ns', ndq(qname.namespace)) 
    121128    define_classenum_restriction(c, classname, restriction.enumeration) 
     
    123130  end 
    124131 
    125   def dump_simpletypedef_list(qname, list) 
     132  def dump_simpletypedef_list(qname, typedef) 
     133    list = typedef.list 
    126134    c = ClassDef.new(create_class_name(qname), '::Array') 
    127135    c.comment = "#{qname}" 
     
    204212    end 
    205213    c.comment = "#{qname}" 
    206     c.def_classvar('schema_type', ndq(qname.name)) 
     214    if typedef.name.nil? 
     215      # local complextype of a element 
     216      c.def_classvar('schema_type', ndq(nil)) 
     217    else 
     218      # named complextype 
     219      c.def_classvar('schema_type', ndq(qname.name)) 
     220    end 
    207221    c.def_classvar('schema_ns', ndq(qname.namespace)) 
    208222    c.def_classvar('schema_qualified', dq('true')) if qualified 
  • trunk/test/wsdl/qualified/test_unqualified.rb

    r1653 r1719  
    8686  end 
    8787 
    88   LOGIN_REQUEST_QUALIFIED
     88  LOGIN_REQUEST_QUALIFIED_UNTYPED
    8989%q[<?xml version="1.0" encoding="utf-8" ?> 
    9090<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     
    9393  <env:Body> 
    9494    <n1:login xmlns:n1="urn:lp"> 
     95      <username>NaHi</username> 
     96      <password>passwd</password> 
     97      <timezone>JST</timezone> 
     98    </n1:login> 
     99  </env:Body> 
     100</env:Envelope>] 
     101 
     102  LOGIN_REQUEST_QUALIFIED_TYPED = 
     103%q[<?xml version="1.0" encoding="utf-8" ?> 
     104<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     105    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
     106    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     107  <env:Body> 
     108    <n1:login xmlns:n1="urn:lp" 
     109        xsi:type="n1:login"> 
    95110      <username>NaHi</username> 
    96111      <password>passwd</password> 
     
    114129    @client.login(:timezone => 'JST', :password => 'passwd', 
    115130      :username => 'NaHi') 
    116     assert_equal(LOGIN_REQUEST_QUALIFIED, parse_requestxml(str)) 
     131    # untyped because of passing a Hash 
     132    assert_equal(LOGIN_REQUEST_QUALIFIED_UNTYPED, parse_requestxml(str)) 
    117133  end 
    118134 
     
    130146    @client.wiredump_dev = str = '' 
    131147    @client.login(Login.new('NaHi', 'passwd', 'JST')) 
    132     assert_equal(LOGIN_REQUEST_QUALIFIED, parse_requestxml(str)) 
     148    assert_equal(LOGIN_REQUEST_QUALIFIED_TYPED, parse_requestxml(str)) 
    133149  end 
    134150 
  • trunk/test/wsdl/ref/expectedProduct.rb

    r1699 r1719  
    33# {urn:ref}Rating 
    44class Rating < ::String 
    5   @@schema_type = "Rating" 
     5  @@schema_type = nil 
    66  @@schema_ns = "urn:ref" 
    77 
     
    1313# {urn:ref}Product-Bag 
    1414class ProductBag 
    15   @@schema_type = "Product-Bag" 
     15  @@schema_type = nil 
    1616  @@schema_ns = "urn:ref" 
    1717  @@schema_attribute = { 
     
    8989# {urn:ref}yesno 
    9090class Yesno < ::String 
    91   @@schema_type = "yesno" 
     91  @@schema_type = nil 
    9292  @@schema_ns = "urn:ref" 
    9393 
  • trunk/test/wsdl/rpc/test_rpc_lit.rb

    r1713 r1719  
    165165  ECHO_STRING_ARRAY_REQUEST = 
    166166%q[<?xml version="1.0" encoding="utf-8" ?> 
    167 <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    168     xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
     167<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
    169168    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    170169  <env:Body> 
     
    197196    drv = SoapTestPortTypeRpcLit.new("http://localhost:#{Port}/") 
    198197    drv.wiredump_dev = str = '' 
     198    drv.generate_explicit_type = false 
    199199    # response contains only 1 part. 
    200200    result = drv.echoStringArray(ArrayOfstring["a", "b", "c"])[0] 
     
    206206  ECHO_STRING_ARRAY_INLINE_REQUEST = 
    207207%q[<?xml version="1.0" encoding="utf-8" ?> 
    208 <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    209     xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
     208<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
    210209    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    211210  <env:Body> 
     
    238237    drv = SoapTestPortTypeRpcLit.new("http://localhost:#{Port}/") 
    239238    drv.wiredump_dev = str = '' 
     239    drv.generate_explicit_type = false 
    240240    # response contains only 1 part. 
    241241    result = drv.echoStringArrayInline(ArrayOfstringInline["a", "b", "c"])[0] 
     
    247247  ECHO_NESTED_STRUCT_REQUEST = 
    248248%q[<?xml version="1.0" encoding="utf-8" ?> 
    249 <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    250     xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
     249<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
    251250    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    252251  <env:Body> 
     
    291290    @client.endpoint_url = "http://localhost:#{Port}/" 
    292291    @client.wiredump_dev = str = '' 
     292    @client.generate_explicit_type = false 
    293293    # response contains only 1 part. 
    294294    result = @client.echoNestedStruct(SOAPStructStruct.new("str", 1, 1.0, SOAPStruct.new("str", 1, 1.0)))[0] 
     
    306306    drv = SoapTestPortTypeRpcLit.new("http://localhost:#{Port}/") 
    307307    drv.wiredump_dev = str = '' 
     308    drv.generate_explicit_type = false 
    308309    # response contains only 1 part. 
    309310    result = drv.echoNestedStruct(SOAPStructStruct.new("str", 1, 1.0, SOAPStruct.new("str", 1, 1.0)))[0] 
     
    320321  ECHO_STRUCT_ARRAY_REQUEST = 
    321322%q[<?xml version="1.0" encoding="utf-8" ?> 
    322 <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    323     xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
     323<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
    324324    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    325325  <env:Body> 
     
    368368    @client.endpoint_url = "http://localhost:#{Port}/" 
    369369    @client.wiredump_dev = str = '' 
     370    @client.generate_explicit_type = false 
    370371    # response contains only 1 part. 
    371372    e = SOAPStruct.new("str", 2, 2.1) 
     
    378379    drv = SoapTestPortTypeRpcLit.new("http://localhost:#{Port}/") 
    379380    drv.wiredump_dev = str = '' 
     381    drv.generate_explicit_type = false 
    380382    # response contains only 1 part. 
    381383    e = SOAPStruct.new("str", 2, 2.1)