|
Lo scopo del lavoro è quello di guadagnarsi il tempo libero
|
|
|
|
|
Client Web Service per la Validazione dei dati Anagrafici tramite il Cod.Fiscale
By
Nino Guarnacci
15 novembre 2004
|
 |
|
Ancora client web service, in questo esempio vedremo come realizzare un semplice controllo sui dati anagrafici immessi tramite il check del codice fiscale. Andremo a d interrogare un WS gratuito messo a disposizione dalla http://www.pinellus.it e ideato da Gianluca Pinelli. Cercando di visionare un pò tutte le possibili tecniche per la produzione di client web services, questa volta utilizzeremo le librerie di axis http://ws.apache.org/axis , ex progetto IBM poi donato alla fondazione APACHE. Attualmente forse lo strumento più friendly sul mercato per l'implementazione dei WS. L'idea è di realizzare una JSP un Custom Tag e una classe bridge scritta da noi per integrarsi con le classi realizzate per noi da axis per la comunicazione soap con il web service Cod_fiscaleService. Gli steps da seguire sono: 1- Scaricare la libreria axis all'indirizzo http://ws.apache.org/axis/releases.html 2- Creare la struttura della nostra web application 3- Far generare ad axis le classi stub per la comunicazione con il ws 4- Realizzare un bridge per le classi service di axis 5- Realizzare un nostro custom tag da inserire nella pagina jsp che ci farà da front end per il nostro validatore 6- Compilare il nostro web.xml , un tld per la mappatura del custom tag e realizzare una semplice JSP 7- Compilare e Jarare il tutto e deploiare la nostra applicazione sotto tomcat o altro servlet engine o application server.
|
|
|
Step 1
|
top
|
Collegatevi all'indirizzo http://ws.apache.org/axis/releases.html e scaricate l'ultima versione released del progetto axis, compattatela ed ispezionatene i contenuti. (Per questi esempi ho utilizzato la ver. axis-1_1RC2)
|
|
Step 2
|
top
|
Create una cartella con il nome "validatore", all'interno createne un'altra con il nome "WEB-INF". Dentro quest'ultima realizzate altre 3 cartelle "classes", "lib" e "tlds". Andate ad inserire le 4 librerie necessarie che trovate nella cartella lib del progetto AXIS axis.jar, saaj.jar, commons-discovery.jar, jaxrpc.jar dentro la cartella "lib". Adesso all'interno di classes create altre due cartelle "bridge" e "tags".
|
|
Step 3
|
top
|
|
Dovete far in modo che il vostro classpath abbia visibilità sulle librerie (.jar) presenti nella cartella lib all'interno del progetto axis set CLASSPATH=%CLASSPATH%;.\axis.jar;.\log4j-1.2.4.jar;.\wsdl4j.jar;.\xerces.jar;.\axis-ant.jar; .\commons-discovery.jar;.\commons-logging.jar;jaxrpc.jar;.\saaj.jar A questo punto siamo pronti per farci generare le classi stub del servizio passandogli l'URL dove risiede il WSDL del servizio (ovvero l'interfaccia descrittiva).Per questo esempio l'url è http://www.pinellus.com/cfc/Cod_fiscale.cfc?wsdl Apriamoci un shell e a riga di comando invochiamo la classe che reperirà il WSDL ne leggerà le specifiche e le modalità di comunicazione, ed infine ci genererà gli stub: java org.apache.axis.wsdl.WSDL2Java http://www.pinellus.com/cfc/Cod_fiscale.cfc?wsdl  Fig. 1 Step 3 A questo punto troveremo all'interno della cartella da cui abbiamo invocato il comando un package con questo nome "cfc" con dentro i java delle nostre classi stub. Non ci resta che compilare i sorgenti e spostare l'intera cartella cfc all'interno della nostra web-application all'interno della cartella classes.
|
|
Step 4
|
top
|
|
Adesso realizziamo una classe, che farà da bridge tra la nostra web-app e gli stub di axis per la comunicazione con il servizio. Classe che prenderà in entrata alcuni parametri, quali NOME, COGNOME, SESSO, PROVINCIA, CITTA, DATA DI NASCITA. package bridge; import cfc.*; public class BridgeCFR { public String getCodice(String[] args) { String cf=null; try{ // Invochiamo il Locator del servizio Cod_fiscaleServiceLocator serviceFac= new Cod_fiscaleServiceLocator(); // Adesso siamo in grado di ottenere l'istanza dello stub dal locator Cod_fiscale pr=serviceFac.getCod_fiscaleCfc(); // Otteniamo una istanza di Calendar valorizzandola con la data // di nascita cosi formata ANNO - MESE - GIORNO java.util.Calendar cal=java.util.Calendar.getInstance(); cal.set(Integer.parseInt(args[7]), Integer.parseInt(args[6])-1, Integer.parseInt(args[5])); // A questo punto passiamo al servizio le informazioni di cui necessita // cognome, nome, sesso, provincia, citta, data di nascita cf=pr.makecod(args[0], args[1], args[2], args[3], args[4], cal); }catch(Exception e){ e.printStackTrace(); } return cf; } } Adesso salvate la classe con nome "BridgeCFR" dentro la cartella bridge (validatore/WEB-INF/classes/bridge).
|
|
Step 5
|
top
|
|
Subito dopo realizziamo un semplice custom tag che utilizzi la nostra classe bridge passandogli le informazioni. Attenti questa classe, se avete deciso di realizzare un validatore standalone e non un'applicazione per il web non deve essere scritta, basta solamente inserire un metodo main nella classe precedente(BridgeCFR) ed utilizzarla a riga di comando. package tags; import javax.servlet.*; import javax.servlet.jsp.JspException; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.TagSupport; import bridge.*; public class CFTag extends TagSupport{ //dichiaro gli attributi reperiti dalla form web public String cognome; public String nome; public String sesso; public String provincia; public String citta; public String giorno; public String mese; public String anno; public String codice; public void setCodice(String codice){ this. codice = codice; } public String getCodice(){ return codice; } public void setCognome(String cognome){ this.cognome=cognome; } public String getCognome(){ return cognome; } public void setNome(String nome){ this.nome=nome; } public String getNome(){ return nome; } public void setSesso(String sesso){ this.sesso=sesso; } public String getSesso(){ return sesso; } public void setProvincia(String provincia){ this. provincia = provincia; } public String getProvincia(){ return provincia; } public void setCitta(String citta){ this. citta = citta; } public String getCitta(){ return citta; } public void setGiorno(String giorno){ this.giorno = giorno; } public String getGiorno(){ return giorno; } public void setMese(String mese){ this. mese = mese; } public String getMese(){ return mese; } public void setAnno(String anno){ this. anno = anno; } public String getAnno(){ return anno; } public int doEndTag() throws JspException{ try{ JspWriter out=pageContext.getOut(); if("null".equalsIgnoreCase(cognome)||cognome==null)return EVAL_PAGE; //mi istanzio il mio bridge BridgeCFR cf=new BridgeCFR(); //e ne invoco il metodo che mi permette di effettuare la generazione del //codice fiscale String result=cf.getCodice(new String[]{cognome,nome,sesso,provincia,citta,giorno,mese,anno}); if(result==null)return EVAL_PAGE; // Adesso faccio un banale controllo di uguaglianza tra il cf fornito e quello // generato dal WS e restituisco un messggio if(result.equalsIgnoreCase(codice)) out.println("<h3>I dati inseriti risultano VALIDI</h3>"); else{ out.println("<h3>I dati inseriti NON SONO VALIDI il Codice risultante è "+ result +"</h3>"); out.println("<h3>per "+ cognome +" "+nome+" nato a "+citta+" il "+giorno+"-"+mese+"-"+anno+"</h3>"); } }catch(Exception ex){ ex.printStackTrace(); } return EVAL_PAGE; } } Adesso salvate la classe con il nome "CFTag" dentro la cartella tags.
|
|
Step 6
|
top
|
|
Realizziamo il file tld che mappa il nostro custom tag: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>validanz</shortname> <tag> <name>valida</name> <tagclass>tags.CFTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>codice</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>cognome</name> <required>true</required> +<rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>nome</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>sesso</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>provincia</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>citta</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>giorno</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>mese</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>anno</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib> Adesso salvate il file con nome "validatore.tld" dentro la cartella tlds Realizziamo il nostro web.xml: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> <web-app> <!-- la mia libreria di custom tag sarà richiamabile dalle jsp con il nome validatore --> <taglib> <taglib-uri>validatore</taglib-uri> <taglib-location>/WEB-INF/tlds/validatore.tld</taglib-location> </taglib> </web-app> Adesso salvate il file con il nome "web.xml" dentro la cartella "WEB-INF". Infine realizziamo la nostra complicatissima jsp che ci permetterà di effettuare le validazioni: <%@taglib uri="validatore" prefix="validatore"%> <html> <body> <!-- creo un form che richiami la stessa pagina fornendo le informazioni al custom tag --> <form action="#" method="post"> Codice Fiscale : <input type="text" name="codice"><br> Cognome : <input type="text" name="cognome"> <br> Nome : <input type="text" name="nome"> <br> Sesso : <select name="sesso"> <option value="m">Maschio</option> <option value="f">Femmina</option> </select><br> Citta : <input type="text" name="citta"> <br> Provincia : <input type="text" name="provincia" size="2"> <br> Giorno/Mese/Anno : <input type="text" name="giorno" size="2">/ <input type="text" name="mese" size="2">/ <input type="text" name="anno" size="4"><br> <input type="submit" name="valida" value="Valida"><br> </form> <!-- richiamo il custom tag di validazione--> <validatore:valida codice='<%=request.getParameter("codice")==null?"null":request.getParameter("codice")%>' cognome='<%=request.getParameter("cognome")==null?"null":request.getParameter("cognome")%>' nome='<%=request.getParameter("nome")==null?"null":request.getParameter("nome")%>' sesso='<%=request.getParameter("sesso")==null?"null":request.getParameter("sesso")%>' citta='<%=request.getParameter("citta")==null?"null":request.getParameter("citta")%>' provincia='<%=request.getParameter("provincia")==null?"null":request.getParameter("provincia")%>' giorno='<%=request.getParameter("giorno")==null?"null":request.getParameter("giorno")%>' mese='<%=request.getParameter("mese")==null?"null":request.getParameter("mese")%>' anno='<%=request.getParameter("anno")==null?"null":request.getParameter("anno")%>' /> </body> </html> Adesso salvate quest'ultimo file con il nome "index.jsp" dentro la cartella validatore.
|
|
Step 7
|
top
|
|
A questo punto aprite una shell e mettetevi nella cartella classes e lanciare il compilatore java passandogli nel classpath le diverse librerie che sono nella cartella lib della vostra web-app (javac -classpath %CLASSPATH%;..\lib\axis.jar;..\lib\commons-discovery.jar;..\lib\saaj.jar;..\lib\jaxrpc.jar tags/*.java bridge/*.java). Dopo aver corretto il centinaio di errori che il compilatore gentilmente vi mostrerà, sempre nella vostra shell tornate nella cartella di root (validatore/) e realizzate il war della vostra nuova web application (jar -cvf validatore.war *). A questo punto non vi resta che allocare il vostro file validatore.war che risiede nella cartella validatore, dentro la cartella webapps di tomcat (o qualsiasi altro servlet engine o application server stiate usando) e startare il server. http://localhost:8080/validatore/index.jsp è il vostro risultato …………. Potete comunque scaricare qui la vostra web-application già pronta per essere testata. Fai il DownLoad del validatore.war Ciao ………Nino Guarnacci !!!!!!!
|
|
Documentazione
|
top
|
|
|
|
| |
| JavaPortal è ideato da: |
 |

Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati sotto licenza Creative Commons
|
|
|