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

Changeset 1705

Show
Ignore:
Timestamp:
08/30/06 12:18:44 (2 years ago)
Author:
nahi
Message:

rpc serialize + @@schema_element definition in class causes mapping error: String nil is converted to empty String. fixed. closes #238.

Files:

Legend:

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

    r1683 r1705  
    523523 
    524524  def add_member(name, value = nil) 
    525     value = SOAPNil.new() if value.nil? 
     525    value = SOAPNil.new if value.nil? 
    526526    @array.push(name) 
    527527    value.elename = value.elename.dup_name(name) 
  • trunk/lib/soap/mapping/factory.rb

    r1698 r1705  
    4141      setdefinediv2soap(node, obj, map) 
    4242    else 
    43       # should we sort instance_variables? 
     43      # should we sort instance_variables? how? 
    4444      obj.instance_variables.each do |var| 
    4545        name = var.sub(/^@/, '') 
     
    5858    definition.elements.each do |eledef| 
    5959      child = Mapping.get_attribute(obj, eledef.varname) 
    60       if child.is_a?(XSD::NSDBase) 
    61         ele.add(eledef.elename.name, child) 
     60      # extract method 
     61      if child.nil? 
     62        value = SOAPNil.new 
     63      elsif child.is_a?(XSD::NSDBase) 
     64        value = child 
    6265      else 
    6366        klass = Mapping.class_from_name(eledef.type) 
    6467        if klass && klass.ancestors.include?(::SOAP::SOAPBasetype) 
    65           ele.add(eledef.elename.name, klass.new(child)
     68          value = klass.new(child
    6669        else 
    6770          # should check klass matches an actual object? 
    68           ele.add(eledef.elename.name, Mapping._obj2soap(child, map)
     71          value = Mapping._obj2soap(child, map
    6972        end 
    7073      end 
     74      ele.add(eledef.elename.name, value) 
    7175    end 
    7276  end 
     
    293297      setiv2soap(soap_obj, obj, map) 
    294298    else 
     299      # allow to serialize an instance of unmarked class 
    295300      setiv2soap(soap_obj, obj, map) 
    296301    end 
  • trunk/test/wsdl/rpc/test_rpc.rb

    r1698 r1705  
    1212  class Server < ::SOAP::RPC::StandaloneServer 
    1313    def on_init 
    14       self.generate_explicit_type = false 
    1514      add_rpc_method(self, 'echo', 'arg1', 'arg2') 
    1615      add_rpc_method(self, 'echo_err', 'arg1', 'arg2') 
     
    1918    DummyPerson = Struct.new("family-name".intern, :Given_name) 
    2019    def echo(arg1, arg2) 
     20      if arg1.given_name == 'typed' 
     21        self.generate_explicit_type = true 
     22      else 
     23        self.generate_explicit_type = false 
     24      end 
    2125      case arg1.family_name 
    2226      when 'normal' 
     
    2731      when 'dummy' 
    2832        DummyPerson.new("family-name", "given_name") 
     33      when 'nil' 
     34        Person.new(nil, nil) 
    2935      else 
    3036        raise 
     
    6672    gen.logger.level = Logger::FATAL 
    6773    gen.opt['classdef'] = nil 
     74    gen.opt['driver'] = nil 
    6875    gen.opt['force'] = true 
    6976    gen.run 
    70     require pathname('echo') 
     77    backupdir = Dir.pwd 
     78    begin 
     79      Dir.chdir(DIR) 
     80      require pathname('echo.rb') 
     81      require pathname('echoDriver.rb') 
     82    ensure 
     83      Dir.chdir(backupdir) 
     84    end 
    7185  end 
    7286 
     
    113127    assert_equal(nil, ret.age) 
    114128  end 
     129 
     130  def test_stub 
     131    @client = Echo_port_type.new("http://localhost:#{Port}/") 
     132    @client.wiredump_dev = STDOUT if $DEBUG 
     133 
     134    ret = @client.echo(Person.new("normal", "typed", 12, Gender::F), Person.new("Hi", "Na", 21, Gender::M)) 
     135    assert_equal(Person, ret.class) 
     136    assert_equal("Hi", ret.family_name) 
     137    assert_equal("Na", ret.given_name) 
     138    assert_equal(21, ret.age) 
     139  end 
     140 
     141  def test_stub_nil 
     142    @client = Echo_port_type.new("http://localhost:#{Port}/") 
     143    @client.wiredump_dev = STDOUT if $DEBUG 
     144 
     145    ret = @client.echo(Person.new("nil", "", 12, Gender::F), Person.new("Hi", "Na", 21, Gender::M)) 
     146    assert_nil(ret.family_name) 
     147    assert_nil(ret.given_name) 
     148    assert_nil(ret.age) 
     149  end 
    115150end 
    116151