# Wsdl/operation.rb blowing up

**URL:** <https://www.ruby-forum.com/t/wsdl-operation-rb-blowing-up/142729>\
**Category:** Ruby\
**Created:** [July 10, 2008, 10:10pm UTC](https://www.ruby-forum.com/t/wsdl-operation-rb-blowing-up/142729 "2008-07-10T22:10:38Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [July 10, 2008, 10:10pm UTC](https://www.ruby-forum.com/t/wsdl-operation-rb-blowing-up/142729/1 "2008-07-10T22:10:38Z")

</div>

I am attempting to do some SOAP scripting for my first time, and have  
run into a problem pretty early on. When I use the  
“factory.create\_rpc\_driver” I get the error as shown below.  
Interestingly, when I use the deprecated “factory.create\_driver” the  
driver is created, but the rest of my script doesn’t work (I think  
because the driver and rpc\_driver are different).

Anyway, if anyone can give a poor n00b a clue I’d be thankful.

Here the error I am recieving:

ignored attr: {}version  
ignored attr: {}abstract  
ignored attr: {}default  
/usr/lib/ruby/1.8/wsdl/operation.rb:67:in `outputparts': undefined method `find\_message’ for nil:NilClass (NoMethodError)  
from /usr/lib/ruby/1.8/wsdl/soap/methodDefCreator.rb:72:in  
`collect_documentparameter' from /usr/lib/ruby/1.8/soap/wsdlDriver.rb:132:in `create\_param\_def’  
from /usr/lib/ruby/1.8/soap/wsdlDriver.rb:101:in `add_operation' from /usr/lib/ruby/1.8/xsd/namedelements.rb:58:in `each’  
from /usr/lib/ruby/1.8/xsd/namedelements.rb:57:in `each' from /usr/lib/ruby/1.8/soap/wsdlDriver.rb:96:in `add\_operation’  
from /usr/lib/ruby/1.8/soap/wsdlDriver.rb:40:in `create\_rpc\_driver’  
from ./test.rb:10

Here’s my test script:

#!/usr/bin/ruby

require ‘soap/wsdlDriver’

soapServer=“[http://10.0.1.231:8443](http://10.0.1.231:8443)”  
systemServiceWSDL=‘/axis2/services/SystemService?wsdl’  
wsdlURL=“#{soapServer}#{systemServiceWSDL}”

factory = SOAP::WSDLDriverFactory.new(wsdlURL)  
driver = factory.create\_rpc\_driver  
driver.wiredump\_dev = STDOUT

result = driver.LoginRequest(:domainName =\> “domain”, :userName =\>  
“admin”, :password =\> “password”)

puts result

And here is the wsdl document I get from the remote server:

\<?xml version="1.0" encoding="UTF-8"?\>

\<wsdl:definitions xmlns:impl=“[http://somewhere.com/webproxy/](http://somewhere.com/webproxy/)  
systemservice” xmlns:http=“[http://schemas.xmlsoap.org/wsdl/http/](http://schemas.xmlsoap.org/wsdl/http/)”  
xmlns:soap=“[http://schemas.xmlsoap.org/wsdl/soap/](http://schemas.xmlsoap.org/wsdl/soap/)” xmlns:wsdl=“http://  
[schemas.xmlsoap.org/wsdl/](http://schemas.xmlsoap.org/wsdl/)” xmlns=“[http://schemas.xmlsoap.org/wsdl/](http://schemas.xmlsoap.org/wsdl/)”  
xmlns:xs=“[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)” xmlns:core=“http://  
[somewhere.com/core](http://somewhere.com/core)” xmlns:ns=“[http://schemas.xmlsoap.org/soap/](http://schemas.xmlsoap.org/soap/)  
encoding/” name=“SystemService” targetNamespace=“[http://somewhere.com/](http://somewhere.com/)  
webproxy/systemservice”\>  
wsdl:types  
\<xs:schema version=“1.0” elementFormDefault=“qualified”  
targetNamespace=“[http://somewhere.com/webproxy/systemservice](http://somewhere.com/webproxy/systemservice)”  
xmlns=“[http://somewhere.com/webproxy/systemservice](http://somewhere.com/webproxy/systemservice)” xmlns:core=“http://  
[somewhere.com/core](http://somewhere.com/core)” xmlns:impl=“[http://somewhere.com/webproxy/](http://somewhere.com/webproxy/)  
systemservice”\>  
\<xs:import namespace=“[http://somewhere.com/core](http://somewhere.com/core)”  
schemaLocation=“common/BaseMessages.xsd”/\>  
\<xs:simpleType name=“LoginStatusCodeType”\>  
\<xs:restriction base=“xs:token”\>  
\<xs:enumeration value=“Success”/\>  
\<xs:enumeration value=“Failure”/\>  
\<xs:enumeration value=“Challenge”/\>  
\</xs:restriction\>  
\</xs:simpleType\>  
\<xs:complexType name=“LoginStatus”\>  
xs:sequence  
\<xs:element name=“status” type=“impl:LoginStatusCodeType”/\>  
\<xs:element name=“challenge” type=“xs:string” minOccurs=“0”/\>  
\</xs:sequence\>  
\</xs:complexType\>  
\<xs:element name=“LoginRequest”\>  
xs:annotation  
xs:documentationLogin into the system

domainName: the domain to login  
userName: the user name  
password: the password  
\</xs:documentation\>  
\</xs:annotation\>  
xs:complexType  
xs:complexContent  
\<xs:extension base=“core:SimpleRequestType”\>  
xs:sequence  
\<xs:element name=“domainName” type=“xs:string”/\>  
\<xs:element name=“userName” type=“xs:string”/\>  
\<xs:element name=“password” type=“xs:string”/\>  
\</xs:sequence\>  
\</xs:extension\>  
\</xs:complexContent\>  
\</xs:complexType\>  
\</xs:element\>  
\<xs:complexType name=“LoginResponseType”\>  
xs:annotation  
xs:documentationThe response of the login request

loginStatus: if the status is Success, a valid token is returned for  
requests followed, if the status is Challenge, the response to the  
challenge shall be sent  
authToken: the token used by the further requests  
\</xs:documentation\>  
\</xs:annotation\>  
xs:complexContent  
\<xs:extension base=“core:SimpleResponseType”\>  
xs:sequence  
\<xs:element name=“loginStatus” type=“impl:LoginStatus”/\>  
\<xs:element name=“authToken” type=“core:AuthTokenType”  
minOccurs=“0”/\>  
\</xs:sequence\>  
\</xs:extension\>  
\</xs:complexContent\>  
\</xs:complexType\>  
\<xs:element name=“LoginResponse” type=“impl:LoginResponseType”/\>  
\<xs:element name=“RespondToChallengeRequest”\>  
xs:annotation  
xs:documentationSend the response to the challenge  
\</xs:documentation\>  
\</xs:annotation\>  
xs:complexType  
xs:complexContent  
\<xs:extension base=“core:SimpleRequestType”\>  
xs:sequence  
\<xs:element name=“challengeResponse” type=“xs:string”/\>  
\</xs:sequence\>  
\</xs:extension\>  
\</xs:complexContent\>  
\</xs:complexType\>  
\</xs:element\>  
\<xs:element name=“RespondToChallengeResponse”  
type=“impl:LoginResponseType”/\>  
\<xs:element name=“LogoutRequest”\>  
xs:complexType  
xs:complexContent  
\<xs:extension base=“core:SimpleRequestType”/\>  
\</xs:complexContent\>  
\</xs:complexType\>  
\</xs:element\>  
\<xs:complexType name=“ServiceDescType”\>  
xs:sequence  
\<xs:element name=“name” type=“xs:string”/\>  
\<xs:element name=“version” type=“xs:string”/\>  
\<xs:element name=“definition” type=“xs:string”/\>  
\</xs:sequence\>  
\</xs:complexType\>  
\<xs:element name=“GetSystemInfoRequest”\>  
xs:complexType  
xs:annotation  
xs:documentationGet the system informations: the service  
description and all the accessible domain ids and names. If no service  
name is specified, return the service description of all services  
\</xs:documentation\>  
\</xs:annotation\>  
xs:complexContent  
\<xs:extension base=“core:SimpleRequestType”\>  
xs:sequence  
\<xs:element name=“serviceName” type=“xs:string”  
minOccurs=“0”  
maxOccurs=“unbounded”/\>  
\</xs:sequence\>  
\</xs:extension\>  
\</xs:complexContent\>  
\</xs:complexType\>  
\</xs:element\>  
\<xs:element name=“GetSystemInfoResponse”\>  
xs:complexType  
xs:annotation  
xs:documentationReturn the service list and all the  
accessible  
domain ids and names  
\</xs:documentation\>  
\</xs:annotation\>  
xs:complexContent  
\<xs:extension base=“core:SimpleResponseType”\>  
xs:sequence  
\<xs:element name=“serviceDesc”  
type=“impl:ServiceDescType”  
minOccurs=“0” maxOccurs=“unbounded”/\>  
\<xs:element name=“domainName” type=“xs:string”  
maxOccurs=“unbounded”/\>  
\<xs:element name=“domainId” type=“xs:unsignedInt”  
maxOccurs=“unbounded”/\>  
\</xs:sequence\>  
\</xs:extension\>  
\</xs:complexContent\>  
\</xs:complexType\>  
\</xs:element\>  
\</xs:schema\>  
\</wsdl:types\>  
\<wsdl:message name=“LoginRequest”\>  
\<wsdl:part name=“LoginRequest” element=“impl:LoginRequest”/\>  
\</wsdl:message\>  
\<wsdl:message name=“LoginResponse”\>  
\<wsdl:part name=“LoginRequest” element=“impl:LoginResponse”/\>  
\</wsdl:message\>  
\<wsdl:message name=“RespondToChallengeRequest”\>  
\<wsdl:part name=“RespondToChallengeRequest”  
element=“impl:RespondToChallengeRequest”/\>  
\</wsdl:message\>  
\<wsdl:message name=“RespondToChallengeResponse”\>  
\<wsdl:part name=“RespondToChallengeResponse”  
element=“impl:RespondToChallengeResponse”/\>  
\</wsdl:message\>  
\<wsdl:message name=“LogoutRequest”\>  
\<wsdl:part name=“LogoutRequest” element=“impl:LogoutRequest”/\>  
\</wsdl:message\>  
\<wsdl:message name=“GetSystemInfoRequest”\>  
\<wsdl:part name=“GetSystemInfoRequest”  
element=“impl:GetSystemInfoRequest”/\>  
\</wsdl:message\>  
\<wsdl:message name=“GetSystemInfoResponse”\>  
\<wsdl:part name=“GetSystemInfoResponse”  
element=“impl:GetSystemInfoResponse”/\>  
\</wsdl:message\>  
\<wsdl:portType name=“SystemPortType”\>  
\<wsdl:operation name=“LoginRequest”\>  
\<wsdl:input message=“impl:LoginRequest”/\>  
\<wsdl:output message=“impl:LoginResponse”/\>  
\</wsdl:operation\>  
\<wsdl:operation name=“RespondToChallengeRequest”\>  
\<wsdl:input message=“impl:RespondToChallengeRequest”/\>  
\<wsdl:output message=“impl:RespondToChallengeResponse”/\>  
\</wsdl:operation\>  
\<wsdl:operation name=“LogoutRequest”\>  
\<wsdl:input message=“impl:LogoutRequest”/\>  
\</wsdl:operation\>  
\<wsdl:operation name=“GetSystemInfoRequest”\>  
\<wsdl:input message=“impl:GetSystemInfoRequest”/\>  
\<wsdl:output message=“impl:GetSystemInfoResponse”/\>  
\</wsdl:operation\>  
\</wsdl:portType\>  
\<wsdl:binding name=“SystemSoapBinding” type=“impl:SystemPortType”\>  
\<soap:binding style=“document”  
transport=“[http://schemas.xmlsoap.org/](http://schemas.xmlsoap.org/)  
soap/http”/\>  
\<wsdl:operation name=“LoginRequest”\>  
\<soap:operation soapAction=“urn:#LoginRequest”/\>  
wsdl:input  
\<soap:body use=“literal”/\>  
\</wsdl:input\>  
wsdl:output  
\<soap:body use=“literal”/\>  
\</wsdl:output\>  
\</wsdl:operation\>  
\<wsdl:operation name=“RespondToChallengeRequest”\>  
\<soap:operation soapAction=“urn:#RespondToChallengeRequest”/\>  
wsdl:input  
\<soap:body use=“literal”/\>  
\</wsdl:input\>  
wsdl:output  
\<soap:body use=“literal”/\>  
\</wsdl:output\>  
\</wsdl:operation\>  
\<wsdl:operation name=“LogoutRequest”\>  
\<soap:operation soapAction=“urn:#LogoutRequest”/\>  
wsdl:input  
\<soap:body use=“literal”/\>  
\</wsdl:input\>  
\</wsdl:operation\>  
\<wsdl:operation name=“GetSystemInfoRequest”\>  
\<soap:operation soapAction=“urn:#GetSystemInfoRequest”/\>  
  
\<soap:body use=“literal”/\>  
  
  
\<soap:body use=“literal”/\>  
  
\</wsdl:operation\>  
\</wsdl:binding\>  
\<wsdl:service name=“SystemService”\>  
\<wsdl:port name=“System” binding=“impl:SystemSoapBinding”\>  
\<soap:address location=“[http://localhost:8080/axis2/services/](http://localhost:8080/axis2/services/)  
SystemService”/\>  
\</wsdl:port\>  
\</wsdl:service\>  
\</wsdl:definitions\>
