Client e Server comunicano tramite il protocollo SOAP.



Похожие документы
Il Web-Service SDMX dell ISTAT

Approfondimento. Web Services

Programmazione di servizi web SOAP

Web Services con Axis Delia Di Giorgio Anna Celada 1 marzo 2005

Plus srl :: :: :: Via Morgagni, 4/A Verona :: Tel :: Fax

Classificazione dei Web Services

Il Web-Service SDMX dell ISTAT

Concetto di Funzione e Procedura METODI in Java

A2A Specifiche Web Services

Web Service per richiamare Starcheck. Versione: 2 Data: 14/01/14 Autore: InfoCamere

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Java Web Services. Uso di Eclipse e Apache Axis

Il Sistema di interscambio: Prodotti di TEST a supporto dell adesione ai servizi

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Test di unità con JUnit4

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Java: Compilatore e Interprete

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

ProgettoSMS. Manuale Gateway Web Services

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:

Progetto SIRPE De-materializzazione delle prescrizioni. Servizi personalizzati della CIL

Multithreading in Java. Fondamenti di Sistemi Informativi

ZTL Firenze Inserimento Automatico

Specifiche di invocazione del sistema di monitoraggio e controllo servizi CART

1 JSPDynPage, componenti portale e Java Server Pages

Seminario di Sistemi Distribuiti RPC su SOAP

Programmazione a Oggetti Lezione 10. Ereditarieta

Web Service SOAP e WSDL. Tito Flagella tito@link.it Lorenzo Nardi nardi80@gmail.com

Spring WS Sviluppare WebService in Java

Web Services Dogane LINEE GUIDA

Web Services Security

SMS API. Documentazione Tecnica YouSMS SOAP API. YouSMS Evet Limited

Ottava Esercitazione. introduzione ai thread java mutua esclusione

WEB SERVICES SERVIZI PER RICEZIONE ED ELABORAZIONE MESSAGGI AMBIENTE REALE

PROGETTO TESSERA SANITARIA WEB SERVICES PER LA VISUALIZZAZIONE DELLE RICEVUTE DI ATTESTAZIONE DEGLI INVII DEI DOCUMENTI DI SPESA PRECOMPILATO

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

L Iniziativa egovernment.net per l Italia. Porte di Dominio per la Cooperazione Applicativa Allegato 2

Programmazione di Web Services

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

PROGETTO TESSERA SANITARIA

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Programmazione Java: Variabili membro, Metodi La parola chiave final

RMI. Java RMI RMI. G. Prencipe

Architettura MVC-2: i JavaBeans

La prima applicazione Java con NetBeans IDE. Dott. Ing. M. Banci, PhD

TNT Pro Guida d'installazione ed Utilizzo

PROGETTO TESSERA SANITARIA SERVIZI DI COMUNICAZIONE ATTIVAZIONE E REVOCA DELLE TS-CNS

Esercizi della lezione 5 di Java

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

DATI IDENTIFICATIVI DEL PROGETTO

Gestione delle Eccezioni

Il Registro dei Servizi di OpenSPCoop i. Il Registro dei Servizi di OpenSPCoop

WEB SERVICES SERVIZI PER RICEZIONE ED ELABORAZIONE MESSAGGI AMBIENTE PROVA

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete

Java Remote Method Invocation

Programmazione dei socket con TCP #2

Il Gestore Eventi di OpenSPCoop i. Il Gestore Eventi di OpenSPCoop

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

Lezione 1 Introduzione

Gli XML Web Service. Prof. Mauro Giacomini. Complementi di Informatica Medica 2008/2009 1

Corso Eclipse. Prerequisiti. 1 Introduzione

Corso di Informatica Modulo T3 B2 - Database in rete

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Introduzione al Linguaggio C

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

appunti delle lezioni Architetture client/server: applicazioni client

JNDI. Massimo Merro Programmazione di Rete 214 / 229

Tutorial di configurazione e programmazione di OpenSPCoop. Tutorial di configurazione e programmazione di OpenSPCoop

Cenni di programmazione distribuita in C++ Mauro Piccolo

Il Paradigma REST per lo sviluppo di applicazioni Web 2.0

INF-1: Specifiche Tecniche di Interfaccia

