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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
#!/usr/bin/env ruby
require 'soap/driver'
require 'soap/XMLSchemaDatatypes1999'
class SampleClient < Application
private
AppName = 'SampleClient'
NS1 = 'urn:i3solutions-delayed-quotes'
NS2 = 'urn:AddressFetcher'
def initialize( server, proxy )
super( AppName )
@server = server
@proxy = proxy
@logId = Time.now.gmtime.strftime( "%Y-%m-%dT%X+0000" )
# setLog( AppName.dup << '.log', 'weekly', nil )
@drv1 = nil
@drv2 = nil
end
def run()
#@log.sevThreshold = SEV_DEBUG
#@log.sevThreshold = SEV_INFO
@log.sevThreshold = SEV_WARN
# Driver initialize and method definition
@drv1 = SOAP::Driver.new( @log, @logId, NS1, @server, @proxy )
@drv1.addMethod( 'getQuote', 'symbol' )
@drv2 = SOAP::Driver.new( @log, @logId, NS2, @server, @proxy )
@drv2.addMethod( 'getAddressFromName', 'nameToLookup' )
@drv2.addMethod( 'addEntry', 'nameToRegister', 'address' )
# Method invocation
puts @drv1.getQuote( "IBM" )
address = @drv2.getAddressFromName( "John B. Good" )
dumpAddress( address )
phoneNumber = PhoneNumber.new( 987, '654', '3210' )
address = Address.new( 123, 'STREET', 'CITY', 'NY', 99999, phoneNumber )
result = @drv2.addEntry( 'NaHi', address )
puts 'NaHi has been added.'
address = @drv2.getAddressFromName( "NaHi" )
dumpAddress( address )
return 0
end
def dumpAddress( addr )
phone = addr.phoneNumber
puts <<EOS
#{ addr.streetNum } #{ addr.streetName }
#{ addr.city }, #{ addr.state } #{ addr.zip }
(#{ phone.areaCode }) #{ phone.exchange }-#{ phone.number }
EOS
end
###
## Other utility methods
#
def log( sev, message )
@log.add( sev, "<#{ @logId }> #{ message }", @appName ) if @log
end
end
class Address
@@typeName = 'address'
@@typeNamespace = 'urn:ibm-soap-address-demo'
attr_accessor :streetNum, :streetName, :city, :state, :zip, :phoneNumber
def initialize( streetNum = nil, streetName = nil, city = nil, state = nil, zip = nil, phoneNumber = nil )
@streetNum = streetNum
@streetName = streetName
@city = city
@state = state
@zip = zip
@phoneNumber = phoneNumber
end
end
class PhoneNumber
@@typeName = 'phone'
@@typeNamespace = 'urn:ibm-soap-address-demo'
attr_accessor :areaCode, :exchange, :number
def initialize( areaCode = nil, exchange = nil, number = nil )
@exchange = exchange
@areaCode = areaCode
@number = number
end
end
server = ARGV.shift or raise ArgumentError.new( 'Target URL was not given.' )
proxy = ARGV.shift || nil
app = SampleClient.new( server, proxy ).start()
|