How to capture a SOAP exception from a webservice?

Iâ??m trying to catch a soap exception from a web service, but Iâ??m a n00b
and am having a hard time figuring it out.

Iâ??m using ruby 1.8.4 (win32)–if it matters.

Iâ??ve got the start of my program created and can receive successful soap
objects back from the webservice. So thatâ??s all working good.

Next, I want to capture SOAP exception errors. For example, Iâ??ll get a
message saying something does not exist or is not found. This is the
same message that is in the return XML â??faultstringâ? tag.

Do I have to find a way to parse the returned XML, or is there an easy
way to grab the soap exception I’m looking for?

Thanks for the help. BTW, I tried to use the forum search (I always try
that first), but it’s down for maintenance or something like that.

Thanks all,

-nate

begin
@query = @soap.apiFunction(
{‘Key’=>‘Value’,‘Key2’=>Value2’}
)
#rescue ::soap::FaultError => e
rescue ::XSD::ValueSpaceError => e
assert_equal(“{http://www.foo.com/api}FooBarEnum: cannot accept
‘foo’”,e.to_s)
end

Hope that helps…
-Chris

Hmmmâ?¦

If I understand what you were trying to tell me, I think I
adapted your example to my code and came up with this. BTW, â??paramâ? is
an int Iâ??m passing to the method.


if results = soap.FindPatientById( param )
then puts results.first_name
puts results.last_name
else
begin
rescue ::soap::FaultError => e
# rescue ::XSD::ValueSpaceError => e
puts e.to_s
end
end

I had something pretty similar to this already. â?¦but itâ??s not
working.

The way Iâ??m doing it, I donâ??t think I needed the â??assert equalâ?
statementâ??right? The most confusing parts to me are the â??rescueâ? lines.
Specifically, which one to use (I went with SOAP, but tried both) and
how you knew to put â??FaultErrorâ? there.

Like I said, Iâ??m a total n00b to ruby. I havenâ??t even tried programming
anything since my last C class about 6 years ago, so please be patient
if Iâ??m missing something obvious.

= )

Thanks again,

-nate

Chris McMahon wrote:

begin
@query = @soap.apiFunction(
{‘Key’=>‘Value’,‘Key2’=>Value2’}
)
#rescue ::soap::FaultError => e
rescue ::XSD::ValueSpaceError => e
assert_equal(“{http://www.foo.com/api}FooBarEnum: cannot accept
‘foo’”,e.to_s)
end

Hope that helps…
-Chris

On 8/3/06, Nate I. [email protected] wrote:

    puts e.to_s
    end

end

I had something pretty similar to this already. ?but it’s not
working.

From what I understand, I believe your method call has to be inside
the “begin…rescue” block, or “rescue” won’t be able to see the error
when it happens.

In other words, something like this:

begin
if ( results = soap.FindPatientById( param ) )
puts results.last_name
end
rescue ::soap::FaultError => e
puts e.to_s
end

Excellent; thanks!

Bira wrote:

On 8/3/06, Nate I. [email protected] wrote:

    puts e.to_s
    end

end

I had something pretty similar to this already. �but it’s not
working.

From what I understand, I believe your method call has to be inside
the “begin…rescue” block, or “rescue” won’t be able to see the error
when it happens.

In other words, something like this:

begin
if ( results = soap.FindPatientById( param ) )
puts results.last_name
end
rescue ::soap::FaultError => e
puts e.to_s
end

Hello.

= )

I know I’m close on this one–I can feel it. Can anyone help? I’d
appreciate it a lot.

Thanks,

-nate

Nate I. wrote:

Hmmmâ?¦

If I understand what you were trying to tell me, I think I
adapted your example to my code and came up with this. BTW, â??paramâ? is
an int Iâ??m passing to the method.


if results = soap.FindPatientById( param )
then puts results.first_name
puts results.last_name
else
begin
rescue ::soap::FaultError => e

rescue ::XSD::ValueSpaceError => e

puts e.to_s
end
end

I had something pretty similar to this already. â?¦but itâ??s not
working.

The way Iâ??m doing it, I donâ??t think I needed the â??assert equalâ?
statementâ??right? The most confusing parts to me are the â??rescueâ? lines.
Specifically, which one to use (I went with SOAP, but tried both) and
how you knew to put â??FaultErrorâ? there.

Like I said, Iâ??m a total n00b to ruby. I havenâ??t even tried programming
anything since my last C class about 6 years ago, so please be patient
if Iâ??m missing something obvious.

= )

Thanks again,

-nate

Chris McMahon wrote:

begin
@query = @soap.apiFunction(
{‘Key’=>‘Value’,‘Key2’=>Value2’}
)
#rescue ::soap::FaultError => e
rescue ::XSD::ValueSpaceError => e
assert_equal(“{http://www.foo.com/api}FooBarEnum: cannot accept
‘foo’”,e.to_s)
end

Hope that helps…
-Chris