Programmazione su Reti



Documenti analoghi
Client e Server comunicano tramite il protocollo SOAP.

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

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

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

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

SAPIENZA Università di Roma, Facoltà di Ingegneria

Interfaccia SOAP del FUSC. Versione 3.10

Compute engine generici in RMI

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

// inizializzazione della biblioteca con utenti, libri e prestiti // non richiesta Biblioteca.inizializza();

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Tener traccia del client

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

Prova d Esame Compito B

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a giugno 2013

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Finestra.java. static String nomicolonne[] = {"ind.","cognome","nome","telefono"," "}; //nomi delle colonne della tabella

Prova d Esame Compito A

I file WAR. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2004/05-1

Programmazione Orientata agli Oggetti in Linguaggio Java

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

Flussi, lettori e scrittori

Laboratorio di reti II: Servlet

1 Gestione dell utente connesso in sessione con Java Server Pages, Java Beans, Servlet

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

1 Applicazione J2EE sul SAP WAS con SAP NWDS

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2)

Cifratura simmetrica

Gestione delle eccezioni Individuazione e ripristino parseint Individuazione e ripristino Individuazione e ripristino parseint

Corso di Reti di Calcolatori L-A

MOBILE WEB DESIGN TUTORIAL ANDROID METAIO AUGMENTED REALITY

Esercizi della lezione 5 di Java

3 ServletContext. Marco Tessarotto Programmazione dei Web Server Anno Accademico

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

Gestione delle Eccezioni

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

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

Architettura Client-Server

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:

Realizzazione di una classe con un associazione

Java Web Services. Uso di Eclipse e Apache Axis

1 JSPDynPage, componenti portale e Java Server Pages

RMI. Java RMI RMI. G. Prencipe

Introduzione alla programmazione Http lato server in Java

Applicazioni web. Parte 5 Socket

Corso di Reti di Calcolatori T

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

appunti delle lezioni Architetture client/server: applicazioni client

Caricamento della classe driver. Apertura della connessione. DriverManager.getConnection() Creazione di uno statement

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Esercizi classi e array

Corso di Laurea in Informatica e Comunicazione Digitale. a.a Interazione Uomo-Macchina. Introduzione a Java.

Svantaggi delle servlet

Main System Monitor Keyboard

Parcheggio.rtf 1/8 6 gennaio Prova di programmazione: parcheggio a pagamento

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

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel , dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Luglio Soluzione degli Esercizi

Relazione sulla tecnologia. Giacomo Sacchetti Imad Zaza

RMI: metodi equals e hashcode

appunti delle lezioni Architetture client/server: applicazioni server

Java: la libreria delle classi

Servlet e JDBC. Servlet e Web Server. Servlet e Web Server. Servlet e Web Server. Richieste. Servlet. Servlet:

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

Un esercizio d esame. Flavio De Paoli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

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

Algoritmi di Ricerca. Esempi di programmi Java

Mappare il DB senza XML. Introduzione alle annotation di Hibernate3

Programmazione server-side: Java Servlet

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Parte II: Reti di calcolatori Lezione 12

Servers Activatable. Massimo Merro Programmazione di Rete 166 / 193

Laboratorio di reti II: Java Server Pages

Esercizi RMI. Laboratorio di Programmazione di Rete A 5/12/2007. Esercitazione di Laboratorio

Laboratorio di Basi di Dati e Web

Portal e Portlet ClassLoader. Mancini Marco

Tomcat & Servlet. Contenuti. Programmazione in Ambienti Distribuiti. Tomcat Applicazioni Web. Servlet JSP Uso delle sessioni

PROVA FINALE Ingegneria del software

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

Activation In sintesi: è inutile avere attivi degli oggetti se non vengono utilizzati

4 Anno Informatica ABACUS

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

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

Capitolo 13: Gestione delle eccezioni. Capitolo 13. Gestione delle eccezioni Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

1 EJB e Portal Component Object

