Ruby SOAP WSDL client call not working?

M

Moazam Raja

Hi all, I am testing out SOAP/WSDL interaction between Ruby and a
webservice written in Java. I am able to test the Java webservice via
a Java client and get a proper response back, but for whatever reason when
I use Ruby to call my webservice, I get a null SOAP Mapping Object returned back to me.

My Ruby code which is calling the webservice is as follows,

require 'soap/wsdlDriver'
wsdl ='http://localhost:8080/helloservice-war/HelloService?wsdl'
driver = SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver
String myString = 'pookieMon'
puts "Your answer = %s" % driver.sayHello(myString)
puts driver.sayHello(nil)

I'm trying two different 'puts' statements, just in case. I noticed by
looking at my server logs that Ruby is not even passing an argument to
the webservice and hence is not getting anything back either.

Here is what Ruby sends,

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><env:Header/><env:Body><n1:sayHello
xmlns:n1="http://endpoint.helloservice/">
</n1:sayHello></env:Body></env:Envelope>

Here is what my Java code sends (and is successful),

<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header/>
<S:Body>
<ns2:sayHello xmlns:ns2="http://endpoint.helloservice/">
<arg0>pookieMon</arg0>
</ns2:sayHello>
</S:Body>
</S:Envelope>


What's going on here, am I just making a very obvious simple mistake here,
or does the Ruby soap/wsdlDriver work differently? I'm a Ruby (and SOAP!)
newbie.

Thanks.

-Moazam
 
M

Moazam Raja

I figured out my earlier problem, here is the solution to talking to
my own Java webservice via WSDL,

------------------------------------------------------------------------
# main.rb
# April 18, 2007
#
require 'soap/wsdlDriver'

wsdl ='http://localhost:8080/helloservice-war/HelloService?wsdl'
driver = SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver

sayHelloResponse = driver.sayHello:)arg0 => 'pookieMon')
puts sayHelloResponse.return
------------------------------------------------------------------------


Earlier, the two main problems were,

1.) I was doing 'sayHelloResponse = driver.sayHello('pookieMon')',
but that kept sending a null to my webservice. I had to change this
to 'sayHelloResponse = driver.sayHello:)arg0 => 'pookieMon')'.

2.) I kept getting a SOAP Message Object returned as a result and had
to use object.inspect to get the actual message. Turns out the
returning XML returns the result String in a <return>String</return>
format. The solution is to call the return method via Object.return.

Thanks.

-Moazam
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,065
Latest member
OrderGreenAcreCBD

Latest Threads

Top