Hi all,
Got a question about the Ruby SOAP library. I've generated a proxy
using the SOAP::WSDLDriverFactory as follows:
ws =
SOAP::WSDLDriverFactory.new('http://foo.com/foo.wsdl').create_rpc_driver
I can see that this generates methods for each defined operation, and I
use them thusly:
ws.WSGetResults(:maxRecords => 1, ...)
The method and parameters are translated to the appropriate XML in the
SOAP message body. However, some operations require a 'User' and
'Password' to be in the message _header_. I've looked through the
documentation and mailing lists with no luck. How can one achieve this?
My code is listed below.
Thanks!
Brian Hartin
---- soaptest.rb ----
require 'soap/wsdlDriver'
require 'date'
ws =
SOAP::WSDLDriverFactory.new('http://foo.com/foo.wsdl').create_rpc_driver
ws.generate_explicit_type = true
r = ws.WSHeartbeat({}) # Works because it doesn't require authentication
r = g.WSGetXmlResults(:recordId => 123, :recordLimit => 200) # Doesn't
work
---- Example SOAP request, according to vendor ----
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<!-- I don't know how to populate the header -->
<WSAuthHeader xmlns="http://foo.com/WSFooSvc">
<User>string</User>
<Password>string</Password>
</WSAuthHeader>
</soap:Header>
<soap:Body>
<WSGetXmlResults xmlns="http://foo.com/WSFooSvc">
<recordId>int</recordId>
<recordLimit>int</recordLimit>
</WSGetXmlResults>
</soap:Body>
</soap:Envelope>
···
****************************************************************************
This email may contain confidential material.
If you were not an intended recipient,
Please notify the sender and delete all copies.
We may monitor email to and from our network.
****************************************************************************