Re: [SOAP] wsdl complex types help

From: Date: Mon, 31 Oct 2005 17:31:38 +0000
Subject: Re: [SOAP] wsdl complex types help
References: 1  Groups: php.soap 
Request: Send a blank email to php-soap+get-2047@lists.php.net to get a copy of this message
I am trying to use soapclient to connect to a web service. Unfortunately, I'm having trouble figuring out how to get php to understand the wsdl file and send back the correct message - particularly on a function that wants an array that forms a complex type.
Replying to myself just in case anyone else has similar issues. I found a work-around that will at least get me up and running. I found that I can simply construct the correct xml message and send it over with __doRequest which simply returns the response. This works OK since the reply value is simply a boolean anyway in my case, so parsing that will be pretty easy. However, it would be nice if I could just call the function and have soapclient understand how to construct it. But, here is what I did. $client = new SoapClient($wsdl,$options); $location = "http://urlto/webservice"; $hostkey = "1.1.1.1"; $username = "username"; $password = "password"; $auth = getAuthXML($hostkey,$username,$password); $response = $client->__doRequest($auth,$location,$action,$version); print $response; # in my case response is true/false The getAuthXML function is simply taking the variables I want to use and constructing an xml message from it. The __doRequest then sends over that XML message. This is vs calling the authenticate function and having soapclient attempt to construct the xml message itself based on your arguments. function getAuthXML($hostkey,$username,$password) { $auth = <<<EOD <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://w ww.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <ns1:authenticate soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1 ="http://common.wsg.sesm.cisco.com"> <hostkey xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">$ hostkey</hostkey> <credentials xsi:type="soapenc:Array" soapenc:arrayType="ns1:Credential[1]" xmlns:soapenc="h ttp://schemas.xmlsoap.org/soap/encoding/">
    <item href="#id0"/>
</credentials> </ns1:authenticate> <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/en coding/" xsi:type="ns2:Credential" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xm lns:ns2="http://common.wsg.sesm.cisco.com"> <identity href="#id1"/> <credential xsi:type="soapenc:string">$password</credential> </multiRef> <multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/en coding/" xsi:type="ns3:Identity" xmlns:ns3="http://common.wsg.sesm.cisco.com" xmlns:soapenc="ht tp://schemas.xmlsoap.org/soap/encoding/"> <type xsi:type="soapenc:string">user</type> <principal xsi:type="soapenc:string">$username</principal> </multiRef> </soapenv:Body> </soapenv:Envelope> EOD; return $auth; } Hope that helps someone. If anyone does still have advice on correcting my wsdl file or php workaround for this (perhaps classmap?), I'd love to hear them. Thanks Dusty Doris

« previous php.soap (#2047) next »