PDA

View Full Version : Web Service Axis che comunica con client PHP


Gremo
21-07-2007, 22:24
Ciao,
devo sviluppare per un esame una configurazione come da titolo.
Al livello di web service semplice (che restituisce dati string, int) credo di esserne capace.

Il problema però è che vorrei che il web service in axis (che comunica con un db) restuisse oggetti (es. oggetto "Persona"), e che il mio client php possa in qualche modo ricreare l'oggetto.
Tuttavia non so proprio da dove iniziare.
Magari non è possibile visto che si ha a che fare con 2 linguaggi diversi?

Datemi qualche indicazione.... :help:

cionci
21-07-2007, 23:20
Axis è un webservice Java, giusto ?
Ma fammi capire...questi oggetti sono generici oppure hanno un formato prefissato (ad esempio puoi passare un tot di classi predefinite) ?

Mixmar
22-07-2007, 10:02
Il problema però è che vorrei che il web service in axis (che comunica con un db) restuisse oggetti (es. oggetto "Persona"), e che il mio client php possa in qualche modo ricreare l'oggetto.
Tuttavia non so proprio da dove iniziare.
Magari non è possibile visto che si ha a che fare con 2 linguaggi diversi?

Datemi qualche indicazione.... :help:

Axis è un framework (del progetto Apache) per creare con semplicità applicazioni client e/o server per Web Services.

In sostanza, come saprai, crea le strutture dati necessarie per la comunicazione tramite web service, effettua la serializzazione degli oggetti che gli indichi, fornisce le primitive di comunicazione... eccetera, rende cioè trasparente all'utente l'implementazione del "protocollo" dei web service, che possono essere usati come normali oggetti Java.

Axis produce, come output, un puro XML conforme allo standard WSDL del W3C (la versione supportata dipende dalla versione di Axis): quindi, se la tua applicazione (suppongo Java, a questo punto) server che legge il DB e comunica i risultati tramite un web service alla tua applicazione "client" PHP, quello che leggerai lato PHP come risposta alla tua richiesta sarà un XML formattato secondo il WSDL del servizio Java che hai richiamato, completamente indipendente dal linguaggio utilizzato.

Però non puoi usare Axis per creare un client web service PHP "direttamente": piuttosto, puoi utilizzarlo per creare un client web service Java o C++, che poi richiamerai da PHP.

Aggiungo un elenco di framework web service disponibili: link su wikipedia (http://en.wikipedia.org/wiki/List_of_Web_service_Frameworks).

Gremo
22-07-2007, 15:38
cut

Ciao,
il mio client deve essere per forza in php.
Java axis deve esporre un oggetto. Chiamiamolo come prima persona...

Axis serializza l'oggetto persona in un complex type, un xml contenente i miei dati. Quello che mi chiedo e credo sia possibile è, php riceve questo oggetto e lo può utilizzare in modo trasparente? (cioè richiamare i metodi di persona come se fosse un oggetto locale)?

es. questo web service client in php http://www.onlamp.com/pub/a/php/2003/07/03/php_amazon_soap.html?page=2

nlla pagina si legge PEAR::SOAP listens for this response and parses the XML into a PHP object, which is then returned by our method and stored in $books. cioè l'estensione SOAP di pear effettua il parse dell'xml in un oggetto php ritornato dal nostro metodo, e lo memorizza in book

$books = $client->ManufacturerSearchRequest($params);

book rappresenta un array, e details contiene i singoli book

foreach ($hits->Details as $hit) {
$ProductName = html_entities($hit->ProductName);
$Authors = join(' and ', $hit->Authors);

print <<< _HTML_
<div style="clear:left; width: 300px; padding:5px;
margin:5px; background:#ddd;">
<a href="$hit->Url"><image src="$hit->ImageUrlSmall"
alt="$ProductName" align="left"></a>
<b>$ProductName</b><br/>
By $Authors<br/>
Amazon.com Price: $hit->OurPrice<br/>
</div>
_HTML_;
}

come si vede, su ogni $hit (leggi: book) vengono chiamati i metodi che restituiscono il nome del prodottom gli autori, etc...proprio come se il libro fosse un oggetto creato localmente

non ho acnora provato (ho ancora qualche problema con axis) però dall'esempio si capisce che è fattibile. Anche perchè non si menziona neppure la tecnologia utilizzata dal web service