wsdl/operation.rb blowing up

Discussion in 'Ruby' started by Dan.McNulty@gmail.com, Jul 10, 2008.

  1. Guest

    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"
    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/
    systemservice" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://
    schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:core="http://
    somewhere.com/core" xmlns:ns="http://schemas.xmlsoap.org/soap/
    encoding/" name="SystemService" targetNamespace="http://somewhere.com/
    webproxy/systemservice">
    <wsdl:types>
    <xs:schema version="1.0" elementFormDefault="qualified"
    targetNamespace="http://somewhere.com/webproxy/systemservice"
    xmlns="http://somewhere.com/webproxy/systemservice" xmlns:core="http://
    somewhere.com/core" xmlns:impl="http://somewhere.com/webproxy/
    systemservice">
    <xs:import namespace="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:documentation>Login 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:documentation>The 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:documentation>Send 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:documentation>Get 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:documentation>Return 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:eek:peration name="LoginRequest">
    <wsdl:input message="impl:LoginRequest"/>
    <wsdl:eek:utput message="impl:LoginResponse"/>
    </wsdl:eek:peration>
    <wsdl:eek:peration name="RespondToChallengeRequest">
    <wsdl:input message="impl:RespondToChallengeRequest"/>
    <wsdl:eek:utput message="impl:RespondToChallengeResponse"/>
    </wsdl:eek:peration>
    <wsdl:eek:peration name="LogoutRequest">
    <wsdl:input message="impl:LogoutRequest"/>
    </wsdl:eek:peration>
    <wsdl:eek:peration name="GetSystemInfoRequest">
    <wsdl:input message="impl:GetSystemInfoRequest"/>
    <wsdl:eek:utput message="impl:GetSystemInfoResponse"/>
    </wsdl:eek:peration>
    </wsdl:portType>
    <wsdl:binding name="SystemSoapBinding" type="impl:SystemPortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/
    soap/http"/>
    <wsdl:eek:peration name="LoginRequest">
    <soap:eek:peration soapAction="urn:#LoginRequest"/>
    <wsdl:input>
    <soap:body use="literal"/>
    </wsdl:input>
    <wsdl:eek:utput>
    <soap:body use="literal"/>
    </wsdl:eek:utput>
    </wsdl:eek:peration>
    <wsdl:eek:peration name="RespondToChallengeRequest">
    <soap:eek:peration soapAction="urn:#RespondToChallengeRequest"/>
    <wsdl:input>
    <soap:body use="literal"/>
    </wsdl:input>
    <wsdl:eek:utput>
    <soap:body use="literal"/>
    </wsdl:eek:utput>
    </wsdl:eek:peration>
    <wsdl:eek:peration name="LogoutRequest">
    <soap:eek:peration soapAction="urn:#LogoutRequest"/>
    <wsdl:input>
    <soap:body use="literal"/>
    </wsdl:input>
    </wsdl:eek:peration>
    <wsdl:eek:peration name="GetSystemInfoRequest">
    <soap:eek:peration soapAction="urn:#GetSystemInfoRequest"/>
    <input>
    <soap:body use="literal"/>
    </input>
    <output>
    <soap:body use="literal"/>
    </output>
    </wsdl:eek:peration>
    </wsdl:binding>
    <wsdl:service name="SystemService">
    <wsdl:port name="System" binding="impl:SystemSoapBinding">
    <soap:address location="http://localhost:8080/axis2/services/
    SystemService"/>
    </wsdl:port>
    </wsdl:service>
    </wsdl:definitions>
    , Jul 10, 2008
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Ashish
    Replies:
    1
    Views:
    529
    bruce barker
    Nov 17, 2003
  2. rao
    Replies:
    1
    Views:
    3,268
  3. asj
    Replies:
    138
    Views:
    2,384
    William Brogden
    Sep 1, 2003
  4. Replies:
    2
    Views:
    361
  5. John Nagle
    Replies:
    3
    Views:
    627
    Waldemar Osuch
    Nov 10, 2007
Loading...

Share This Page