PHP Classes

Web services WSDL SOAP

Recommend this page to a friend!

      Top level forums  >  PHP Specialists  >  General  >  Web services WSDL SOAP  
Subject:Web services WSDL SOAP
Summary:To create a web-service with authentication using soap header
Messages:4
Author:Dipu.R
Date:2010-05-11 14:22:12
Update:2010-05-12 06:18:14
 

  1. Web services WSDL SOAP   Reply   Report abuse  
Picture of Dipu.R 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.
Browsing this forum thread replies is available only to premium subscribers.


Go to the premium subscriptions page to learn how to become a premium subscriber and have full access to this forum.