ActionWebService - how to raise SOAP::FaultError

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