SOAP4R WSDL response

J

Jim Menard

I'm trying to use wsdlDriver.rb to call a Web service. I have a WSDL
file. When I run my script, it connects to the Web service, calls the
operation I specify ("approve"), and receives the response string.
However, it doesn't put the response string into the message part that
the operation "approve" uses as its output message. Instead, it tries
to find something called "approveResponse", which is not described in
the WSDL file. I see the following error:

c:/ruby/lib/ruby/1.8/wsdl/soap/complexType.rb:69:in
`child_defined_complextype': Cannot find
{http://www.w3.org/2001/XMLSchema}string as a children of
{http://loans.org/wsdl/loan-approval}approveResponse. (RuntimeError)
from c:/ruby/lib/ruby/1.8/soap/encodingstyle/soapHandler.rb:382:in
`decode_tag_by_wsdl'
...

Why isn't the response string being put into the message part that the
operation "approve" uses as its output message?

Jim
 
J

Jim Menard

Hate to reply to my own question, but I've learned something about what
was going wrong. Instead, I have a new question.

I'm trying to use wsdlDriver.rb to call a Web service. I have a WSDL
file. When I run my script, it connects to the Web service, calls the
operation I specify ("approve"), and receives the response string.
However, it doesn't put the response string into the message part that
the operation "approve" uses as its output message. Instead, it tries
to find something called "approveResponse", which is not described in
the WSDL file. I see the following error:

c:/ruby/lib/ruby/1.8/wsdl/soap/complexType.rb:69:in
`child_defined_complextype': Cannot find
{http://www.w3.org/2001/XMLSchema}string as a children of
{http://loans.org/wsdl/loan-approval}approveResponse. (RuntimeError)
from c:/ruby/lib/ruby/1.8/soap/encodingstyle/soapHandler.rb:382:in
`decode_tag_by_wsdl'
...

It turns out that the WSDL didn't match the reply from the server. The
reply body is

<ns1:approveResponse soapenv:encodingStyle="..." xmlns:ns1="...">
<xsd:string>approved</xsd:string>
</ns1:approveResponse>

Now, the WSDL for the reply message used to be

<message name="approvalMessage">
<part name="accept" type="xsd:string"/>
</message>

so I tried changing that to

<message name="approvalMessage">
<part name="approveResponse" type="xsd:string"/>
</message>

but that didn't work. I saw the same error message ("can't find string
as child of approveResponse"). So I tried


<message name="approvalMessage">
<part name="string" type="xsd:string"/>
</message>

and it worked! Now I need to figure out why I have to call the part
"string". Does anyone know what is going on here?

Thanks for your help.

Jim
 

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

Staff online

Members online

Forum statistics

Threads
473,769
Messages
2,569,577
Members
45,052
Latest member
LucyCarper

Latest Threads

Top