The Ruby wsdl library doesn’t seem to be able to parse the
GoogleSearch.wsdl file (http://api.google.com/GoogleSearch.wsdl).
I am using ruby 1.8.1-preview2. This problem happens both with the
pre-installed wsdl code and the code from soap4r-1_5_1.
Here’s the symptom when I run the googleSearch/wsdlDriver example
from Soap4r:
Unknown attr {http://schemas.xmlsoap.org/wsdl/}arrayType.
Unknown attr {http://schemas.xmlsoap.org/wsdl/}arrayType.
/usr/local/lib/ruby/1.8/soap/encodingstyle/soapHandler.rb:396:in
decode_tag_by_wsdl': undefined method
namespace’ for nil:NilClass
(NoMethodError)
from /usr/local/lib/ruby/1.8/soap/encodingstyle/soapHandler.rb:179:in
decode_tag' from /usr/local/lib/ruby/1.8/soap/parser.rb:184:in
decode_tag’
from /usr/local/lib/ruby/1.8/soap/parser.rb:132:in start_element' from /usr/local/lib/ruby/1.8/xsd/xmlparser/parser.rb:78:in
start_element’
from /usr/local/lib/ruby/1.8/xsd/xmlparser/rexmlparser.rb:45:in
tag_start' from /usr/local/lib/ruby/1.8/rexml/parsers/streamparser.rb:17:in
parse’
from /usr/local/lib/ruby/1.8/rexml/document.rb:166:in parse_stream' from /usr/local/lib/ruby/1.8/xsd/xmlparser/rexmlparser.rb:38:in
do_parse’
from /usr/local/lib/ruby/1.8/soap/parser.rb:100:in parse' from /usr/local/lib/ruby/1.8/soap/processor.rb:47:in
unmarshal’
from /usr/local/lib/ruby/1.8/soap/wsdlDriver.rb:366:in invoke' from /usr/local/lib/ruby/1.8/soap/wsdlDriver.rb:301:in
rpc_send’
from (eval):2:in `doGoogleSearch’
from trial.rb:19
Those “Unknown attr” messages come from …/lib/ruby/wsdl/parser.rb in
decode_tag. A few puts’s make me think that this part of the WSDL
provokes them:
<xsd:complexType name="ResultElementArray">
<xsd:complexContent>
<xsd:restriction base="soapenc:Array">
<xsd:attribute ref="soapenc:arrayType"
wsdl:arrayType=“typens:ResultElement[]”/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="DirectoryCategoryArray">
<xsd:complexContent>
<xsd:restriction base="soapenc:Array">
<xsd:attribute ref="soapenc:arrayType"
wsdl:arrayType=“typens:DirectoryCategory[]”/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
(I deduced this by printing out the name and attrs in
start_element. One element that seems to cause the error prints as:
xsd:attribute
wsdl:arrayTypetypens:DirectoryCategory[]refsoapenc:arrayType
Plus, the above two elements are the only ones that contain
"arrayType".)
Unfortunately, I am scandalously ignorant when it comes to SOAP and
WSDL and all that, so I’m not sure where to take this next. Can
someone offer a clue?
···
Brian Marick
Consulting, training, contracting, and research
Focused on the intersection of testing, programming, and design
marick@testing.com, marick@visibleworkings.com
www.testing.com, www.visibleworkings.com