Web Services. Tecniche di Programmazione avanzata Corso di Laurea Specialistica in Ingegneria Telematica Università Kore Enna A.A.

Socket & RMI Ingegneria del Software - San Pietro

Definizione di classi con array di oggetti

La serializzazione e deserializzazione nel formato SOAP. A cura del docente Giuliano Pellegrini Parisi

JUG Ancona Italy. Google Web Toolkit. Giovanni Baleani Programmatore Java. Filippetti S.r.l.

1 Vincenzo de Stefano SAP e Servizi Web

DOCFINDERWEB SERVICE E CLIENT

PRACTICAL DEVELOPMENT OF A WEB SERVICE

Parte II: Reti di calcolatori Lezione 10

Realizzazione di un sistema per l archiviazione, la conservazione sostitutiva e la dematerializzazione dei documenti

Appunti di Informatica 1

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Modulo 4: Ereditarietà, interfacce e clonazione

Web Service. Massimo Martinelli

Web Services Servizio Telematico Dogane

Web Services. Ing. Enrico Oliva Phd student, DEIS

Introduzione ad Eclipse

SSO Specifiche Funzionali

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Транскрипт:

In questo tutorial implementeremo un semplice SOAP web service in PHP che un client Java richiamerà. In questo modo mostreremo l'interoperabilità fra linguaggi diversi che SOAP permette di avere. La struttura del modello client/server sarà di questo tipo: Il client java richiede un servizio, passando eventuali parametri di input e aspetta una risposta dal server SOAP PHP. Il client non deve necessariamente conoscere la logica dell'applicazione server, ma deve solo avere le specifiche per poter richiamare i servizi, ad esempio l'url di dove risiedere il server, i servizi che mette a disposizione e la firma dei servizi (Parametri di input e di output).il meccanismo della comunicazione SOAP è il seguente: Client e Server comunicano tramite il protocollo SOAP. Il server descrive tramite un file WSDL lo skeleton dei servizi che espone (Ovvero indica al client i parametri di Input e di Output di ogni servizio e come raggiungerli). Se il client invia una richiesta SOAP valida, ovvero che segue le direttive del WSDL, allora il server manda una risposta SOAP al client contenente il risultato della chiamata effettuata dal client. Se il client invia una richiesta SOAP non valida il server invia un errore o un eccezione al client. Chiamate errate tipiche sono quelle in cui si richiama un servizio che non esiste, oppure si richiama sbagliando la cardinalità o il tipo dei parametri da passare. La caratteristica principale del protocollo SOAP è che permette una comunicazione a client e server di diversa specie. Si può avere ad esempio un server SOAP PHP (ma anche un server SOAP Java o.net) a cui accedono applicazioni desktop scritte in Java o in.net, applicazioni mobile che supportano la comunicazione SOAP e in generale, la comunicazione è possibile per qualsiasi linguaggio supporti questo tipo di protocollo che il server mette a disposizione. Questo protocollo rende client e server indipendenti l'uno dall'altro, al server non interessa la logica dell'applicazione del client, al client non interessa la logica dell'applicazione del server, il server mette a disposizione dei servizi per eventuali client che li richiamano. Nel nostro esempio, il nostro server metterà a disposizione del client un servizio che prende come parametri un intero positivo e restituisce la radice quadrata del parametro passato. Configurazione dell'ambiente del client Java Java SE Versione 1.6 Axis SOAP toolkit Versione 1.4 Configurazione dell'ambiente del server PHP

