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

Changeset 1925

Show
Ignore:
Timestamp:
08/27/07 10:37:34 (1 year ago)
Author:
nahi
Message:
  • support <choice maxOccurs="unbounded"/>: treat it <all/> for now.
  • cleanups around Thread variable handling.
Files:

Legend:

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

    r1824 r1925  
    106106    end 
    107107    begin 
    108       externalces = Thread.current[:SOAPMapping][:ExternalCES] 
    109       encoded = XSD::Charset.encoding_conv(obj, externalces, 
     108      encoded = XSD::Charset.encoding_conv(obj, Mapping.external_ces, 
    110109        XSD::Charset.encoding) 
    111110      soap_obj = soap_class.new(encoded) 
     
    120119    obj = Mapping.create_empty_object(obj_class) 
    121120    decoded = XSD::Charset.encoding_conv(node.data, XSD::Charset.encoding, 
    122       Thread.current[:SOAPMapping][:ExternalCES]
     121      Mapping.external_ces
    123122    obj.replace(decoded) 
    124123    mark_unmarshalled_obj(node, obj) 
  • trunk/lib/soap/mapping/literalregistry.rb

    r1924 r1925  
    2323  attr_accessor :excn_handler_obj2soap 
    2424  attr_accessor :excn_handler_soap2obj 
    25   attr_accessor :generate_explicit_type 
    2625 
    2726  def initialize 
     
    2928    @excn_handler_obj2soap = nil 
    3029    @excn_handler_soap2obj = nil 
    31     @generate_explicit_type = false 
    3230  end 
    3331 
     
    139137    end 
    140138    ele.qualified = definition.qualified 
    141     if definition.type and (@generate_explicit_type or definition.basetype) 
     139    if definition.type and (definition.basetype or Mapping.root_type_hint) 
     140      Mapping.reset_root_type_hint 
    142141      ele.extraattr[XSD::AttrTypeName] = definition.type 
    143142    end 
  • trunk/lib/soap/mapping/mapping.rb

    r1924 r1925  
    371371  end 
    372372 
     373  def self.root_type_hint 
     374    Thread.current[:SOAPMapping][:RootTypeHint] 
     375  end 
     376 
     377  def self.reset_root_type_hint 
     378    Thread.current[:SOAPMapping][:RootTypeHint] = false 
     379  end 
     380 
     381  def self.external_ces 
     382    Thread.current[:SOAPMapping][:ExternalCES] 
     383  end 
     384 
    373385  def self.schema_ns_definition(klass) 
    374386    class_schema_variable(:schema_ns, klass) 
     
    538550        data[:ExternalCES] = opt[:external_ces] || XSD::Charset.encoding 
    539551        data[:NoReference] = opt[:no_reference] 
     552        data[:RootTypeHint] = opt[:root_type_hint] 
    540553        data[:SchemaDefinition] = {} 
    541554        yield 
  • trunk/lib/soap/mapping/registry.rb

    r1923 r1925  
    175175    super() 
    176176    @class_schema_definition = {} 
     177    @class_elename_schema_definition = {} 
    177178    @elename_schema_definition = {} 
    178179    @type_schema_definition = {} 
     
    187188    end 
    188189    if definition.elename 
     190      @class_elename_schema_definition[obj_class] = definition 
    189191      @elename_schema_definition[definition.elename] = definition 
    190192    end 
     
    196198  def schema_definition_from_class(klass) 
    197199    @class_schema_definition[klass] || Mapping.schema_definition_classdef(klass) 
     200  end 
     201 
     202  def elename_schema_definition_from_class(klass) 
     203    @class_elename_schema_definition[klass] 
    198204  end 
    199205 
     
    240246    soap_obj = nil 
    241247    if type <= XSD::XSDString 
    242       str = XSD::Charset.encoding_conv(obj.to_s, 
    243         Thread.current[:SOAPMapping][:ExternalCES], 
     248      str = XSD::Charset.encoding_conv(obj.to_s, Mapping.external_ces, 
    244249        XSD::Charset.encoding) 
    245250      soap_obj = type.new(str) 
  • trunk/lib/wsdl/soap/mappingRegistryCreatorSupport.rb

    r1924 r1925  
    170170        child_schema_element = 
    171171          parse_elements(element.elements, base_namespace, parentmodule, qualified) 
    172         child_schema_element.unshift(:choice) 
     172        if !element.map_as_array? 
     173          # choice + maxOccurs="unbounded" is treated just as 'all' now. 
     174          child_schema_element.unshift(:choice) 
     175        end 
    173176        schema_element << child_schema_element 
    174177      when WSDL::XMLSchema::Group 
  • trunk/lib/xsd/mapping.rb

    r1924 r1925  
    2929 
    3030  class Mapper 
    31     MAPPING_OPT = {:default_encodingstyle => SOAP::LiteralNamespace} 
     31    MAPPING_OPT = { 
     32      :default_encodingstyle => SOAP::LiteralNamespace, 
     33      :root_type_hint => true 
     34    }.freeze 
    3235 
    3336    def initialize(registry) 
    3437      @registry = registry 
    35       @registry.generate_explicit_type = true 
    3638    end 
    3739 
    3840    def obj2xml(obj, elename = nil, io = nil) 
    39       if !elename.nil? and !elename.is_a?(XSD::QName) 
    40         elename = XSD::QName.new(nil, elename) 
     41      opt = MAPPING_OPT.dup 
     42      unless elename 
     43        if definition = @registry.elename_schema_definition_from_class(obj.class) 
     44          elename = definition.elename 
     45          opt[:root_type_hint] = false 
     46        end 
    4147      end 
    42       soap = SOAP::Mapping.obj2soap(obj, @registry, elename) 
     48      elename = SOAP::Mapping.to_qname(elename) if elename 
     49      soap = SOAP::Mapping.obj2soap(obj, @registry, elename, opt) 
    4350      if soap.elename.nil? or soap.elename == XSD::QName::EMPTY 
    4451        soap.elename = 
    4552          XSD::QName.new(nil, SOAP::Mapping.name2elename(obj.class.to_s)) 
    4653      end 
    47       generator = SOAP::SOAPGenerator.new(MAPPING_OPT
     54      generator = SOAP::SOAPGenerator.new(opt
    4855      generator.generate(soap, io) 
    4956    end