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.
begin @query = @soap.apiFunction(
{'Key'=>'Value','Key2'=>Value2'}
) #rescue ::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
Nate Imaqaguy wrote:
···
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.
**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 ::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 ::FaultError => e
rescue ::XSD::ValueSpaceError => e
assert_equal("{http://www.foo.com/api}FooBarEnum: cannot accept
'foo'",e.to_s)
end
I know I'm close on this one--I can feel it. Can anyone help? I'd
appreciate it a lot.
Thanks,
-nate
Nate Imaqaguy 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 ::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 ::FaultError => e
rescue ::XSD::ValueSpaceError => e
assert_equal("{http://www.foo.com/api}FooBarEnum: cannot accept
'foo'",e.to_s)
end
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 ::FaultError => e
puts e.to_s
end
···
On 8/3/06, Nate Imaqaguy <breakingsoftware@gmail.com> wrote:
Hmmm…
----------------------------
if results = soap.FindPatientById( param )
then puts results.first_name
puts results.last_name
else
begin
rescue ::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.
On 8/3/06, Nate Imaqaguy <breakingsoftware@gmail.com> 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 ::FaultError => e
puts e.to_s
end