Web Services PHP WSDL

Supponendo di essere degli esperti di Web Services in Java, ora vogliamo estendere la disponibilità di questi servizi anche ad un sito PHP che non fà altro che collegarsi ad una applicazione online realizzata mediante Java per esporre dei Web Services, precedentemente realizzati già in Java.
Supponendo che nella nostra Web Application, abbiamo codificato i servizi mediante il WSDL nell’url della applicazione Java avremo un oggetto del tipo:
‘http://sito.com:porta/…/RiepilogoServizi?wsdl’” a questo punto vogliamo rendere disponibili questi servizi anche ad una pagina PHP, non vi è nulla di più semplice.
Supponendo che i nostri servizi vengano chiamati mediante delle form, ed i servizi sono: ‘formatPoll’ e ‘storePoll’, dove il primo espone una pagina XSLT ed il secondo carica un file su di un altro server che non è specificatamente quello su cui è esposta la nostra pagina PHP.

Sviluppo SOA - PHP Java WSDL

Realizzazione di una semplice SOA tra il server Apache ed il server Tomcat

// Esempio in locale con porta esecuzione Tomcat:$URL_SERVER='127.0.0.1:8085';
// Ricordate di sostituire sito.com e porta_webserver
$URL_SERVER='sito.com:porta_webserver';
error_reporting(E_ALL);
/* Client per il messaggio SOAP, dove dovete sostituire NomeApplicazioneJava 
 * con il path di dove si trova il vostro 'RepositoryService' 
 * che avrà anche esso uno specifico nome. 
*/
$client = new SoapClient('http://'.$URL_SERVER.'/NomeApplicazioneJava/RepositoryService?wsdl',
        array('trace' => 1, 'cache_wsdl' => WSDL_CACHE_NONE,'encoding'=>'ISO-8859-1'));

/* Poi chiameremo uno dei nostri due servizi a seconda dei valori dei parametri inviati nella form. */
if (($_REQUEST['option']=='formatPoll') && !empty($_REQUEST["materia"])) {
	//ATTENZIONE: l'address riportato nel WSDL deve essere quello effettivo del server!
	//ATTENZIONE: se si sceglie la codifica literal per i messaggi WSDL, 
        // includere sempre un namespace nella definizione, 
        //altrimenti il client PHP non funzionerà correttamente

	//abilitiamo il tracing SOLO per poter leggere la lastRequest e la lastResponse.
        // Disabilitare SEMPRE il caching del WSDL (anche in PHP.ini!) quando si sviluppa!
	$r1 = $client->formatPoll($_REQUEST['materia']);
	echo $r1;
}
if (($_REQUEST['option'] =='storePoll')) {
	
	if(($_REQUEST['source']=='urlxml') && ($_REQUEST["urlxml"]!='')){
		$r1 = $client->storePoll($_REQUEST["urlxml"]);
	} else	if(($_REQUEST['source']=='filexml') && (!empty($_FILES['filexml']))){	
		$contenutoxml=file_get_contents($_FILES['filexml']['tmp_name']);
		$r1 = $client->storePoll($contenutoxml);			
	}  
	if($r1) {
		echo "Storage effettuato con successo!";
	} else {
		echo "Storage non effettuato. Possibile causa: file xml non validato.";
	}
}

Ecco fatto, abbiamo realizzato una piccola SOA PHP che interagisce con il server Tomcat di Java, non serve che lo dico però a scanso di equivoci, il server Tomcat deve essere avviato e funzionante altrimenti è impossibile far comunicare due componenti dislocate su server differenti.

Web Services PHP WSDL ultima modidfica: 2014-11-06T09:40:37+01:00 da admin
Posted in: Java, PHP, SOA

By on 6 Novembre 2014

Tagged: , , , , , ,