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