1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
require 'soap/rpc/standaloneServer'
require 'soap/filter'
class FilterTestServer < SOAP::RPC::StandaloneServer
class Servant
def self.create
new
end
def echo(amt)
amt
end
end
class ServerFilter1 < SOAP::Filter::Handler
# 15 -> 30
def on_outbound(envelope, opt)
unless envelope.body.is_fault
node = envelope.body.root_node
node.retval = SOAP::SOAPInt.new(node.retval.data * 2)
node.elename = XSD::QName.new(nil, 'return')
end
envelope
end
# 4 -> 5
def on_inbound(xml, opt)
xml = xml.sub(/4/, '5')
xml
end
end
class ServerFilter2 < SOAP::Filter::Handler
# 5 -> 15
def on_outbound(envelope, opt)
unless envelope.body.is_fault
node = envelope.body.root_node
node.retval = SOAP::SOAPInt.new(node.retval.data + 10)
node.elename = XSD::QName.new(nil, 'return')
end
envelope
end
# 5 -> 6
def on_inbound(xml, opt)
xml = xml.sub(/5/, '6')
xml
end
end
def initialize(*arg)
super
add_rpc_servant(Servant.new, "urn:filter")
self.filterchain << ServerFilter1.new
self.filterchain << ServerFilter2.new
end
end
if __FILE__ == $0
server = FilterTestServer.new(self.class.name, nil, '0.0.0.0', 7171)
trap("INT") do
server.shutdown
end
server.start
end
|