SOAP WSDLDriverFactory header params


#1

Hi all,

I have a little bit of code which uses the WSDLDriverFactory library:
class Swrapper

def initialize(wsdl)
wsdl = SOAP::WSDLDriverFactory.new(wsdl)
@soap = wsdl.create_rpc_driver
end

def send_soap(method, params)
@soap.send("#{method}", params)
end
end

But, I can’t figure out how to add stuff into the header of the soap
message

  • like this:

<soapenv:Envelope
xmlns:soapenv=“http://schemas.xmlsoap.org/soap/envelope/
xmlns:bet=“http://www.example.com/namespace/xsd/webservice”>
soapenv:Header
ticket:identity
ticket:id3</bet:id>
ticket:codetest</ticket:code>
ticket:passwordpassword</ticket:password>
</ticket:identity>
</soapenv:Header>
soapenv:Body
ticket:title
ticket:summary1</ticket:summary>
</ticket:title>
</soapenv:Body>
</soapenv:Envelope>

If anyone’s used this library and knows, please shout! :slight_smile:

Thanks all
Steven


#2

Hi Steven,

Best thing to start off is get the newest version of SOAP4R from gem.
I’ve used the WSDL2Ruby tool. The instructions for use are up at:
http://dev.ctor.org/soap4r/wiki/Wsdl2Ruby

I’m not sure how you produce the exact header information you want but
this should help you.

Instead of ticket:id3</bet:id>

this code will produce something along the lines of;
n1:id3</n1:id>

soapAuthentication.rb
require ‘soap/header/simplehandler’

class SoapAuthHeader < SOAP::Header::SimpleHandler
NAMESPACE = ‘http://questionmark.com/QMWISE/
DIGEST =
ENCODING =
SIGNATURE =

def initialize()
super(XSD::QName.new(NAMESPACE, ‘Trust’))
end

def on_simple_outbound
{
“Encoding” => ENCODING,
“Digest” => DIGEST,
“Signature” => SIGNATURE
}

end
end

main.rb
require ‘defaultDriver.rb’
require ‘soapAuthentication.rb’

Create QMWise SOAP Driver

wsdl = “http://?wsdl”
user = “”
pass = “”
obj = defaultSOAP.new()
obj.wiredump_dev = STDERR if $DEBUG

trust = SoapAuthHeader.new
obj.headerhandler << trust

hope this helps a little. There’s very little documentation when it
comes to SOAP4R, so if you find out how to change the “n1” tag to
“ticket” can you let me know :wink:

Cheers,
Dan