Changeset 1833
- Timestamp:
- 06/05/07 10:34:36 (1 year ago)
- Files:
-
- trunk/lib/soap/element.rb (modified) (6 diffs)
- trunk/lib/soap/header/handler.rb (modified) (2 diffs)
- trunk/lib/soap/header/handlerset.rb (modified) (1 diff)
- trunk/lib/soap/rpc/proxy.rb (modified) (1 diff)
- trunk/lib/soap/rpc/router.rb (modified) (1 diff)
- trunk/lib/soap/wsdlDriver.rb (modified) (1 diff)
- trunk/test/soap/test_empty.rb (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/element.rb
r1825 r1833 103 103 @encodingstyle = nil 104 104 if data 105 if data.respond_to?(:to_xml) 106 data = SOAP::SOAPRawData.new(data) 107 elsif defined?(::REXML) and data.is_a?(::REXML::Element) 108 data = SOAP::SOAPRawData.new(SOAP::SOAPREXMLElementWrap.new(data)) 109 end 105 110 if data.respond_to?(:elename) 106 111 add(data.elename.name, data) … … 120 125 yield(data) 121 126 end 122 generator.encode_tag_end(name, true)127 generator.encode_tag_end(name, @data.size > 0) 123 128 end 124 129 … … 185 190 include SOAPEnvelopeElement 186 191 192 attr_writer :force_encode 193 187 194 def initialize 188 195 super(nil) 189 196 @elename = EleHeaderName 190 197 @encodingstyle = nil 198 @force_encode = false 191 199 end 192 200 … … 197 205 yield(data) 198 206 end 199 generator.encode_tag_end(name, true)207 generator.encode_tag_end(name, @data.size > 0) 200 208 end 201 209 … … 212 220 end 213 221 alias size length 222 223 def encode? 224 @force_encode or length > 0 225 end 214 226 end 215 227 … … 249 261 name = ns.name(@elename) 250 262 generator.encode_tag(name, attrs) 251 252 yield(@header) if @header and @header.length > 0 263 yield(@header) if @header and @header.encode? 253 264 yield(@body) 254 255 265 generator.encode_tag_end(name, true) 256 266 end trunk/lib/soap/header/handler.rb
r1824 r1833 37 37 end 38 38 39 def on_outbound_headeritem 40 item = on_outbound 39 def on_outbound_headeritem(header) 40 arity = self.method(:on_outbound).arity 41 item = (arity == 0) ? on_outbound : on_outbound(header) 41 42 if item.nil? 42 43 nil … … 51 52 end 52 53 53 def on_inbound_headeritem(header )54 on_inbound( header.element, header.mustunderstand)54 def on_inbound_headeritem(header, item) 55 on_inbound(item.element, item.mustunderstand) 55 56 end 56 57 end trunk/lib/soap/header/handlerset.rb
r1824 r1833 39 39 40 40 # returns: Array of SOAPHeaderItem 41 def on_outbound 41 def on_outbound(header) 42 42 @store.collect { |handler| 43 handler.on_outbound_headeritem 43 handler.on_outbound_headeritem(header) 44 44 }.compact 45 45 end 46 46 47 # header s: SOAPHeaderItem enumerable object48 def on_inbound(header s)49 header s.each do |name, item|47 # header: SOAPHeaderItem enumerable object 48 def on_inbound(header) 49 header.each do |name, item| 50 50 handler = @store.find { |handler| 51 51 handler.elename == item.element.elename 52 52 } 53 53 if handler 54 handler.on_inbound_headeritem( item)54 handler.on_inbound_headeritem(header, item) 55 55 elsif item.mustunderstand 56 56 raise UnhandledMustUnderstandHeaderError.new(item.element.elename.to_s) trunk/lib/soap/rpc/proxy.rb
r1825 r1833 236 236 237 237 def create_request_header 238 headers = @headerhandler.on_outbound 239 if headers.empty? 240 nil 241 else 242 h = ::SOAP::SOAPHeader.new 243 headers.each do |header| 244 h.add(header.elename.name, header) 245 end 246 h 247 end 248 end 249 250 def receive_headers(headers) 251 @headerhandler.on_inbound(headers) if headers 238 header = ::SOAP::SOAPHeader.new 239 items = @headerhandler.on_outbound(header) 240 items.each do |item| 241 header.add(item.elename.name, item) 242 end 243 header 244 end 245 246 def receive_headers(header) 247 @headerhandler.on_inbound(header) if header 252 248 end 253 249 trunk/lib/soap/rpc/router.rb
r1825 r1833 275 275 276 276 def call_headers(headerhandler) 277 headers = headerhandler.on_outbound 278 if headers.empty? 279 nil 280 else 281 h = ::SOAP::SOAPHeader.new 282 headers.each do |header| 283 h.add(header.elename.name, header) 284 end 285 h 286 end 287 end 288 289 def receive_headers(headerhandler, headers) 290 headerhandler.on_inbound(headers) if headers 277 header = ::SOAP::SOAPHeader.new 278 items = headerhandler.on_outbound(header) 279 items.each do |item| 280 header.add(item.elename.name, item) 281 end 282 header 283 end 284 285 def receive_headers(headerhandler, header) 286 headerhandler.on_inbound(header) if header 291 287 end 292 288 trunk/lib/soap/wsdlDriver.rb
r1824 r1833 397 397 398 398 def create_request_header 399 headers = @proxy.headerhandler.on_outbound 400 if headers.empty? 401 nil 402 else 403 h = SOAPHeader.new 404 headers.each do |header| 405 h.add(header.elename.name, header) 406 end 407 h 408 end 409 end 410 411 def receive_headers(headers) 412 @proxy.headerhandler.on_inbound(headers) if headers 399 header = SOAPHeader.new 400 items = @proxy.headerhandler.on_outbound(header) 401 items.each do |item| 402 header.add(item.elename.name, item) 403 end 404 header 405 end 406 407 def receive_headers(header) 408 @proxy.headerhandler.on_inbound(header) if header 413 409 end 414 410 trunk/test/soap/test_empty.rb
r1658 r1833 2 2 require 'soap/rpc/standaloneServer' 3 3 require 'soap/rpc/driver' 4 require 'soap/header/handler' 4 5 5 6 … … 9 10 class TestEmpty < Test::Unit::TestCase 10 11 Port = 17171 12 13 class EmptyHeaderHandler < SOAP::Header::Handler 14 def on_outbound(header) 15 # dump Header even if no header item given. 16 header.force_encode = true 17 # no additional header item 18 nil 19 end 20 end 11 21 12 22 class NopServer < SOAP::RPC::StandaloneServer … … 49 59 xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 50 60 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 51 <env:Body> 52 </env:Body> 61 <env:Body></env:Body> 62 </env:Envelope>] 63 64 EMPTY_HEADER_XML = %q[<?xml version="1.0" encoding="utf-8" ?> 65 <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 66 xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 67 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 68 <env:Header></env:Header> 69 <env:Body></env:Body> 53 70 </env:Envelope>] 54 71 … … 67 84 end 68 85 86 def test_empty_header 87 @client.headerhandler << EmptyHeaderHandler.new(nil) 88 @client.wiredump_dev = str = '' 89 @client.nop 90 assert_equal(EMPTY_HEADER_XML, parse_requestxml(str)) 91 end 92 69 93 def parse_requestxml(str) 70 94 str.split(/\r?\n\r?\n/)[3]