I’m testing SOAP interoperability between a command line ruby script
and a Ruby on Rails based web service.
I can’t seem to figure out how to get the service to raise an
exception that gets propagated back to the client as a
SOAP::FaultError, complete with fault code and fault string.
Running my client ruby script against an Apache AXIS based Java SOAP
Server or NUSOAP based PHP correctly gives me back an error of the form:
#<SOAP::FaultError: authentication failed>
from which I can then extract
fault code: 1001
fault string: authentication failed
Running against a Rails based Web service no matter what I raise on
the server, it always seems to end up on the client as a
#<RuntimeError: authentication failed>.
Any suggestions?
Here’s the code for my service:
def authenticate(login, password, version)
if (login == ‘khans’)
return [1, ‘Shehryar’, ‘Khan’]
elsif
raise ‘authentication failed’
end
end
Here’s the code for my client:
require ‘soap/wsdlDriver’
Ruby on Rails URL
factory = SOAP::WSDLDriverFactory.new(“http://localhost:3000/service/
wsdl”)
soap = factory.create_rpc_driver
begin
soap_response = soap.authenticate(“khans”,“bollox”,“1.0”)
puts ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
puts "Service.authenticate() succeeded:"
puts " id: "+soap_response[0].to_s
puts " firstname: "+soap_response[1].to_s
puts " lastname: "+soap_response[2].to_s
puts ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
rescue => e
puts ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
puts "Service.authenticate() failed:"
puts " fault code: "+e.faultcode.to_s
puts " fault string: "+e.faultstring.to_s
puts ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
end
soap.reset_stream