SOAP wsdlDriver doesn't work without soap4r?

H

Henry Jen

Hi,

I am trying to access a SOAP web service implemented in Java(I
believe), but there is a problem for xsd:string type argument, the
result request message always be empty string if I don't have 'soap4r'
(Inspired by this thread[1]).

Also, code generated with wsdl2ruby works well.

Would you please help to me understand why? I consider this is a bug
unless there is an explanation.

Here is the request envelop without soap4r,

<?xml version="1.0" encoding="utf-8" ?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<n1:login xmlns:n1="urn:com.example.cwp.cwpidws/wsdl/cwpidws"
env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<String_1 xsi:nil="true"></String_1>
<String_2 xsi:nil="true"></String_2>
<arrayOfString_3 n2:arrayType="xsd:string[3]"
xmlns:n2="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="n2:Array">
<item>EMAIL</item>
<item>LASTNAME</item>
<item>FIRSTNAME</item>
</arrayOfString_3>
</n1:login>
</env:Body>
</env:Envelope>

and here is the one with soap4r and works as expected,

<?xml version="1.0" encoding="utf-8" ?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<n1:login xmlns:n1="urn:com.example.cwp.cwpidws/wsdl/cwpidws"
env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<String_1 xsi:type="xsd:string">username</String_1>
<String_2 xsi:type="xsd:string">password</String_2>
<arrayOfString_3 n2:arrayType="xsd:string[3]"
xmlns:n2="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="n2:Array">
<item>EMAIL</item>
<item>LASTNAME</item>
<item>FIRSTNAME</item>
</arrayOfString_3>
</n1:login>
</env:Body>
</env:Envelope>

The code is like following, only the wsdl URL and username/password
are masked from original code.

#require 'rubygems'
#gem 'soap4r'

require 'soap/wsdlDriver'
require 'pp'
wsdl = 'https://example.com/cwpidws/cwpidws?WSDL'
driver = SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver

# Log SOAP request and response
driver.wiredump_file_base = "cwp-log.txt"

XSD::Charset.encoding = 'UTF8'
uid = 'username'
pwd = 'password'
response = driver.login(uid, pwd, [ "EMAIL", "LASTNAME", "FIRSTNAME" ])
pp(response)

The environments are

$ ruby -v
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
$ gem list soap4r
<snip>
soap4r (1.5.8)

Cheers,
Henry

[1] http://www.ruby-forum.com/topic/155169
 

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

Similar Threads


Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,044
Latest member
RonaldNen

Latest Threads

Top