Changeset 1937
- Timestamp:
- 09/06/07 12:00:32 (1 year ago)
- Files:
-
- trunk/lib/soap/mapping/wsdlliteralregistry.rb (modified) (6 diffs)
- trunk/test/soap/test_extraattr.rb (modified) (1 diff)
- trunk/test/wsdl/choice/test_choice.rb (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/mapping/wsdlliteralregistry.rb
r1921 r1937 130 130 def complexobj2soap(obj, type) 131 131 ele = SOAPElement.new(type.name) 132 if type.choice? 133 complexobj2choicesoap(obj, ele, type) 134 else 135 complexobj2sequencesoap(obj, ele, type) 136 end 137 end 138 139 def complexobj2sequencesoap(obj, ele, type) 132 complexobj2sequencesoap(obj, ele, type, type.choice?, type.choice?) 133 ele 134 end 135 136 def complexobj2sequencesoap(obj, soap, type, nillable, is_choice) 137 added = false 140 138 type.elements.each do |child_ele| 141 139 case child_ele … … 143 141 any = Mapping.get_attributes_for_any(obj) 144 142 SOAPElement.from_objs(any).each do |child| 145 ele.add(child)143 soap.add(child) 146 144 end 145 ele_added = true 147 146 when WSDL::XMLSchema::Element 148 complexobj2soapchildren(obj, ele, child_ele)147 ele_added = complexobj2soapchildren(obj, soap, child_ele, nillable) 149 148 when WSDL::XMLSchema::Sequence 150 complexobj2sequencesoap(obj, child_ele, type)149 ele_added = complexobj2sequencesoap(obj, soap, child_ele, nillable, false) 151 150 when WSDL::XMLSchema::Choice 152 complexobj2choicesoap(obj, child_ele, type)151 ele_added = complexobj2sequencesoap(obj, soap, child_ele, true, true) 153 152 else 154 153 raise MappingError.new("unknown type: #{child_ele}") 155 154 end 156 end 157 ele 158 end 159 160 def complexobj2choicesoap(obj, ele, type) 161 type.elements.each do |child_ele| 162 break if complexobj2soapchildren(obj, ele, child_ele, true) 163 end 164 ele 165 end 166 167 def complexobj2soapchildren(obj, ele, child_ele, allow_nil_value = false) 155 added = true if ele_added 156 break if is_choice and ele_added 157 end 158 added 159 end 160 161 def complexobj2soapchildren(obj, soap, child_ele, nillable = false) 168 162 if child_ele.map_as_array? 169 complexobj2soapchildren_array(obj, ele, child_ele, allow_nil_value)170 else 171 complexobj2soapchildren_single(obj, ele, child_ele, allow_nil_value)172 end 173 end 174 175 def complexobj2soapchildren_array(obj, ele, child_ele, allow_nil_value)163 complexobj2soapchildren_array(obj, soap, child_ele, nillable) 164 else 165 complexobj2soapchildren_single(obj, soap, child_ele, nillable) 166 end 167 end 168 169 def complexobj2soapchildren_array(obj, soap, child_ele, nillable) 176 170 child = Mapping.get_attribute(obj, child_ele.name.name) 177 171 if child.nil? and obj.is_a?(::Array) … … 179 173 end 180 174 if child.nil? 181 return false if allow_nil_value175 return false if nillable 182 176 if child_soap = nil2soap(child_ele) 183 ele.add(child_soap)177 soap.add(child_soap) 184 178 return true 185 179 else … … 192 186 child.each do |item| 193 187 if item.is_a?(SOAPElement) 194 ele.add(item)188 soap.add(item) 195 189 else 196 190 child_soap = obj2elesoap(item, child_ele) 197 ele.add(child_soap)191 soap.add(child_soap) 198 192 end 199 193 end … … 201 195 end 202 196 203 def complexobj2soapchildren_single(obj, ele, child_ele, allow_nil_value)197 def complexobj2soapchildren_single(obj, soap, child_ele, nillable) 204 198 child = Mapping.get_attribute(obj, child_ele.name.name) 205 199 case child 206 200 when NilClass 207 return false if allow_nil_value201 return false if nillable 208 202 if child_soap = nil2soap(child_ele) 209 ele.add(child_soap)203 soap.add(child_soap) 210 204 true 211 205 else … … 213 207 end 214 208 when SOAPElement 215 ele.add(child)209 soap.add(child) 216 210 true 217 211 else 218 212 child_soap = obj2elesoap(child, child_ele) 219 ele.add(child_soap)213 soap.add(child_soap) 220 214 true 221 215 end trunk/test/soap/test_extraattr.rb
r1765 r1937 37 37 env = SOAP::SOAPEnvelope.new(header, body) 38 38 env.extraattr["Id"] = "extraattr" 39 g = SOAP:: SOAPGenerator.new()39 g = SOAP::Generator.new() 40 40 xml = g.generate(env) 41 41 assert_equal(HEADER_XML, xml) trunk/test/wsdl/choice/test_choice.rb
r1924 r1937 141 141 end 142 142 143 def test_naive_complex 143 def test_wsdl_with_map_complex 144 wsdl = File.join(DIR, 'choice.wsdl') 145 @client = ::SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver 146 @client.endpoint_url = "http://localhost:#{Port}/" 147 @client.wiredump_dev = STDOUT if $DEBUG 148 do_test_with_map_complex(@client) 149 end 150 151 def test_wsdl_with_stub_complex 152 wsdl = File.join(DIR, 'choice.wsdl') 153 @client = ::SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver 154 @client.endpoint_url = "http://localhost:#{Port}/" 155 @client.wiredump_dev = STDOUT if $DEBUG 156 @client.literal_mapping_registry = ChoiceMappingRegistry::LiteralRegistry 157 do_test_with_stub_complex(@client) 158 end 159 160 def test_naive_with_map_complex 144 161 @client = ::SOAP::RPC::Driver.new("http://localhost:#{Port}/") 145 162 @client.add_document_method('echo_complex', 'urn:choice:echo_complex', … … 147 164 XSD::QName.new('urn:choice', 'echo_complex_response')) 148 165 @client.wiredump_dev = STDOUT if $DEBUG 166 do_test_with_map_complex(@client) 167 end 168 169 def test_naive_with_stub_complex 170 @client = ::SOAP::RPC::Driver.new("http://localhost:#{Port}/") 171 @client.add_document_method('echo_complex', 'urn:choice:echo_complex', 172 XSD::QName.new('urn:choice', 'echoele_complex'), 173 XSD::QName.new('urn:choice', 'echo_complex_response')) 174 @client.wiredump_dev = STDOUT if $DEBUG 149 175 @client.literal_mapping_registry = ChoiceMappingRegistry::LiteralRegistry 150 # 151 ret = @client.echo_complex(Echoele_complex.new(Andor.new("A", "B1", nil, nil, nil, nil, "C1", "C2"))) 176 do_test_with_stub_complex(@client) 177 end 178 179 def do_test_with_map_complex(client) 180 req = { 181 :data => { 182 :A => "A", 183 :B1 => "B1", 184 :C1 => "C1", 185 :C2 => "C2" 186 } 187 } 188 ret = client.echo_complex(req) 189 assert_equal("A", ret.data["A"]) 190 assert_equal("B1", ret.data["B1"]) 191 assert_equal(nil, ret.data["B2a"]) 192 assert_equal(nil, ret.data["B2b"]) 193 assert_equal(nil, ret.data["B3a"]) 194 assert_equal(nil, ret.data["B3b"]) 195 assert_equal("C1", ret.data["C1"]) 196 assert_equal("C2", ret.data["C2"]) 197 # 198 req = { 199 :data => { 200 :A => "A", 201 :B2a => "B2a", 202 :B2b => "B2b", 203 :C1 => "C1", 204 :C2 => "C2" 205 } 206 } 207 ret = client.echo_complex(req) 208 assert_equal("A", ret.data["A"]) 209 assert_equal(nil, ret.data["B1"]) 210 assert_equal("B2a", ret.data["B2a"]) 211 assert_equal("B2b", ret.data["B2b"]) 212 assert_equal(nil, ret.data["B3a"]) 213 assert_equal(nil, ret.data["B3b"]) 214 assert_equal("C1", ret.data["C1"]) 215 assert_equal("C2", ret.data["C2"]) 216 # 217 req = { 218 :data => { 219 :A => "A", 220 :B3a => "B3a", 221 :C1 => "C1", 222 :C2 => "C2" 223 } 224 } 225 ret = client.echo_complex(req) 226 assert_equal("A", ret.data["A"]) 227 assert_equal(nil, ret.data["B1"]) 228 assert_equal(nil, ret.data["B2a"]) 229 assert_equal(nil, ret.data["B2b"]) 230 assert_equal("B3a", ret.data["B3a"]) 231 assert_equal(nil, ret.data["B3b"]) 232 assert_equal("C1", ret.data["C1"]) 233 assert_equal("C2", ret.data["C2"]) 234 # 235 req = { 236 :data => { 237 :A => "A", 238 :B3b => "B3b", 239 :C1 => "C1", 240 :C2 => "C2" 241 } 242 } 243 ret = client.echo_complex(req) 244 assert_equal("A", ret.data["A"]) 245 assert_equal(nil, ret.data["B1"]) 246 assert_equal(nil, ret.data["B2a"]) 247 assert_equal(nil, ret.data["B2b"]) 248 assert_equal(nil, ret.data["B3a"]) 249 assert_equal("B3b", ret.data["B3b"]) 250 assert_equal("C1", ret.data["C1"]) 251 assert_equal("C2", ret.data["C2"]) 252 end 253 254 def do_test_with_stub_complex(client) 255 ret = client.echo_complex(Echoele_complex.new(Andor.new("A", "B1", nil, nil, nil, nil, "C1", "C2"))) 152 256 assert_equal("A", ret.data.a) 153 257 assert_equal("B1", ret.data.b1) … … 159 263 assert_equal("C2", ret.data.c2) 160 264 # 161 ret = @client.echo_complex(Echoele_complex.new(Andor.new("A", nil, "B2a", "B2b", nil, nil, "C1", "C2")))265 ret = client.echo_complex(Echoele_complex.new(Andor.new("A", nil, "B2a", "B2b", nil, nil, "C1", "C2"))) 162 266 assert_equal("A", ret.data.a) 163 267 assert_equal(nil, ret.data.b1) … … 169 273 assert_equal("C2", ret.data.c2) 170 274 # 171 ret = @client.echo_complex(Echoele_complex.new(Andor.new("A", nil, nil, nil, "B3a", nil, "C1", "C2")))275 ret = client.echo_complex(Echoele_complex.new(Andor.new("A", nil, nil, nil, "B3a", nil, "C1", "C2"))) 172 276 assert_equal("A", ret.data.a) 173 277 assert_equal(nil, ret.data.b1) … … 179 283 assert_equal("C2", ret.data.c2) 180 284 # 181 ret = @client.echo_complex(Echoele_complex.new(Andor.new("A", nil, nil, nil, nil, "B3b", "C1", "C2")))285 ret = client.echo_complex(Echoele_complex.new(Andor.new("A", nil, nil, nil, nil, "B3b", "C1", "C2"))) 182 286 assert_equal("A", ret.data.a) 183 287 assert_equal(nil, ret.data.b1)