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.
WSDL
<?xml version="1.0" encoding="ISO-8859-1"?>
adds two string values and returns the result
SOAP Request
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=“http://schemas.xmlsoap.org/soap/envelope/”
xmlns:ns1=“http://localhost/dipu/webservices/”
xmlns:xsd=“http://www.w3.org/2001/XMLSchema”
xmlns:xsi=“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:usernamedipu</ns2:username>
</SOAP-ENV:Header>
SOAP-ENV:Body
ns1:getCatalogEntry
catalog1
catalogTest111
</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 '
';
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 "
Catalog
</HEAD
| CatalogId |
Journal |
Section
|
Edition |
Title |
Author |
| catalog1 |
IBM developerWorks |
XML |
October 2005 |
JAXP validation |
Brett McLaughlin |
| $catalogId2 |
IBM developerWorks |
XML |
October 2005 |
JAXP validation |
Brett McLaughlin |
";
elseif ($catalogId='catalog2')
return "
Catalog
</HEAD
| CatalogId |
Journal |
Section |
Edition |
Title
|
Author
|
| catalog1
|
IBM developerWorks |
XML |
July 2006 |
The Java XPath API
|
Elliotte Harold |
| $catalogId2
|
IBM developerWorks |
XML |
July 2006 |
The Java XPath API
|
Elliotte Harold |
";
}
ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer("catalog.wsdl");
$server->addFunction("getCatalogEntry");
$server->handle();
?>
#API-Management#soa#webMethods