Recommend this page to a friend! |
Top level forums | > | PHP Specialists | > | General | > | Web services WSDL SOAP |
|
Dipu.R - 2010-05-11 15:26:32
Hi
I need to create a new web-service by using php. And I need to use SOAP RPC/encoded for implementing this. I also need to authenticate the soap request using soap header information. Before doing main task that I have created a WSDL file, client and server files using php. I have managed to send the soap request with header. But I am unaware of using the header information in the server side. That is I don't know how to check the header value is correct or not. And I got error while I have setting "must-understand" to 1 or true. The error is "Header not understood". I am listing our WSDL, soap request, client and server here. Please guide me to create a good web service with authentication using soap headers. Thanks in advance Dipu WSDL <?xml version="1.0" encoding="ISO-8859-1"?> <definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlnssd="http://www.w3.org/2001/XMLSchema" xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://localhost/dipu/webservices/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://localhost/dipu/webservices/"> <types> <xsd:schema targetNamespace="http://localhost/dipu/webservices/"> <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/> </xsd:schema> </types> <message name="getCatalogEntryRequest"> <part name="catalogId" type="xsd:string"/> <part name="catalogId2" type="xsd:string"/> </message> <message name="getCatalogEntryRequestHeader"> <part name="username" type="xsd:string"/> </message> <message name="getCatalogEntryResponse"> <part name="Result" type="xsd:string"/> </message> <portType name="CalculatorPortType"> <operation name="getCatalogEntry"> <documentation>adds two string values and returns the result</documentation> <input message="tns:getCatalogEntryRequest"/> <output message="tns:getCatalogEntryResponse"/> </operation> </portType> <binding name="CalculatorBinding" type="tns:CalculatorPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="getCatalogEntry"> <soapperation soapAction="http://localhost/dipu/webservices/#getCatalogEntry" style="rpc"/> <input> <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost/dipu/webservices/"/> <soap:header message="tns:getCatalogEntryRequestHeader" part="username" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost/dipu/webservices/" /> </input> <output> <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost/dipu/webservices/"/> </output> </operation> </binding> <service name="Calculator"> <port name="CalculatorPort" binding="tns:CalculatorBinding"> <soap:address location="http://localhost/study/webservices/soapwithheader/wsdl_server2.php"/> </port> </service> </definitions> SOAP Request <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://localhost/dipu/webservices/" xmlnssd="http://www.w3.org/2001/XMLSchema" xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://namespace.example.com/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header> <ns2:username>dipu</ns2:username> </SOAP-ENV:Header> <SOAP-ENV:Body> <ns1:getCatalogEntry> <catalogId xsi:type="xsd:string">catalog1</catalogId> <catalogId2 xsi:type="xsd:string">catalogTest111</catalogId2> </ns1:getCatalogEntry> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Client File <?php ini_set("soap.wsdl_cache_enabled", "0"); $client = new SoapClient("catalog.wsdl",array('trace' => 1 )); $catalogId='catalog1'; $functions=$client->__getFunctions(); echo '<pre>'; print_r($functions); // $soapHeader=new SoapHeader('http://soapinterop.org/echoheader/','username','hello world'); // $response = $client->getCatalogEntry('catalog1','catalogTest111', $soapHeader); /*$bodyArr = array('catalog1', 'catalogTest111'); $response = $client->__soapCall('getCatalogEntry', $bodyArr,NULL,$soapHeader,NULL); */ // echo '--'.$client->__getLastRequest().'--'; $ns = 'http://namespace.example.com/'; //Body of the Soap Header. $header = new SOAPHeader($ns, 'username', 'dipu'); $testArr = array('catalogId'=>'catalog1','catalogId2'=>'catalogTest111'); $response=$client->__soapCall("getCatalogEntry",$testArr,NULL, $header); //Create Soap Header. echo $client->__getLastRequest(); //echo $client->__getLastRequestHeaders(); echo $response; ?> Server File <?php function getCatalogEntry($catalogId,$catalogId2) { if($catalogId=='catalog1') return "<HTML> <HEAD> <TITLE>Catalog</TITLE> </HEAD <BODY> <p> </p> <table border> <tr><th>CatalogId</th> <th>Journal</th><th>Section </th><th>Edition</th><th> Title</th><th>Author</th> </tr><tr><td>catalog1</td> <td>IBM developerWorks</td><td> XML</td><td>October 2005</td> <td>JAXP validation</td> <td>Brett McLaughlin</td></tr> <tr><td>$catalogId2</td> <td>IBM developerWorks</td><td> XML</td><td>October 2005</td> <td>JAXP validation</td> <td>Brett McLaughlin</td></tr> </table> </BODY> </HTML>"; elseif ($catalogId='catalog2') return "<HTML> <HEAD> <TITLE>Catalog</TITLE> </HEAD <BODY> <p> </p> <table border> <tr><th>CatalogId</th><th> Journal</th><th>Section</th> <th>Edition</th><th>Title </th><th>Author </th></tr><tr><td>catalog1 </td><td>IBM developerWorks</td> <td>XML</td><td>July 2006</td> <td>The Java XPath API </td><td>Elliotte Harold</td> </tr><tr><td>$catalogId2 </td><td>IBM developerWorks</td> <td>XML</td><td>July 2006</td> <td>The Java XPath API </td><td>Elliotte Harold</td> </tr> </table> </BODY> </HTML>"; } ini_set("soap.wsdl_cache_enabled", "0"); $server = new SoapServer("catalog.wsdl"); $server->addFunction("getCatalogEntry"); $server->handle(); ?> There are 3 replies in this thread, which are not being displayed. |
info at phpclasses dot org
.