Il Web-Service SDMX dell ISTAT

Creare client statici

Corso di Reti di Calcolatori L-A

Corso di Informatica Modulo T3 B2 - Database in rete

Corso di Reti di Calcolatori L-A

Tecnologie di Sviluppo per il Web

Transcript:

Programmazione su Reti Esempio di applicazione Client Server su protocollo Soap Fabio Donatantonio

Applicazione Applicazione Client-Server per la gestione di un elenco di persone con relativi dati. Viene fornito un file xml che funge da database, contenente i dati delle varie persone. Per ogni persona viene specificato : codice fiscale, nominativo e lavoro svolto. L applicazione lato Server fornisce una serie di opzioni per effettuare ricerche, modifiche e inserimenti. L applicazione utilizza due JavaBean : - Persona - Nominativo Un file xlm : - persone.xml Una classe per la gestione del database : - DBPersona Una classe che definisce i metodi forniti dal Server : - ServerPersone Una classe di Handler per la gestione delle modifiche : - PersonaHadler Una classe per la definizione del Client : - ClientPersone Un file di deploy per l installazione del servizio sotto Tomcat : - deploy.wsdd Nell applicazione viene descritto il corretto uso dei Bean, la gestione dei file xml con Dom, le invocazioni di metodi tramite il protocollo Soap, l utilizzo dei parametri di IN e OUT e la gestione degli intermediari (Handler). Il progetto si suddivide in due package : - it.persona Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 2

che contiene i JavaBean, la classe di gestione del database e la classe di Handler. - package di default che contiene la classe Server e la classe Client, più il file di deploy. Il package it.persona e la classe Server risiedono completamente sul server, nella cartella classes in web-inf sotto Axis. Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 3

