Changeset 1705
- Timestamp:
- 08/30/06 12:18:44 (2 years ago)
- Files:
-
- trunk/lib/soap/baseData.rb (modified) (1 diff)
- trunk/lib/soap/mapping/factory.rb (modified) (3 diffs)
- trunk/test/wsdl/rpc/test_rpc.rb (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/baseData.rb
r1683 r1705 523 523 524 524 def add_member(name, value = nil) 525 value = SOAPNil.new ()if value.nil?525 value = SOAPNil.new if value.nil? 526 526 @array.push(name) 527 527 value.elename = value.elename.dup_name(name) trunk/lib/soap/mapping/factory.rb
r1698 r1705 41 41 setdefinediv2soap(node, obj, map) 42 42 else 43 # should we sort instance_variables? 43 # should we sort instance_variables? how? 44 44 obj.instance_variables.each do |var| 45 45 name = var.sub(/^@/, '') … … 58 58 definition.elements.each do |eledef| 59 59 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 62 65 else 63 66 klass = Mapping.class_from_name(eledef.type) 64 67 if klass && klass.ancestors.include?(::SOAP::SOAPBasetype) 65 ele.add(eledef.elename.name, klass.new(child))68 value = klass.new(child) 66 69 else 67 70 # should check klass matches an actual object? 68 ele.add(eledef.elename.name, Mapping._obj2soap(child, map))71 value = Mapping._obj2soap(child, map) 69 72 end 70 73 end 74 ele.add(eledef.elename.name, value) 71 75 end 72 76 end … … 293 297 setiv2soap(soap_obj, obj, map) 294 298 else 299 # allow to serialize an instance of unmarked class 295 300 setiv2soap(soap_obj, obj, map) 296 301 end trunk/test/wsdl/rpc/test_rpc.rb
r1698 r1705 12 12 class Server < ::SOAP::RPC::StandaloneServer 13 13 def on_init 14 self.generate_explicit_type = false15 14 add_rpc_method(self, 'echo', 'arg1', 'arg2') 16 15 add_rpc_method(self, 'echo_err', 'arg1', 'arg2') … … 19 18 DummyPerson = Struct.new("family-name".intern, :Given_name) 20 19 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 21 25 case arg1.family_name 22 26 when 'normal' … … 27 31 when 'dummy' 28 32 DummyPerson.new("family-name", "given_name") 33 when 'nil' 34 Person.new(nil, nil) 29 35 else 30 36 raise … … 66 72 gen.logger.level = Logger::FATAL 67 73 gen.opt['classdef'] = nil 74 gen.opt['driver'] = nil 68 75 gen.opt['force'] = true 69 76 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 71 85 end 72 86 … … 113 127 assert_equal(nil, ret.age) 114 128 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 115 150 end 116 151