PHP Versione 5.2 APACHE Versione 2.2.17 Configurazione di SOAP nel file php.ini per evitare problemi di cache nella lettura del file wsdl: [soap] soap.wsdl_cache_enabled=0 soap.wsdl_cache_ttl=10 soap.wsdl_cache_limit = 5 Moduli PHP necessari: xmlrpc Creazione del file WSDL (Sul server) Per prima cosa scriviamo il file WSLD che contiene le informazioni necessarie che il client deve avere per poter accedere al servizio. ServerSoapPHP.wsdl <?xml version="1.0" encoding="utf 8" standalone="no"?> <! WSDL Server SOAP PHP @author Walter russo > <definitions name="serversoap" targetnamespace="http://localhost/soap/other/" xmlns:tns="http://localhost/soap/other/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <! Costruzione del messaggio della richiesta SOAP > <message name="radicequadratarequest"> <wsdl:part name="intparameter" type="xsd:integer" /> </message> <! Costruzione del messaggio della risposta SOAP > <message name="radicequadrataresponse"> <part name="result" type="xsd:double" /> </message> <porttype name="radicequadrataporttype"> <operation name="radicequadrata"> <input message="tns:radicequadratarequest" /> <output message="tns:radicequadrataresponse" /> </operation> </porttype> <binding name="radicequadratabinding" type="tns:radicequadrataporttype"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> <operation name="radicequadrata"> <soap:operation soapaction="" /> <input> <soap:body use="literal" namespace="http://localhost/soap/other/" encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" /> </input> <output> <soap:body use="literal" namespace="http://localhost/soap/other/" encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" /> </output> </operation>

</binding> <! Descrizione del servizio radicequadrata > <service name="radicequadrataservice"> <port name="radicequadrataport" binding="tns:radicequadratabinding"> <soap:address location="http://localhost/soap/other/phpsoapserver.php" /> </port> </service> </definitions> Il server PHP Il server SOAP php deve esporre il metodo per il calcolo della radice quadrata, caricare i servizi che desidera esporre e caricare il file ServerSoapPHP.wsdl. PHPSoapServer.php <?php * Server SOAP di esempio che calcola la radice quadrata di un numero * @author Walter Russo array delle funzioni che il server deve esporre ai client $functions = array ( "RadiceQuadrata" ); * La funzione che effettivamente viene richiamata dal client * @param $intparameter function radicequadrata ($intparameter) { return sqrt($intparameter); * Funzione che include i servizi che il server espone * @param $functions * @param $server function addfunctions($functions,$server) { foreach ($functions as $function) { //Aggiungi un nuovo servizio $server >addfunction($function); * Entry Point del server * @var unknown_type //Crea Oggetto SoapServer passandogli il percorso del file wsdl. $server= new SoapServer("ServerSoapPHP.wsdl"); //AGGIUNGI I SERVIZI addfunctions($functions,$server ); $server >handle();?> IL CLIENT JAVA Il client java deve conoscere poche cose del server, ovvero dove risiede il server e la firma dei servizi da richiamare (Parametri di input e di output)

* Client in java che richiama un webservice soap scritto in PHP. * Il servizio richiamato restituisce la radice quadrata di un numero intero positivo * * @author Walter Russo * import java.net.malformedurlexception; import javax.xml.namespace.qname; import javax.xml.rpc.parametermode; import javax.xml.rpc.serviceexception; import org.apache.axis.client.call; import org.apache.axis.client.service; import org.apache.axis.encoding.xmltype; public class ClientJavaSoap { /*Uri del server static String soapuri = "http://localhost/soap/other/phpsoapserver.php"; public static Call configureservice() throws ServiceException, MalformedURLException { Service service = new Service(); // Instanzia l'oggetto Call Call call = (Call) service.createcall(); // setta le coordinate del server call.settargetendpointaddress(new java.net.url(soapuri)); return call; public static Double testradicequadrata(int value) { try { Call call = configureservice(); call.setoperationname(new QName(soapuri, "radicequadrata")); // Parametro di input call.addparameter("intparameter", XMLType.SOAP_INTEGER, ParameterMode.IN); // parametro da restituire (OUTPUT) call.addparameter("return", XMLType.SOAP_DOUBLE, ParameterMode.OUT); int number = value; // Costruzione dell'array da passare nella chiamata al servizio Object[] params = new Object[] { number ; // settare il parametro di ritorno della funzione call.setreturntype(xmltype.soap_double); // invocazione del servizio Double ret = (Double) call.invoke(params); // risultato della chiamata return ret; // In caso di eccezione restituiamo -1 come risultato catch (Exception e) { System.err.println(e.toString()); return -1.0; public static void main(string[] args) { int param = 99; double result = testradicequadrata(param); System.out.print("\n Il risultato della radice quadrata di " + param + " è " + result);

Conclusioni Ora non resta che provare che in tutto funzioni lanciando il client java, se tutto va a buon fine il risultato visibile sulla consolle Java sarà il seguente: Il risultato della radice quadrata di 99 è 9.9498743710662