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

Changeset 1580

Show
Ignore:
Timestamp:
07/18/05 14:54:19 (3 years ago)
Author:
nahi
Message:

local element qualify/unqualify control. handles elementFormDefault and form in WSDL. closes #119.
attributeFormDefault should be supported soon.

Files:

Legend:

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

    r1540 r1580  
    530530    @extraattr = {} 
    531531 
    532     @qualified = false 
     532    @qualified = nil 
    533533 
    534534    @array = [] 
  • trunk/lib/soap/element.rb

    r1570 r1580  
    8484    name = ns.name(@elename) 
    8585    generator.encode_tag(name, attrs) 
    86     yield(self.faultcode, false
    87     yield(self.faultstring, false
    88     yield(self.faultactor, false
    89     yield(self.detail, false) if self.detail 
     86    yield(self.faultcode
     87    yield(self.faultstring
     88    yield(self.faultactor
     89    yield(self.detail) if self.detail 
    9090    generator.encode_tag_end(name, true) 
    9191  end 
     
    116116    generator.encode_tag(name, attrs) 
    117117    if @is_fault 
    118       yield(@data, true
     118      yield(@data
    119119    else 
    120120      @data.each do |data| 
    121         yield(data, true
     121        yield(data
    122122      end 
    123123    end 
     
    172172    end 
    173173    @element.encodingstyle = @encodingstyle if !@element.encodingstyle 
    174     yield(@element, true
     174    yield(@element
    175175  end 
    176176end 
     
    190190    generator.encode_tag(name, attrs) 
    191191    @data.each do |data| 
    192       yield(data, true
     192      yield(data
    193193    end 
    194194    generator.encode_tag_end(name, true) 
     
    244244    generator.encode_tag(name, attrs) 
    245245 
    246     yield(@header, true) if @header and @header.length > 0 
    247     yield(@body, true
     246    yield(@header) if @header and @header.length > 0 
     247    yield(@body
    248248 
    249249    generator.encode_tag_end(name, true) 
  • trunk/lib/soap/encodingstyle/aspDotNetHandler.rb

    r1520 r1580  
    2828  ## encode interface. 
    2929  # 
    30   def encode_data(generator, ns, qualified, data, parent) 
     30  def encode_data(generator, ns, data, parent) 
    3131    attrs = {} 
    32     name = if qualified and data.elename.namespace 
    33         SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace, '') 
    34         ns.name(data.elename) 
    35       else 
    36         data.elename.name 
    37       end 
    38  
     32    name = generator.encode_name(ns, data, attrs) 
    3933    case data 
    4034    when SOAPRawString 
     
    4337    when XSD::XSDString 
    4438      generator.encode_tag(name, attrs) 
    45       generator.encode_string(@charset ? XSD::Charset.encoding_to_xml(data.to_s, @charset) : data.to_s) 
     39      generator.encode_string(@charset ? 
     40        XSD::Charset.encoding_to_xml(data.to_s, @charset) : data.to_s) 
    4641    when XSD::XSDAnySimpleType 
    4742      generator.encode_tag(name, attrs) 
     
    5348          value.elename.namespace = data.elename.namespace  
    5449        end 
    55         yield(value, true
     50        generator.encode_child(ns, value, data
    5651      end 
    5752    when SOAPArray 
     
    5954      data.traverse do |child, *rank| 
    6055        data.position = nil 
    61         yield(child, true
     56        generator.encode_child(ns, child, data
    6257      end 
    6358    else 
     
    6762  end 
    6863 
    69   def encode_data_end(generator, ns, qualified, data, parent) 
    70     name = if qualified and data.elename.namespace 
    71         ns.name(data.elename) 
    72       else 
    73         data.elename.name 
    74       end 
     64  def encode_data_end(generator, ns, data, parent) 
     65    name = generator.encode_name_end(ns, data) 
    7566    cr = data.is_a?(SOAPCompoundtype) 
    7667    generator.encode_tag_end(name, cr) 
  • trunk/lib/soap/encodingstyle/handler.rb

    r1520 r1580  
    5959  # 
    6060  # Returns a XML instance as a string. 
    61   def encode_data(generator, ns, qualified, data, parent) 
    62     raise NotImplementError.new('Method encode_data must be defined in derived class.') 
     61  def encode_data(generator, ns, data, parent) 
     62    raise NotImplementError 
    6363  end 
    6464 
    65   def encode_data_end(generator, ns, qualified, data, parent) 
    66     raise NotImplementError.new('Method encode_data must be defined in derived class.') 
     65  def encode_data_end(generator, ns, data, parent) 
     66    raise NotImplementError 
    6767  end 
    6868 
  • trunk/lib/soap/encodingstyle/literalHandler.rb

    r1524 r1580  
    2727  ## encode interface. 
    2828  # 
    29   def encode_data(generator, ns, qualified, data, parent) 
     29  def encode_data(generator, ns, data, parent) 
    3030    attrs = {} 
    31     name = if qualified and data.elename.namespace 
    32         SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace, '') 
    33         ns.name(data.elename) 
    34       else 
    35         data.elename.name 
    36       end 
     31    name = generator.encode_name(ns, data, attrs) 
    3732    data.extraattr.each do |k, v| 
     33      # ToDo: check generator.attributeformdefault here 
    3834      if k.is_a?(XSD::QName) 
    3935        if k.namespace 
     
    4642      attrs[k] = v 
    4743    end 
    48  
    4944    case data 
    5045    when SOAPRawString 
     
    6560          value.elename.namespace = data.elename.namespace 
    6661        end 
    67         yield(value, true
     62        generator.encode_child(ns, value, data
    6863      end 
    6964    when SOAPArray 
     
    7166      data.traverse do |child, *rank| 
    7267        data.position = nil 
    73         yield(child, true
     68        generator.encode_child(ns, child, data
    7469      end 
    7570    when SOAPElement 
     
    7772      generator.encode_rawstring(data.text) if data.text 
    7873      data.each do |key, value| 
    79        yield(value, qualified
     74        generator.encode_child(ns, value, data
    8075      end 
    8176    else 
     
    8580  end 
    8681 
    87   def encode_data_end(generator, ns, qualified, data, parent) 
    88     name = if qualified and data.elename.namespace 
    89         ns.name(data.elename) 
    90       else 
    91         data.elename.name 
    92       end 
     82  def encode_data_end(generator, ns, data, parent) 
     83    name = generator.encode_name_end(ns, data) 
    9384    cr = (data.is_a?(SOAPCompoundtype) or 
    9485      (data.is_a?(SOAPElement) and !data.text)) 
  • trunk/lib/soap/encodingstyle/soapHandler.rb

    r1538 r1580  
    3030  ## encode interface. 
    3131  # 
    32   def encode_data(generator, ns, qualified, data, parent) 
     32  def encode_data(generator, ns, data, parent) 
    3333    attrs = encode_attrs(generator, ns, data, parent) 
    34  
    3534    if parent && parent.is_a?(SOAPArray) && parent.position 
    3635      attrs[ns.name(AttrPositionName)] = "[#{parent.position.join(',')}]" 
    3736    end 
    38  
    39     name = nil 
    40     if qualified and data.elename.namespace 
    41       SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace) 
    42       name = ns.name(data.elename) 
    43     else 
    44       name = data.elename.name 
    45     end 
    46  
     37    name = generator.encode_name(ns, data, attrs) 
    4738    case data 
    4839    when SOAPReference 
     
    6657      generator.encode_tag(name, attrs) 
    6758      data.each do |key, value| 
    68        yield(value, false
     59        generator.encode_child(ns, value, data
    6960      end 
    7061    when SOAPArray 
     
    7263      data.traverse do |child, *rank| 
    7364        data.position = data.sparse ? rank : nil 
    74        yield(child, false
     65        generator.encode_child(ns, child, data
    7566      end 
    7667    else 
     
    8071  end 
    8172 
    82   def encode_data_end(generator, ns, qualified, data, parent) 
    83     name = if qualified and data.elename.namespace 
    84         ns.name(data.elename) 
    85       else 
    86         data.elename.name 
    87       end 
     73  def encode_data_end(generator, ns, data, parent) 
     74    name = generator.encode_name_end(ns, data) 
    8875    cr = data.is_a?(SOAPCompoundtype) 
    8976    generator.encode_tag_end(name, cr) 
  • trunk/lib/soap/generator.rb

    r1520 r1580  
    11# SOAP4R - SOAP XML Instance Generator library. 
    2 # Copyright (C) 2001, 2003  NAKAMURA, Hiroshi <nahi@ruby-lang.org>. 
     2# Copyright (C) 2001, 2003, 2005  NAKAMURA, Hiroshi <nahi@ruby-lang.org>. 
    33 
    44# This program is copyrighted free software by NAKAMURA, Hiroshi.  You can 
     
    3737    @generate_explicit_type = 
    3838      opt.key?(:generate_explicit_type) ? opt[:generate_explicit_type] : true 
     39    @elementformdefault = opt[:elementformdefault] 
     40    @attributeformdefault = opt[:attributeformdefault] 
    3941    @buf = @indent = @curr = nil 
    4042  end 
     
    5153    ns = XSD::NS.new 
    5254    @buf << xmldecl 
    53     encode_data(ns, true, obj, nil) 
     55    encode_data(ns, obj, nil) 
    5456 
    5557    @handlers.each do |uri, handler| 
     
    6163  end 
    6264 
    63   def encode_data(ns, qualified, obj, parent) 
     65  def encode_data(ns, obj, parent) 
    6466    if obj.is_a?(SOAPEnvelopeElement) 
    65       encode_element(ns, qualified, obj, parent) 
     67      encode_element(ns, obj, parent) 
    6668      return 
    6769    end 
    68  
    6970    if @reftarget && !obj.precedents.empty? 
    7071      add_reftarget(obj.elename.name, obj) 
     
    7677      obj = ref 
    7778    end 
    78  
    7979    encodingstyle = obj.encodingstyle 
    8080    # Children's encodingstyle is derived from its parent. 
    8181    encodingstyle ||= parent.encodingstyle if parent 
    8282    obj.encodingstyle = encodingstyle 
    83  
    8483    handler = find_handler(encodingstyle || @default_encodingstyle) 
    8584    unless handler 
    8685      raise FormatEncodeError.new("Unknown encodingStyle: #{ encodingstyle }.") 
    8786    end 
    88  
    8987    if !obj.elename.name 
    9088      raise FormatEncodeError.new("Element name not defined: #{ obj }.") 
    9189    end 
    92  
    93     handler.encode_data(self, ns, qualified, obj, parent) do |child, nextq| 
    94       indent_backup, @indent = @indent, @indent + '  ' 
    95       encode_data(ns.clone_ns, nextq, child, obj) 
    96       @indent = indent_backup 
    97     end 
    98     handler.encode_data_end(self, ns, qualified, obj, parent) 
     90    handler.encode_data(self, ns, obj, parent) 
     91    handler.encode_data_end(self, ns, obj, parent) 
    9992  end 
    10093 
     
    10699  end 
    107100 
    108   def encode_element(ns, qualified, obj, parent) 
     101  def encode_child(ns, child, parent) 
     102    indent_backup, @indent = @indent, @indent + '  ' 
     103    encode_data(ns.clone_ns, child, parent) 
     104    @indent = indent_backup 
     105  end 
     106 
     107  def encode_element(ns, obj, parent) 
    109108    attrs = {} 
    110109    if obj.is_a?(SOAPBody) 
    111110      @reftarget = obj 
    112       obj.encode(self, ns, attrs) do |child, nextq
     111      obj.encode(self, ns, attrs) do |child
    113112        indent_backup, @indent = @indent, @indent + '  ' 
    114         encode_data(ns.clone_ns, nextq, child, obj) 
     113        encode_data(ns.clone_ns, child, obj) 
    115114        @indent = indent_backup 
    116115      end 
     
    125124        end 
    126125      end 
    127       obj.encode(self, ns, attrs) do |child, nextq
     126      obj.encode(self, ns, attrs) do |child
    128127        indent_backup, @indent = @indent, @indent + '  ' 
    129         encode_data(ns.clone_ns, nextq, child, obj) 
     128        encode_data(ns.clone_ns, child, obj) 
    130129        @indent = indent_backup 
    131130      end 
     131    end 
     132  end 
     133 
     134  def encode_name(ns, data, attrs) 
     135    if element_local?(data) 
     136      data.elename.name 
     137    else 
     138      if element_qualified?(data) 
     139        SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace, '') 
     140      else 
     141        SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace) 
     142      end 
     143      ns.name(data.elename) 
     144    end 
     145  end 
     146 
     147  def encode_name_end(ns, data) 
     148    if element_local?(data) 
     149      data.elename.name 
     150    else 
     151      ns.name(data.elename) 
    132152    end 
    133153  end 
     
    173193  end 
    174194 
     195  def element_local?(element) 
     196    element.elename.namespace.nil? 
     197  end 
     198 
     199  def element_qualified?(element) 
     200    if element.respond_to?(:qualified) 
     201      if element.qualified.nil? 
     202        @elementformdefault 
     203      else 
     204        element.qualified 
     205      end 
     206    else 
     207      @elementformdefault 
     208    end 
     209  end 
     210 
    175211  def self.assign_ns(attrs, ns, namespace, tag = nil) 
    176     if namespace and !ns.assigned?(namespace) 
     212    if namespace.nil? 
     213      raise FormatEncodeError.new("empty namespace") 
     214    end 
     215    unless ns.assigned?(namespace) 
    177216      tag = ns.assign(namespace, tag) 
    178217      if tag == '' 
  • trunk/lib/soap/mapping/mapping.rb

    r1555 r1580  
    304304  def self.schema_element_definition(klass) 
    305305    return nil unless klass.class_variables.include?('@@schema_element') 
    306     elements = {} 
     306    elements = [] 
    307307    as_array = [] 
    308308    klass.class_eval('@@schema_element').each do |varname, definition| 
     
    312312        as_array << class_name 
    313313      end 
    314       elements[name ? name.name : varname] = class_name 
     314      elements << [name ? name.name : varname, class_name] 
    315315    end 
    316316    [elements, as_array] 
  • trunk/lib/soap/mapping/wsdlencodedregistry.rb

    r1572 r1580  
    235235    vars = {} 
    236236    node.each do |name, value| 
    237       if class_name = elements[name] 
     237      item = elements.find { |k, v| k == name } 
     238      if item 
     239        class_name = item[1] 
    238240        if klass = Mapping.class_from_name(class_name) 
    239241          # klass must be a SOAPBasetype or a class 
  • trunk/lib/soap/mapping/wsdlliteralregistry.rb

    r1572 r1580  
    3939      soap_obj = obj2elesoap(obj, ele) 
    4040    elsif type = @definedtypes[qname] 
    41       soap_obj = obj2typesoap(obj, type
     41      soap_obj = obj2typesoap(obj, type, true
    4242    else 
    4343      soap_obj = any2soap(obj, qname) 
     
    8181  def obj2elesoap(obj, ele) 
    8282    o = nil 
     83    qualified = (ele.elementform == 'qualified') 
    8384    if ele.type 
    8485      if type = @definedtypes[ele.type] 
    85         o = obj2typesoap(obj, type
     86        o = obj2typesoap(obj, type, qualified
    8687      elsif type = TypeMap[ele.type] 
    8788        o = base2soap(obj, type) 
     
    8990        raise MappingError.new("cannot find type #{ele.type}") 
    9091      end 
    91       o.elename = ele.name 
    9292    elsif ele.local_complextype 
    93       o = obj2typesoap(obj, ele.local_complextype) 
    94       o.elename = ele.name 
     93      o = obj2typesoap(obj, ele.local_complextype, qualified) 
    9594      add_attributes2soap(obj, o) 
    9695    elsif ele.local_simpletype 
    97       o = obj2typesoap(obj, ele.local_simpletype) 
    98       o.elename = ele.name 
     96      o = obj2typesoap(obj, ele.local_simpletype, qualified) 
    9997    else 
    10098      raise MappingError.new('illegal schema?') 
    10199    end 
     100    o.elename = ele.name 
    102101    o 
    103102  end 
    104103 
    105   def obj2typesoap(obj, type
     104  def obj2typesoap(obj, type, qualified
    106105    if type.is_a?(::WSDL::XMLSchema::SimpleType) 
    107106      simpleobj2soap(obj, type) 
    108107    else 
    109       complexobj2soap(obj, type
     108      complexobj2soap(obj, type, qualified
    110109    end 
    111110  end 
     
    118117  end 
    119118 
    120   def complexobj2soap(obj, type
     119  def complexobj2soap(obj, type, qualified
    121120    o = SOAPElement.new(type.name) 
     121    o.qualified = qualified 
    122122    type.each_element do |child_ele| 
    123123      child = Mapping.get_attribute(obj, child_ele.name.name) 
     
    126126          # ToDo: test 
    127127          # add empty element 
    128           o.add(obj2elesoap(nil)) 
     128          child_soap = obj2elesoap(nil, child_ele) 
     129          child_soap.elename.namespace = nil unless qualified 
     130          o.add(child_soap) 
    129131        elsif Integer(child_ele.minoccurs) == 0 
    130132          # nothing to do 
     
    134136      elsif child_ele.map_as_array? 
    135137        child.each do |item| 
    136           o.add(obj2elesoap(item, child_ele)) 
     138          child_soap = obj2elesoap(item, child_ele) 
     139          child_soap.elename.namespace = nil unless qualified 
     140          o.add(child_soap) 
    137141        end 
    138142      else 
    139         o.add(obj2elesoap(child, child_ele)) 
     143        child_soap = obj2elesoap(child, child_ele) 
     144        child_soap.elename.namespace = nil unless qualified 
     145        o.add(child_soap) 
    140146      end 
    141147    end 
     
    175181  def stubobj2soap(obj, qname) 
    176182    ele = SOAPElement.new(qname) 
     183    ele.qualified = 
     184      (obj.class.class_variables.include?('@@schema_qualified') and 
     185      obj.class.class_eval('@@schema_qualified')) 
    177186    add_elements2soap(obj, ele) 
    178187    add_attributes2soap(obj, ele) 
     
    282291    vars = {} 
    283292    node.each do |name, value| 
    284       if class_name = elements[name] 
     293      item = elements.find { |k, v| k == name } 
     294      if item 
     295        class_name = item[1] 
    285296        if klass = Mapping.class_from_name(class_name) 
    286297          # klass must be a SOAPBasetype or a class 
  • trunk/lib/soap/rpc/proxy.rb

    r1571 r1580  
    9393    opt[:request_use] ||= :literal 
    9494    opt[:response_use] ||= :literal 
     95    # default values of these values are unqualified in XML Schema. 
     96    # set true for backward compatibility. 
     97    unless opt.key?(:elementformdefault) 
     98      opt[:elementformdefault] = true 
     99    end 
     100    unless opt.key?(:attributeformdefault) 
     101      opt[:attributeformdefault] = true 
     102    end 
    95103    @operation[name] = Operation.new(soapaction, param_def, opt) 
    96104  end 
     
    114122      op_info.request_body(params, @mapping_registry, @literal_mapping_registry) 
    115123    ) 
    116     reqopt = create_options({ 
     124    reqopt = create_options( 
    117125      :soapaction => op_info.soapaction || @soapaction, 
    118126      :envelopenamespace => @options["soap.envelope.requestnamespace"], 
    119       :default_encodingstyle => op_info.request_default_encodingstyle}) 
    120     resopt = create_options({ 
     127      :default_encodingstyle => op_info.request_default_encodingstyle, 
     128      :elementformdefault => op_info.elementformdefault, 
     129      :attributeformdefault => op_info.attributeformdefault 
     130    ) 
     131    resopt = create_options( 
    121132      :envelopenamespace => @options["soap.envelope.responsenamespace"], 
    122       :default_encodingstyle => op_info.response_default_encodingstyle}) 
     133      :default_encodingstyle => op_info.response_default_encodingstyle, 
     134      :elementformdefault => op_info.elementformdefault, 
     135      :attributeformdefault => op_info.attributeformdefault 
     136    ) 
    123137    env = route(req_header, req_body, reqopt, resopt) 
    124138    raise EmptyResponseError unless env 
     
    247261    attr_reader :request_use 
    248262    attr_reader :response_use 
     263    attr_reader :elementformdefault 
     264    attr_reader :attributeformdefault 
    249265 
    250266    def initialize(soapaction, param_def, opt) 
     
    254270      @request_use = opt[:request_use] 
    255271      @response_use = opt[:response_use] 
     272      # set nil(unqualified) by default 
     273      @elementformdefault = opt[:elementformdefault] 
     274      @attributeformdefault = opt[:attributeformdefault] 
    256275      check_style(@request_style) 
    257276      check_style(@response_style) 
     
    267286      else 
    268287        @doc_request_qnames = [] 
     288        @doc_request_qualified = [] 
    269289        @doc_response_qnames = [] 
    270         param_def.each do |inout, paramname, typeinfo| 
     290        @doc_response_qualified = [] 
     291        param_def.each do |inout, paramname, typeinfo, eleinfo| 
    271292          klass_not_used, nsdef, namedef = typeinfo 
     293          qualified = eleinfo 
    272294          if namedef.nil? 
    273295            raise MethodDefinitionError.new("qname must be given") 
     
    276298          when SOAPMethod::IN 
    277299            @doc_request_qnames << XSD::QName.new(nsdef, namedef) 
     300            @doc_request_qualified << qualified 
    278301          when SOAPMethod::OUT 
    279302            @doc_response_qnames << XSD::QName.new(nsdef, namedef) 
     303            @doc_response_qualified << qualified 
    280304          else 
    281305            raise MethodDefinitionError.new( 
     
    374398        ele = Mapping.obj2soap(values[idx], mapping_registry) 
    375399        ele.elename = @doc_request_qnames[idx] 
     400        if ele.respond_to?(:qualified) 
     401          ele.qualified = @doc_request_qualified[idx] 
     402        end 
    376403        ele 
    377404      } 
     
    383410          @doc_request_qnames[idx]) 
    384411        ele.encodingstyle = LiteralNamespace 
     412        if ele.respond_to?(:qualified) 
     413          ele.qualified = @doc_request_qualified[idx] 
     414        end 
    385415        ele 
    386416      } 
  • trunk/lib/soap/streamHandler.rb

    r1552 r1580  
    162162    @wiredump_dev << "Wire dump:\n\n" if @wiredump_dev 
    163163    begin 
    164       res = @client.post(endpoint_url, send_string, extra) 
     164      res = @client.post_content(endpoint_url, send_string, extra) 
    165165    rescue 
    166166      @client.reset(endpoint_url) 
  • trunk/lib/soap/wsdlDriver.rb

    r1574 r1580  
    100100      name = XSD::CodeGen::GenSupport.safemethodname(orgname) 
    101101      param_def = create_param_def(op_bind) 
    102       opt = {} 
    103       opt[:request_style] = opt[:response_style] = op_bind.soapoperation_style 
    104       opt[:request_use] = op_bind.input.soapbody_use 
    105       opt[:response_use] = op_bind.output.soapbody_use 
     102      opt = { 
     103        :request_style => op_bind.soapoperation_style, 
     104        :response_style => op_bind.soapoperation_style, 
     105        :request_use => op_bind.input.soapbody_use, 
     106        :response_use => op_bind.output.soapbody_use, 
     107        :elementformdefault => false, 
     108        :attributeformdefault => false 
     109      } 
    106110      if op_bind.soapoperation_style == :rpc 
    107111        drv.add_rpc_operation(op_name, soapaction, name, param_def, opt) 
     
    130134    # the first element of typedef in param_def is a String like 
    131135    # "::SOAP::SOAPStruct".  turn this String to a class. 
    132     param_def.collect { |io, typedef, name
     136    param_def.collect { |io, name, typedef
    133137      typedef[0] = Mapping.class_from_name(typedef[0]) 
    134138      [io, name, typedef] 
  • trunk/lib/wsdl/soap/classDefCreator.rb

    r1538 r1580  
    5858    @elements.collect { |ele| 
    5959      if ele.local_complextype 
    60         dump_classdef(ele.name, ele.local_complextype) 
     60        dump_classdef(ele.name, ele.local_complextype, 
     61          ele.elementform == 'qualified') 
    6162      elsif ele.local_simpletype 
    6263        dump_simpletypedef(ele.name, ele.local_simpletype) 
     
    118119  end 
    119120 
    120   def dump_classdef(qname, typedef
     121  def dump_classdef(qname, typedef, qualified = false
    121122    if @faulttypes and @faulttypes.index(qname) 
    122123      c = XSD::CodeGen::ClassDef.new(create_class_name(qname), 
     
    128129    c.def_classvar('schema_type', ndq(qname.name)) 
    129130    c.def_classvar('schema_ns', ndq(qname.namespace)) 
     131    c.def_classvar('schema_qualified', dq('true')) if qualified 
    130132    schema_element = [] 
    131133    init_lines = '' 
  • trunk/lib/wsdl/soap/methodDefCreator.rb

    r1574 r1580  
    4747    result = operation.inputparts.collect { |part| 
    4848      collect_type(part.type) 
    49       param_set(::SOAP::RPC::SOAPMethod::IN, rpcdefinedtype(part), part.name
     49      param_set(::SOAP::RPC::SOAPMethod::IN, part.name, rpcdefinedtype(part)
    5050    } 
    5151    outparts = operation.outputparts 
     
    5353      retval = outparts[0] 
    5454      collect_type(retval.type) 
    55       result << param_set(::SOAP::RPC::SOAPMethod::RETVAL, 
    56         rpcdefinedtype(retval), retval.name
     55      result << param_set(::SOAP::RPC::SOAPMethod::RETVAL, retval.name, 
     56        rpcdefinedtype(retval)
    5757      cdr(outparts).each { |part| 
    5858        collect_type(part.type) 
    59         result << param_set(::SOAP::RPC::SOAPMethod::OUT, rpcdefinedtype(part)
    60           part.name
     59        result << param_set(::SOAP::RPC::SOAPMethod::OUT, part.name
     60          rpcdefinedtype(part)
    6161      } 
    6262    end 
     
    6767    param = [] 
    6868    operation.inputparts.each do |input| 
    69       param << param_set(::SOAP::RPC::SOAPMethod::IN, 
    70         documentdefinedtype(input), input.name
     69      param << param_set(::SOAP::RPC::SOAPMethod::IN, input.name, 
     70        documentdefinedtype(input), documentdefinedelement(input)
    7171    end 
    7272    operation.outputparts.each do |output| 
    73       param << param_set(::SOAP::RPC::SOAPMethod::OUT, 
    74         documentdefinedtype(output), output.name
     73      param << param_set(::SOAP::RPC::SOAPMethod::OUT, output.name, 
     74        documentdefinedtype(output), documentdefinedelement(output)
    7575    end 
    7676    param 
     
    160160  end 
    161161 
    162   def param_set(io_type, type, name) 
    163     [io_type, type, name] 
     162  def documentdefinedelement(part) 
     163    if mapped = basetype_mapped_class(part.type) 
     164      false 
     165    elsif definedtype = @simpletypes[part.type] 
     166      false 
     167    elsif definedtype = @elements[part.element] 
     168      definedtype.elementform == 'qualified' 
     169    elsif definedtype = @complextypes[part.type] 
     170      false 
     171    else 
     172      raise RuntimeError.new("part: #{part.name} cannot be resolved") 
     173    end 
     174  end 
     175 
     176  def param_set(io_type, name, type, ele = nil) 
     177    [io_type, name, type, ele] 
    164178  end 
    165179 
     
    177191  def param2str(params) 
    178192    params.collect { |param| 
    179       "[#{dq(param[0])}, #{dq(param[2])}, #{type2str(param[1])}]" 
     193      io, name, type, ele = param 
     194      unless ele.nil? 
     195        "[#{dq(io)}, #{dq(name)}, #{type2str(type)}, #{ele2str(ele)}]" 
     196      else 
     197        "[#{dq(io)}, #{dq(name)}, #{type2str(type)}]" 
     198      end 
    180199    }.join(",\n") 
    181200  end 
     
    186205    else 
    187206      "[#{dq(type[0])}, #{ndq(type[1])}, #{dq(type[2])}]"  
     207    end 
     208  end 
     209 
     210  def ele2str(ele) 
     211    qualified = ele 
     212    if qualified 
     213      "true" 
     214    else 
     215      "false" 
    188216    end 
    189217  end 
  • trunk/lib/wsdl/xmlSchema/all.rb

    r1520 r1580  
    2828  def targetnamespace 
    2929    parent.targetnamespace 
     30  end 
     31 
     32  def elementformdefault 
     33    parent.elementformdefault 
    3034  end 
    3135 
  • trunk/lib/wsdl/xmlSchema/choice.rb

    r1520 r1580  
    2828  def targetnamespace 
    2929    parent.targetnamespace 
     30  end 
     31 
     32  def elementformdefault 
     33    parent.elementformdefault 
    3034  end 
    3135 
  • trunk/lib/wsdl/xmlSchema/complexType.rb

    r1520 r1580  
    3939  def targetnamespace 
    4040    parent.is_a?(WSDL::XMLSchema::Element) ? nil : parent.targetnamespace 
     41  end 
     42 
     43  def elementformdefault 
     44    parent.elementformdefault 
    4145  end 
    4246  
  • trunk/lib/wsdl/xmlSchema/element.rb

    r1537 r1580  
    3737 
    3838  attr_writer :name     # required 
     39  attr_writer :form 
    3940  attr_writer :type 
    4041  attr_writer :local_simpletype 
     
    4647 
    4748  attr_reader_ref :name 
     49  attr_reader_ref :form 
    4850  attr_reader_ref :type 
    4951  attr_reader_ref :local_simpletype 
     
    5961    super() 
    6062    @name = name 
     63    @form = nil 
    6164    @type = type 
    6265    @local_simpletype = @local_complextype = nil 
     
    7780  end 
    7881 
     82  def elementformdefault 
     83    parent.elementformdefault 
     84  end 
     85 
    7986  def elementform 
    80     # ToDo: must be overwritten. 
    81     parent.elementformdefault 
     87    self.form.nil? ? parent.elementformdefault : self.form 
    8288  end 
    8389 
     
    103109    when NameAttrName 
    104110      @name = XSD::QName.new(targetnamespace, value.source) 
     111    when FormAttrName 
     112      @form = value.source 
    105113    when TypeAttrName 
    106114      @type = value 
  • trunk/lib/wsdl/xmlSchema/schema.rb

    r1534 r1580  
    11# WSDL4R - XMLSchema schema definition for WSDL. 
    2 # Copyright (C) 2002, 2003  NAKAMURA, Hiroshi <nahi@ruby-lang.org>. 
     2# Copyright (C) 2002, 2003-2005  NAKAMURA, Hiroshi <nahi@ruby-lang.org>. 
    33 
    44# This program is copyrighted free software by NAKAMURA, Hiroshi.  You can 
     
    3535    @attributes = XSD::NamedElements.new 
    3636    @imports = [] 
    37     @elementformdefault = "qualified" 
     37    @attributeformdefault = "unqualified" 
     38    @elementformdefault = "unqualified" 
    3839    @importedschema = {} 
    3940    @location = nil 
  • trunk/lib/wsdl/xmlSchema/sequence.rb

    r1520 r1580  
    2828  def targetnamespace 
    2929    parent.targetnamespace 
     30  end 
     31 
     32  def elementformdefault 
     33    parent.elementformdefault 
    3034  end 
    3135 
  • trunk/test/soap/test_soapelement.rb

    r1520 r1580  
    11require 'test/unit' 
    22require 'soap/baseData' 
     3require 'soap/mapping' 
    34 
    45 
     
    3738    assert_equal({}, obj.extraattr) 
    3839    assert_equal([], obj.precedents) 
    39     assert_equal(false, obj.qualified) 
     40    assert_equal(nil, obj.qualified) 
    4041    assert_equal(nil, obj.text) 
    4142    assert(obj.members.empty?)