Extract data from SOAP response

Hi everyone

I am using a SOAP web service to get some information. The SOAP4R library is supposed to create methods for the elements in a SOAP response. When I do my SOAP call these methods are not created. The informations shows up when I do soap_response.inspect but I cannot access it directly. Is there any way to get access to the raw XML response so I can parse it myself?

Kindest regards and thanks in advance

Erik Lindblad

Erik,

You can use REXML to parse the response directly, which I find easier than messing with the generated methods. You have to learn a little Xpath, but it's pretty easy to pick up. I use code like this:

require 'rexml/document' require 'rexml/formatters/pretty'

response = REXML::Document.new(soap_result)

element = xml.elements['//result'] # can use any Xpath query here if element.attributes['code'] == "100"   # etc else   # etc end

-Mike Subelsky Hacker & Improvisor // subelsky.com

Great advice Mike. I will definitely use it. The problem (which feels quite silly) is that I cannot get the raw SOAP response from the SOAP::Mapping::Object instance that is the result of the SOAP call. I would like to do xml_tree =REXML::Document.new(soap_result.raw_xml) But what is the raw_xml method?

Many thanks in advance

Erik

Erik Lindblad wrote:

Great advice Mike. I will definitely use it. The problem (which feels quite silly) is that I cannot get the raw SOAP response from the SOAP::Mapping::Object instance that is the result of the SOAP call. I would like to do xml_tree =REXML::Document.new(soap_result.raw_xml) But what is the raw_xml method?

Many thanks in advance

Erik

Hi Erik,

Were you able to resolve this issue? I am also having the same issue... please help...I don't know how to parse my SOAP::Mapping::Object

Googled a lot....but no use..

Thanks Anu

hi all,

can you help me how i can use soap response as xml file in Rexml.

for example:

response = obj.createUser(createUsers)

response is my final result which i am getting by running script.

so if i use xml_tree =REXML::Document.new(response.raw_xml)

that time it gives me error.

so anyone can tell me how can i convert this file to xml and use for rexml.

i want to use rexml for parsing attribute from response file.

Thanks

Rpatel

hi all,

can you help me how i can use soap response as xml file in Rexml.

for example:

response = obj.createUser(createUsers)

response is my final result which i am getting by running script.

so if i use xml_tree =REXML::Document.new(response.raw_xml)

that time it gives me error.

so anyone can tell me how can i convert this file to xml and use for rexml.

i want to use rexml for parsing attribute from response file.

Thanks

Rpatel

To get raw XML from SOAP4R set wiredump_file_base attribute of SOAP::RPC::Driver instance to some string value. It will be used as a prefix for files to save raw XML request and response in the current dir.

Or, alternatively, do 'driver.wiredump_dev = STDOUT' and SOAP4R will push raw XML to the console.

Dm.L.