| 1 |
#!/usr/bin/env ruby |
|---|
| 2 |
|
|---|
| 3 |
require 'soap/rpc/driver' |
|---|
| 4 |
require 'soap/XMLSchemaDatatypes1999' |
|---|
| 5 |
|
|---|
| 6 |
|
|---|
| 7 |
class SampleClient < Application |
|---|
| 8 |
|
|---|
| 9 |
private |
|---|
| 10 |
|
|---|
| 11 |
AppName = 'SampleClient' |
|---|
| 12 |
|
|---|
| 13 |
NS1 = 'urn:i3solutions-delayed-quotes' |
|---|
| 14 |
NS2 = 'urn:AddressFetcher' |
|---|
| 15 |
|
|---|
| 16 |
def initialize(server, proxy) |
|---|
| 17 |
super(AppName) |
|---|
| 18 |
@server = server |
|---|
| 19 |
@proxy = proxy |
|---|
| 20 |
@drv1 = nil |
|---|
| 21 |
@drv2 = nil |
|---|
| 22 |
end |
|---|
| 23 |
|
|---|
| 24 |
def run |
|---|
| 25 |
# Driver initialize and method definition |
|---|
| 26 |
|
|---|
| 27 |
@drv1 = SOAP::RPC::Driver.new(@server, NS1) |
|---|
| 28 |
@drv1.addMethod('getQuote', 'symbol') |
|---|
| 29 |
|
|---|
| 30 |
@drv2 = SOAP::RPC::Driver.new(@server, NS2) |
|---|
| 31 |
@drv2.addMethod('getAddressFromName', 'nameToLookup') |
|---|
| 32 |
@drv2.addMethod('addEntry', 'nameToRegister', 'address') |
|---|
| 33 |
|
|---|
| 34 |
# Method invocation |
|---|
| 35 |
|
|---|
| 36 |
puts @drv1.getQuote("IBM") |
|---|
| 37 |
|
|---|
| 38 |
address = @drv2.getAddressFromName("John B. Good") |
|---|
| 39 |
dumpAddress(address) |
|---|
| 40 |
|
|---|
| 41 |
phoneNumber = PhoneNumber.new(987, '654', '3210') |
|---|
| 42 |
address = Address.new(123, 'STREET', 'CITY', 'NY', 99999, phoneNumber) |
|---|
| 43 |
result = @drv2.addEntry('NaHi', address) |
|---|
| 44 |
puts 'NaHi has been added.' |
|---|
| 45 |
|
|---|
| 46 |
address = @drv2.getAddressFromName("NaHi") |
|---|
| 47 |
dumpAddress(address) |
|---|
| 48 |
|
|---|
| 49 |
return 0 |
|---|
| 50 |
end |
|---|
| 51 |
|
|---|
| 52 |
def dumpAddress(addr) |
|---|
| 53 |
phone = addr.phoneNumber |
|---|
| 54 |
puts <<EOS |
|---|
| 55 |
#{ addr.streetNum } #{ addr.streetName } |
|---|
| 56 |
#{ addr.city }, #{ addr.state } #{ addr.zip } |
|---|
| 57 |
(#{ phone.areaCode }) #{ phone.exchange }-#{ phone.number } |
|---|
| 58 |
EOS |
|---|
| 59 |
end |
|---|
| 60 |
end |
|---|
| 61 |
|
|---|
| 62 |
|
|---|
| 63 |
class Address |
|---|
| 64 |
@@typeName = 'address' |
|---|
| 65 |
@@typeNamespace = 'urn:ibm-soap-address-demo' |
|---|
| 66 |
|
|---|
| 67 |
attr_accessor :streetNum, :streetName, :city, :state, :zip, :phoneNumber |
|---|
| 68 |
def initialize(streetNum = nil, streetName = nil, city = nil, state = nil, zip = nil, phoneNumber = nil) |
|---|
| 69 |
@streetNum = streetNum |
|---|
| 70 |
@streetName = streetName |
|---|
| 71 |
@city = city |
|---|
| 72 |
@state = state |
|---|
| 73 |
@zip = zip |
|---|
| 74 |
@phoneNumber = phoneNumber |
|---|
| 75 |
end |
|---|
| 76 |
end |
|---|
| 77 |
|
|---|
| 78 |
class PhoneNumber |
|---|
| 79 |
@@typeName = 'phone' |
|---|
| 80 |
@@typeNamespace = 'urn:ibm-soap-address-demo' |
|---|
| 81 |
|
|---|
| 82 |
attr_accessor :areaCode, :exchange, :number |
|---|
| 83 |
def initialize(areaCode = nil, exchange = nil, number = nil) |
|---|
| 84 |
@exchange = exchange |
|---|
| 85 |
@areaCode = areaCode |
|---|
| 86 |
@number = number |
|---|
| 87 |
end |
|---|
| 88 |
end |
|---|
| 89 |
|
|---|
| 90 |
server = ARGV.shift or raise ArgumentError.new('Target URL was not given.') |
|---|
| 91 |
proxy = ARGV.shift || nil |
|---|
| 92 |
app = SampleClient.new(server, proxy).start |
|---|