Groupe 1C (normes)

Date de création : 14 mai 2003
Dernière modification : 15 mai 2003
Diffusion : internet

Construction d'un serveur PHP web-services

Problématique U-Portal

Dans certaines universités (notamment Nancy2), il existe un existant important en matière de développement PHP. Le but de ce document est d'étudier la faisabilité de la création d'un serveur de web-services PHP se greffant sur une application existante puis son intégration dans le UPortal.

Installation de la librairie PEAR::SOAP

Un exemple simple : retourner le nom d'un étudiant connaissant son numéro INE + clé

class ws_apogee
/**
* fonction qui retourne le nom d'un étudiant connaissant son INE + clé
* @access public
* @param p_INE string code INE + clé de l'étudiant
* @return string nom de l'étudiant
*/
function getNomAvecINE($p_INE) {
return "ziller";
}
}
$ss = new SOAP_Server();
$sc = new ws_apogee();
$ss->addObjectMap($sc, 'urn:ws_apogee');
$ss->service($HTTP_RAW_POST_DATA);

Un client php pour appeller notre service-web

Le document WSDL correspondant

Génération automatique du WSDL

function ws_apogee() 
  {
  $this->__dispatch_map['getNomAvecINE'] = array( 'in' => array('input' => 'string'), 'out' => array('return' => 'string'));
  }
if (isset($_SERVER['REQUEST_METHOD']) &&
$_SERVER['REQUEST_METHOD']=='POST') {
$ss->service($HTTP_RAW_POST_DATA);
} else {
require_once 'SOAP/Disco.php';
header("Content-type: text/xml");
$disco = new SOAP_DISCO_Server($ss,"ws_apogee");
if (isset($_SERVER['QUERY_STRING']) &&
strcasecmp($_SERVER['QUERY_STRING'],'wsdl')==0) {
echo $disco->getWSDL();
} else {
echo $disco->getDISCO();
}
exit;
}

Invocation à l'aide de WSIF

<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/wsdl/http/"/> 

en

<soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>

et pourtant, seule la première URL fonctionne!!

- WSIF0006W: Plusieurs WSIFProvider trouvÚs, supportant l' URI du mÛme espace de nom 
'http://schemas.xmlsoap.org/wsdl/soap/org.apache.wsif.providers.soap.apacheaxis.WSIFDynamicProvider_ApacheAxis,
org.apache.wsif.providers.soap.apachesoap.WSIFDynamicProvider_ApacheSOAP') trouvÚ.
- WSIF0007I: Utilisation de WSIFProvider 'org.apache.wsif.providers.soap.apacheaxis.WSIFDynamicProvider_ApacheAxis'
pour namespaceURI 'http://schemas.xmlsoap.or g/wsdl/soap/'.

Conclusion (provisoire)