# SOAP Client -getting data from SOAP::Mapping::Object?

**URL:** <https://www.ruby-forum.com/t/soap-client-getting-data-from-soap-object/104839>\
**Category:** Ruby\
**Created:** [May 23, 2007, 4:42am UTC](https://www.ruby-forum.com/t/soap-client-getting-data-from-soap-object/104839 "2007-05-23T04:42:26Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![masonbrown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b38774/32.png) [@masonbrown](https://www.ruby-forum.com/u/masonbrown)\
**Post date:** [May 23, 2007, 4:42am UTC](https://www.ruby-forum.com/t/soap-client-getting-data-from-soap-object/104839/1 "2007-05-23T04:42:26Z")

</div>

I’ve been staring at this for too long, and at this point my mind can’t  
think clearly enough to continue without help… I’ve never worked  
with SOAP before, so forgive me if I’m overlooking something simple.

I’m using Ruby to access data via SOAP from a server (using soap4r and  
http-access2). I know I’m connecting successfully and getting the right  
information, but don’t know how to access the data from the response.  
I’ve been testing with irb using the following:

require ‘soap/wsdlDriver’  
require ‘http-access2’  
wsdl = ‘./proton.wsdl’  
driver = SOAP::WSDLDriverFactory.new(wsdl).create\_rpc\_driver  
driver.options[“protocol.http.cookie\_store\_file”] = ‘./cookie.file’  
driver.login(‘username’, ‘password’)  
result = driver.getEntities(‘2588676’, ‘IPv4Network’, ‘0’, ‘0’)  
driver.logout

The URL for the SOAP server is read correctly from the wsdl file, and  
the methods “login” and “getEntityById” are also read from the wsdl.  
“result” is an array with only one element:  
“result[0].class =\> SOAP::Mapping::Object”

The result itself looks like a single string concatenating each of the  
elements received in the response:

irb(main):013:0\> result[0]  
=\> #\<SOAP::Mapping::Object:0xac7e34  
{[http://api.proton](http://api.proton)}value=#\<SOAP::Mapping::Object:0xac7cea  
{[http://api.proton](http://api.proton)}id=“2588677”  
{[http://api.proton](http://api.proton)}name=#SOAP::Mapping::Object:0xac78f8  
{[http://api.proton](http://api.proton)}properties=#SOAP::Mapping::Object:0xac751a  
{[http://api.proton](http://api.proton)}type=“IPv4Network”\>\>

According to the WSDL, the response should be type APIEntity.Array,  
which is composed of APIEntity objects with “id”, “name”, “properties”,  
and “type” elements (all defined in the wsdl). So it looks like I’m  
very close to having the data where I can actually use it (as an  
accessible object or even an array), but I’m just not there yet. Can  
anyone tell me how to get the data out of the SOAP::Mapping::Object  
objects?

Thanks!

---

<div class="post-metadata">

**Author:** ![masonbrown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b38774/32.png) [@masonbrown](https://www.ruby-forum.com/u/masonbrown)\
**Post date:** [May 23, 2007, 5:27am UTC](https://www.ruby-forum.com/t/soap-client-getting-data-from-soap-object/104839/2 "2007-05-23T05:27:01Z")

</div>

I’ve only messed with SOAP4r on one project, but I found that I could  
get at the data in the response by treating it like a hash (a nested  
hash, actually).

If you look at the wsdl for the service you’re calling, it should  
define the response you’re expecting back… use the element names in  
there as the hash keys. Or, you might be able to find some way of  
iterating through the keys (.each\_key maybe) in the response…

Or maybe I’m totally off base here… 🙂

hth,

b
