savon_version | order | title | layout | nav_savon_version |
---|---|---|---|---|
v1 |
3 |
Handling the response |
default |
v1 |
Savon::Client#request
returns a
Savon::SOAP::Response
.
Everything's really just a Hash.
response.to_hash # => { :response => { :success => true, :name => "John" } }
Alright, sometimes it's XML.
response.to_xml # => "<response><success>true</success><name>John</name></response>"
The response also contains the HTTPI::Response
which (obviously) contains information about the HTTP response.
response.http # => #<HTTPI::Response:0x1017b4268 ...
By default, Savon raises both Savon::SOAP::Fault
and Savon::HTTP::Error
when encountering these
kind of errors.
begin
client.request :get_all_users
rescue Savon::SOAP::Fault => fault
log fault.to_s
end
Both errors inherit from Savon::Error
, so you can catch both very easily.
begin
client.request :get_all_users
rescue Savon::Error => error
log error.to_s
end
You can change the default of raising errors and if you did, you can still ask the response to check whether the request was successful.
response.success? # => false
response.soap_fault? # => true
response.http_error? # => false
And you can access the error objects themselves.
response.soap_fault # => Savon::SOAP::Fault
response.http_error # => Savon::HTTP::Error
Please notice, that these methods always return an error object, even if no error exists. To check if an error occured, you can either ask the response or the error objects.
response.soap_fault.present? # => true
response.http_error.present? # => false