Implementazione dell applicazione 1) FILE XML Persone.xml <persone> <persona codice="fd0012"> <nome>fabio Donatantonio</nome> <lavoro>studente</lavoro> </persona> <persona codice="mr0101"> <nome>marco Rossi</nome> <lavoro>impiegato</lavoro> </persona> <persona codice="ab3201"> <nome>anna Bianchi</nome> <lavoro>operaio</lavoro> </persona> </persone> 2) JAVA BEAN Persona.java package it.persone; public class Persona { private String codicefiscale; private String nominativo; private String lavoro; public void setcodice(string c){ this.codicefiscale=c; public void setnominativo(string n){ this.nominativo=n; public void setlavoro(string l) { this.lavoro=l; public String getcodice(){ return this.codicefiscale; public String getnominativo(){ return this.nominativo; public String getlavoro(){ return this.lavoro; Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 4

Nominativo.java package it.persone; public class Nominativo { private String nome; public void setnome(string n){ this.nome=n; public String getnome(){ return this.nome; 3) CLASSE DI GESTIONE DEL DATABASE DBPersona.java package it.persone; import java.io.bufferedinputstream; import java.io.file; import java.io.fileinputstream; import javax.servlet.servletcontext; import javax.servlet.http.httpservlet; import javax.xml.parsers.documentbuilder; import javax.xml.parsers.documentbuilderfactory; import javax.xml.transform.outputkeys; import javax.xml.transform.transformer; import javax.xml.transform.transformerconfigurationexception; import javax.xml.transform.transformerexception; import javax.xml.transform.transformerfactory; import javax.xml.transform.dom.domsource; import javax.xml.transform.stream.streamresult; import org.apache.axis.messagecontext; import org.apache.axis.transport.http.httpconstants; import org.w3c.dom.document; import org.w3c.dom.element; import org.w3c.dom.nodelist; public class DBPersona { Document doc; Persona[] lista; public DBPersona() throws Exception{ MessageContext msgcontext = MessageContext. getcurrentcontext(); Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 5

HttpServlet servlet =(HttpServlet)msgContext. getproperty(httpconstants.mc_http_servlet); ServletContext ctx = servlet.getservletcontext(); String file = ctx.getrealpath("persone.xml"); BufferedInputStream in = new BufferedInputStream( new FileInputStream(file)); DocumentBuilderFactory factory = DocumentBuilderFactory. newinstance(); factory.setnamespaceaware(true); DocumentBuilder builder = factory.newdocumentbuilder(); doc = builder.parse(in); NodeList pizze = doc.getelementsbytagname("persona"); lista = new Persona[pizze.getLength()]; for(int i=0; i<pizze.getlength(); i++){ Element persona = (Element) pizze.item(i); Persona p = new Persona(); p.setcodice(this.getattributevalue(persona, "codice")); p.setnominativo(this.getvalue(persona, "nome")); p.setlavoro(this.getvalue(persona, "lavoro")); lista[i] = p; public int inseriscipersone(persona[] p){ int verifica=0; if(p.length==0){ return 0; if(p==null){ return -1; Element root = (Element)doc.getElementsByTagName ("persone").item(0); for(int i=0; i<p.length; i++){ Element persona = doc.createelement("persona"); persona.setattribute("codice", p[i].getcodice()); Element nome = doc.createelement("nome"); nome.settextcontent(p[i].getnominativo()); Element lavoro = doc.createelement("lavoro"); lavoro.settextcontent(p[i].getlavoro()); persona.appendchild(nome); persona.appendchild(lavoro); root.appendchild(persona); Document exit = root.getownerdocument(); DOMSource domsource = new DOMSource(exit); MessageContext msgcontext = MessageContext. getcurrentcontext(); Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 6

HttpServlet servlet =(HttpServlet)msgContext.getProperty (HTTPConstants.MC_HTTP_SERVLET); ServletContext ctx = servlet.getservletcontext(); File fileout = new File(ctx.getRealPath("persone.xml")); StreamResult streamresult = new StreamResult(fileOut); TransformerFactory tf = TransformerFactory.newInstance(); Transformer serializer; try { serializer = tf.newtransformer(); serializer.setoutputproperty(outputkeys.indent,"yes"); serializer.transform(domsource,streamresult); verifica = 1; catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printstacktrace(); catch (TransformerException e) { // TODO Auto-generated catch block e.printstacktrace(); return verifica; public Persona[] ritornalista(){ return this.lista; public Persona personapercodice(string c){ Persona p = null; for(int i=0; i<lista.length; i++){ if(lista[i].getcodice().equals(c)){ return lista[i]; return p; public Persona[] personaperlavoro(string l){ Persona[] p=null; int tot=0; for(int i=0; i<lista.length; i++){ if(lista[i].getlavoro().equalsignorecase(l)){ tot++; p = new Persona[tot]; tot = 0; for(int i=0; i<lista.length; i++){ if(lista[i].getlavoro().equalsignorecase(l)){ p[tot] = lista[i]; tot++; Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 7

return p; public Persona[] cercapernominativi(nominativo[] nom){ Persona[] p = null; int tot = 0; for(int i=0; i<nom.length; i++){ Persona[] el = this.verificanominativo (nom[i].getnome()); tot = tot + el.length; p = new Persona[tot]; tot = 0; for(int i=0; i<nom.length; i++){ Persona[] el = this.verificanominativo (nom[i].getnome()); for(int j=0 ; j<el.length; j++){ p[tot] = el[j]; tot++; return p; public Persona[] verificanominativo(string n){ Persona[] p = null; int tot = 0; for(int i=0; i<lista.length;i++) { if(lista[i].getnominativo().tolowercase().contains (n.tolowercase())) { tot++; p= new Persona[tot]; tot = 0; for(int i=0; i<lista.length; i++) { if(lista[i].getnominativo().tolowercase().contains (n.tolowercase())) { p[tot] = lista[i]; tot++; return p; public int cambialavoro(persona p){ int verifica=0; Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 8

Element root = (Element)doc.getElementsByTagName ("persone").item(0); NodeList per = root.getelementsbytagname("persona"); for(int i=0; i<per.getlength(); i++){ Element personael = (Element) per.item(i) if(personael.getattribute("codice").equalsignorecase (p.getcodice())){ Element lavoro = (Element) personael. getelementsbytagname("lavoro").item(0); lavoro.settextcontent(p.getlavoro()); Document exit = root.getownerdocument(); DOMSource domsource = new DOMSource(exit); MessageContext msgcontext = MessageContext. getcurrentcontext(); HttpServlet servlet =(HttpServlet)msgContext. getproperty(httpconstants.mc_http_servlet); ServletContext ctx = servlet.getservletcontext(); File fileout = new File(ctx.getRealPath("persone.xml")); StreamResult streamresult = new StreamResult(fileOut); TransformerFactory tf = TransformerFactory.newInstance(); Transformer serializer; try { serializer = tf.newtransformer(); serializer.setoutputproperty(outputkeys.indent,"yes"); serializer.transform(domsource,streamresult); verifica = 1; catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printstacktrace(); catch (TransformerException e) { // TODO Auto-generated catch block e.printstacktrace(); return verifica; private String getvalue(element elem, String name) { NodeList l = elem.getelementsbytagname(name); if (l == null l.getlength() == 0) return null; elem = (Element)l.item(0); return elem.getfirstchild().getnodevalue(); private String getattributevalue(element elem,string name){ return elem.getattribute(name); Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 9

4) CLASSE DI HANDLER PersonaHandler.java package it.persone; import org.apache.axis.axisfault; import org.apache.axis.constants; import org.apache.axis.message; import org.apache.axis.messagecontext; import org.apache.axis.handlers.basichandler; import org.apache.axis.message.soapenvelope; import org.apache.axis.message.soapheaderelement; public class PersonaHandler extends BasicHandler{ private static final long serialversionuid = 1L; public void invoke(messagecontext msgcontext) throws AxisFault { // TODO Auto-generated method stub boolean trovato = false; // Recupera l'header download try{ Message reqmsg = msgcontext.getrequestmessage(); SOAPEnvelope reqenv = reqmsg.getsoapenvelope(); SOAPHeaderElement header = reqenv.getheaderbyname ("http://www.unisa.it","codicefiscale", true); if (header!= null) { // se l'header esiste lo setta come processato header.setprocessed(true); // Recupera il codice fiscale String codice = (String)header.getValueAsType (Constants.SOAP_STRING); reqenv.removeheader(header); // Avvia la ricerca all'interno del file DBPersona db = new DBPersona(); Persona p = db.personapercodice(codice); if(p==null){ trovato = false; else{ trovato = true; msgcontext.setproperty("codice", new String (codice)); Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 10

msgcontext.setproperty("verifica",new Boolean(trovato)); catch(exception ex){ ex.printstacktrace(); 5) CLASSE LATO SERVER ServerPersone.java import javax.xml.rpc.holders.intholder; import org.apache.axis.messagecontext; import it.persone.dbpersona; import it.persone.nominativo; import it.persone.persona; public class ServerPersone { public Persona[] elenco() throws Exception{ DBPersona db = new DBPersona(); return db.ritornalista(); public Persona cercacodice(string code) throws Exception{ DBPersona db = new DBPersona(); return db.personapercodice(code); public Persona[] cercalavoro(string l) throws Exception{ DBPersona db = new DBPersona(); return db.personaperlavoro(l); public int inseriscipersone(persona[] p) throws Exception{ DBPersona db = new DBPersona(); int v = db.inseriscipersone(p); return v; public Persona[] cercanominativi(nominativo[] n,intholder dh) throws Exception{ DBPersona db = new DBPersona(); Persona[] p = db.cercapernominativi(n); if(p.length==0){ Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 11

dh.value=0; return null; else{ dh.value=p.length; return p; public String modificalavoro(string lavoro) throws Exception{ String conferma="lavoro non modificato : "; MessageContext msgcontext = MessageContext. getcurrentcontext(); boolean v = ((Boolean) msgcontext.getproperty("verifica")). booleanvalue(); if(v==false){ conferma = conferma+"persona non trovata."; else{ DBPersona db = new DBPersona(); String c = ((String)msgContext.getProperty ("codice")).tostring(); Persona p = db.personapercodice(c); p.setlavoro(lavoro); int verint = db.cambialavoro(p); if(verint ==0){ return conferma+"errore nella gestione del file."; else{ conferma = "Lavoro modificato con successo."; return conferma; 6) CLASSE LATO CLIENT ClientPersone.java import it.persone.nominativo; import it.persone.persona; import java.io.bufferedreader; import java.io.inputstreamreader; import java.util.map; import javax.xml.namespace.qname; import javax.xml.rpc.parametermode; import org.apache.axis.client.call; import org.apache.axis.client.service; import org.apache.axis.encoding.xmltype; import org.apache.axis.message.rpcelement; Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 12

import org.apache.axis.message.rpcparam; import org.apache.axis.message.soapenvelope; import org.apache.axis.message.soapheaderelement; import org.apache.axis.soap.soapconstants; public class ClientPersone { /** * @param args * @throws Exception */ public static void main(string[] args) throws Exception { // TODO Auto-generated method stub BufferedReader in = new BufferedReader( new InputStreamReader(System.in) ); String endpoint = "http://localhost:8080/axis/services /persone"; while(true){ System.out.println("1 - Elenco persone"); System.out.println("2 - Cerca per codice fiscale"); System.out.println("3 - Cerca per lavoro"); System.out.println("4 - Cerca per nominativi"); System.out.println("----------------------------"); System.out.println("5 - Modifica lavoro persona"); System.out.println("6 - Inserisci persone"); System.out.println("7 - Esci"); String scelta = in.readline(); if(scelta.equalsignorecase("1") scelta.equalsignorecase("2") scelta.equalsignorecase("3") scelta.equalsignorecase("4") scelta.equalsignorecase("5") scelta.equalsignorecase("6")) { if(scelta.equalsignorecase("1")){ Service service = new Service(); Call call = (Call) service.createcall(); call.settargetendpointaddress( new java.net. URL(endpoint)); QName qn1=new QName("urn:BeanService","Persona"); call.registertypemapping(persona.class, qn1, BeanSerializerFactory(Persona.class, qn1), new org.apache.axis.encoding. ser.beandeserializerfactory(persona.class,qn1)); Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 13

QName qn = new QName( "urn:beanservice", "ArrayOfPersona" ); call.registertypemapping(persona[].class,qn, BeanSerializerFactory(Persona[].class, qn), BeanDeserializerFactory(Persona[].class, qn)); call.setreturntype(qn); call.setoperationname("elenco"); Persona[] app =(Persona[]) call.invoke(new Object[]{); if(app==null){ System.out.println("Nessun elenco"); else{ for(int i=0; i<app.length; i++){ Persona iesimo = app[i]; System.out.println("Persona codice : " +iesimo.getcodice()); System.out.println("Nome : " +iesimo.getnominativo()); System.out.println("Lavoro : " +iesimo.getlavoro()); if(scelta.equalsignorecase("2")){ Service service = new Service(); Call call = (Call) service.createcall(); call.settargetendpointaddress( new java.net.url (endpoint)); QName qn1=new QName("urn:BeanService","Persona"); call.registertypemapping(persona.class, qn1, BeanSerializerFactory(Persona.class, qn1), BeanDeserializerFactory(Persona.class, qn1)); call.addparameter("string", XMLType.SOAP_STRING, ParameterMode.IN); call.setreturntype(qn1); call.setoperationname("cercacodice"); System.out.println("Codice fiscale da cercare : "); Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 14

String ide = in.readline(); Persona r = (Persona) call.invoke(new Object[]{idE); if(r==null){ System.out.println("Persona non trovata."); else { System.out.println("Persona trovata : "); System.out.println("Codice : " +r.getcodice()); System.out.println("Nome : " +r.getnominativo()); System.out.println("Lavoro : " +r.getlavoro()); if(scelta.equalsignorecase("3")){ Service service = new Service(); Call call = (Call) service.createcall(); call.settargetendpointaddress( new java.net.url (endpoint)); QName qn1 = new QName( "urn:beanservice", "Persona" ); call.registertypemapping(persona.class, qn1, BeanSerializerFactory(Persona.class, qn1), BeanDeserializerFactory(Persona.class, qn1)); QName qn = new QName( "urn:beanservice", "ArrayOfPersona" ); call.registertypemapping(persona[].class, qn, BeanSerializerFactory(Persona[].class, qn), BeanDeserializerFactory(Persona[].class, qn)); call.addparameter("string", XMLType.SOAP_STRING, ParameterMode.IN); call.setreturntype(qn); call.setoperationname("cercalavoro"); System.out.println("Inserire un lavoro : "); String ide = in.readline(); Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 15

Persona[] app = (Persona[]) call.invoke(new Object[]{idE); if(app==null){ System.out.println("Nessun elenco per il lavoro specificato"); else{ for(int i=0; i<app.length; i++){ Persona iesimo = app[i]; System.out.println("Persona codice : " +iesimo.getcodice()); System.out.println("Nome : " +iesimo.getnominativo()); System.out.println("Lavoro : " +iesimo.getlavoro()); if(scelta.equalsignorecase("5")){ System.out.println("Inserisci codice fiscale della persona : "); String id = in.readline(); System.out.println("Inserisci nuovo lavoro : "); String l = in.readline(); SOAPHeaderElement verificacli = new SOAPHeaderElement("http://www.unisa.it","Codicefi scale"); verificacli.setrole("http://unisa.it/roles /modifica"); verificacli.setvalue(id); SOAPEnvelope reqenv = new SOAPEnvelope (SOAPConstants.SOAP12_CONSTANTS); reqenv.addheader(verificacli); Object [] params = new Object [] { l ; reqenv.addbodyelement(new RPCElement("", "modificalavoro", params)); Service service = new Service(); Call call = (Call) service.createcall(); call.settargetendpointaddress( new java.net.url(endpoint)); call.setsoapversion(soapconstants.soap12_constant S); SOAPEnvelope respenv=call.invoke (reqenv); RPCElement resprpc = (RPCElement)respEnv. getfirstbody(); Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 16

RPCParam result = (RPCParam)respRPC.getParams().get(0); String ret=((string)result.getobjectvalue(). tostring()); System.out.println(ret); if(scelta.equalsignorecase("6")){ Service service = new Service(); Call call = (Call) service.createcall(); call.settargetendpointaddress( new java.net.url(endpoint)); QName qn1 = new QName( "urn:beanservice", "Persona"); call.registertypemapping(persona.class, qn1, BeanSerializerFactory(Persona.class, qn1), BeanDeserializerFactory(Persona.class, qn1)); call.addparameter("array",qn1, ParameterMode.IN); call.setreturntype(xmltype.soap_int); call.setoperationname("inseriscipersone"); Persona[] arr = null; System.out.println("Quante persone vuoi inserire? "); int num = Integer.parseInt(in.readLine()); arr = new Persona[num]; for(int i=0; i<num; i++){ System.out.println("Persona "+(i+1)); System.out.println("Codice fiscale : "); String code = in.readline(); System.out.println("Nominativo : "); String nome = in.readline(); System.out.println("Lavoro : "); String lavoro = in.readline(); Persona p = new Persona(); p.setcodice(code); p.setnominativo(nome); p.setlavoro(lavoro); arr[i] = p; Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 17

int v = (Integer) call.invoke(new Object[]{arr); if(v==0){ System.out.println("Errore lunghezza array."); else{ if(v==-1){ System.out.println("Errore array nullo."); else{ System.out.println("Persone inserite."); if(scelta.equalsignorecase("4")){ Service service = new Service(); Call call = (Call) service.createcall(); call.settargetendpointaddress( new java.net.url(endpoint)); QName qn = new QName( "urn:beanservice", "Nominativo" ); call.registertypemapping(nominativo.class, qn, BeanSerializerFactory(Nominativo.class, qn), BeanDeserializerFactory(Nominativo.class, qn)); call.addparameter("array", qn, ParameterMode.IN); call.addparameter("quanti", XMLType.SOAP_INT, ParameterMode.OUT); QName qn1 = new QName( "urn:beanservice", "Persona" ); call.registertypemapping(persona.class, qn1, BeanSerializerFactory(Persona.class, qn1), BeanDeserializerFactory(Persona.class,qn1)); QName qn2 = new QName( "urn:beanservice", "ArrayOfPersona" ); call.registertypemapping(persona[].class, qn, new org.apache.axis.encoding.ser. BeanSerializerFactory(Persona[].class, qn), BeanDeserializerFactory(Persona[].class,qn); call.setreturntype(qn2); Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 18

call.setoperationname("cercanominativi"); Nominativo[] nomi = null; System.out.println("Quanti nominativi vuoi cercare? "); int num = Integer.parseInt(in.readLine()); nomi = new Nominativo[num]; for(int i=0; i<num; i++){ System.out.println("Nominativo"+(i+1)+": "); String n = in.readline(); if(n.length()>2){ Nominativo nom = new Nominativo(); nom.setnome(n); nomi[i] = nom; else{ System.out.println("Nominativo non a ccettato. Almeno tre caratteri"); i--; Persona[] p = (Persona[]) call.invoke(new Object[]{nomi); Map outputparams = call.getoutputparams(); Integer numero = (Integer) outputparams.get(new QName("quanti")); if(p==null){ System.out.println("Persone trovate : " +numero); System.out.println("Nessuna persona trovata con nominativi richiesti."); else{ System.out.println("Persone trovate "+numero+" : "); for(int i=0; i<p.length; i++){ Persona iesimo = p[i]; System.out.println("Persona codice : "+iesimo.getcodice()); System.out.println("Nome : " +iesimo.getnominativo()); System.out.println("Lavoro : " +iesimo.getlavoro()); else{ if(scelta.equalsignorecase("7")){ System.out.println("Ciao ciao"); Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 19

System.exit(0); 7) FILE DI DEPLOY Deploy.wsdd <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <handler name="codicefiscale" type="java:it.persone.personahandler"> <parameter name="codicef" value="polis" /> </handler> <service name="persone" provider="java:rpc"> <parameter name="classname" value="serverpersone"/> <parameter name="methodname" value="*"/> <role> http://unisa.it/roles/modifica </role> <requestflow> <handler type="codicefiscale"/> </requestflow> <beanmapping qname="myns:persona" xmlns:myns="urn:beanservice" languagespecifictype="java:it.persone.persona"/> <arraymapping qname="myns:arrayofpersona" xmlns:myns="urn:beanservice languagespecifictype="java:it.persone.persona[]" innertype="myns:persona" encodingstyle="http://www.w3.org/2003/05/soap-encoding"/> <beanmapping qname="myns:nominativo" xmlns:myns="urn:beanservice" languagespecifictype="java:it.persone.nominativo"/> <arraymapping qname="myns:arrayofnominativo" xmlns:myns="urn:beanservice" languagespecifictype="java:it.persone.nominativo[]" innertype="myns:nominativo" encodingstyle="http://www.w3.org/2003/05/soap-encoding"/> <operation name="cercanominativi"> Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 20

<parameter name="array" mode="in"/> <parameter name="quanti" mode="out"/> </operation> </service> </deployment> Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 21

Fabio Donatantonio http://www.fabiodonatantonio.com/ - 2007 22