I metodi qui' definiti saranno mappati dal tool WSCompile (link) in un Web Service di tipo <u>Document/Literal</u>.
Il Web Service disporra' di un WSDL 1.x (Web Service Definition Language), un file XML (Standard W3c) scaricabile dal WS stesso, che definisce la "forma" del Web Service e permette la creazione di Client WS senza dover conoscere ASSOLUTAMENTE la reale implementazione dello stesso.
Esistono linguaggi come PHP che forniscono Framework per creare Client WS letteralmente "on-the-fly": cio' e' realizzabile grazie al WSDL.
Inizialmente si era pensato di implementare il Web Service secondo lo "stile" XML-RPC perche', al momento, e' l'unico che offre la sicurezza di funzionamento senza dover scrivere classi per la Serializzazione/Deserializzazione.
Infatti, per il funzionamento interno di JAEBI, sarebbe stato piu' conveniente poter spedire tramite WebService interi oggetti. Esigenze di sviluppo pero' ci hanno costretti a sperimentare uno "stile" piu' nuovo di Web Service detto <u>Document-Type Web Service</u>; cio' e' stato causato dal fatto che i client J2ME, al momento, dispongono solo del Toolkit WTK2.2 di Sun, il quale supporta SOLO i Web Service "Document-Styled".
Questo standard definisce in maniera troppo generica come eseguire il mapping "Oggetto di un particolare Linguaggio"-"XSD", facendo si che WebService scritti con Framework come .NET, non siano affatto compatibili con quelli scritti con AXIS (Apache) o WSCompile (Sun).
Questa limitazione e' pero' circoscritta al solo WS (quindi, solo questa Classe): quando (e se) sara' disponibile il nuovo standard WSDL 2.0 che definisca con maggiore precisione i WS, il passaggio al tipo "Document" sarebbe veloce ed indolore per tutta l'archiettura di JAEBI.
Definizione alla linea 66 del file JAEBIWSImpl.java.
Membri pubblici | |
JAEBIWSImpl () | |
Costruttore del JAEBI Web Service. | |
int | login (java.lang.String usernick, java.lang.String usertype) |
Metodo di Login sul JAEBI Server. | |
String | logout (int sessionid) |
Metodo di Logout sul JAEBI Server. | |
String | getLastError () |
Ritorna il Messaggio relativo all'ultimo Errore verificatori. | |
String | executeRequest (int sessionid, java.lang.String xrequest) |
Esegui Request XML sul Server (Xrequest). | |
String | getUsersList () |
Ritorna una Stringa contenente la Lista degli User attualmente registrati sul Server. | |
int | getUsersNumber () |
Ritorna il numero di User attualmente registrati sul Server. | |
Attributi privati | |
JAEBIServer | coreServer |
Server JAEBI istanziato dal Web Service. | |
final Authenticator | authenticator |
Authenticator istanziato dal Web Service. | |
final HashMap | activeSessions |
HashMap che server a recuperare le Session degli User. | |
String | lastErrorMessage = null |
Last Error Message. | |
Attributi privati statici | |
static final String | configBaseDir |
Configuration BaseDir. | |
static final String | backEndPropFile |
BackEndHandler Property File Name. | |
static final String | messageWrongSessionErrorID |
WrongSessionErrorID. | |
static final String | messageServiceError |
ServiceExecError. | |
static final String | messageSessionError |
SessionError. | |
static final String | messageLogout |
Logout. |
|
Costruttore del JAEBI Web Service. Il WS di JAEBI espone i metodi necessari e sufficienti per i client per interagire con il Server. Il WS si occupa di gestire:
Il costruttore legge da File i Messaggi predefiniti e li carica in opportuni StringBuffer: si sarebbero potute utilizzare le Classi del package "org.jaebi.server.service.xml" per costruire e serializzare (marshallare) gli "xresponse", ma cio' avrebbe comportato un sovraccarico prestazionale inutile, dato che questi messaggi possono cambiare (e cio' comporterebbe la necessita' di correggere direttamente il sorgente). Definizione alla linea 167 del file JAEBIWSImpl.java. Riferimenti org.jaebi.server.JAEBIWSImpl.activeSessions, org.jaebi.server.JAEBIWSImpl.authenticator, org.jaebi.server.JAEBIWSImpl.backEndPropFile, org.jaebi.server.JAEBIWSImpl.coreServer, e org.jaebi.server.JAEBIWSImpl.lastErrorMessage. 00167 { 00168 // Inizializzazione Authenticator 00169 authenticator = new AuthenticatorImpl(); 00170 00171 // Inizializzazione "archivio Sessioni" 00172 activeSessions = new HashMap(); 00173 00174 // Inizializzazione JAEBIServer 00175 try { 00176 coreServer = new JAEBIServer( backEndPropFile ); 00177 } catch (JAEBIServerInitException e) { 00178 /* Nel caso si verifichi qui un errore, 00179 * sarebbe irrimediabile per il corretto 00180 * funzionamento del Server: conserviamo in ogni 00181 * caso il messaggio circa l'errore prodotto. 00182 */ 00183 lastErrorMessage = e.getMessage(); 00184 } 00185 }
|
|
Esegui Request XML sul Server (Xrequest).
Implementa org.jaebi.server.JAEBIWSSEI. Definizione alla linea 278 del file JAEBIWSImpl.java. Riferimenti org.jaebi.server.JAEBIWSImpl.activeSessions, org.jaebi.server.JAEBIWSImpl.coreServer, org.jaebi.server.JAEBIServer.executeRequest(), org.jaebi.server.JAEBIWSImpl.lastErrorMessage, org.jaebi.server.JAEBIWSImpl.messageServiceError, org.jaebi.server.JAEBIWSImpl.messageSessionError, e org.jaebi.server.JAEBIWSImpl.messageWrongSessionErrorID. 00278 { 00279 String xresponse = null; 00280 Session userSession = (Session)activeSessions.get( new Integer(sessionid) ); 00281 00282 if ( userSession == null ) { 00283 // Il "sessionId" fornito e' errato 00284 xresponse = messageWrongSessionErrorID; 00285 } else { 00286 // Esecuzione Richiesta 00287 try { 00288 xresponse = coreServer.executeRequest( userSession, xrequest); 00289 } catch (JAEBIServerExecException e) { 00290 lastErrorMessage = e.getMessage(); 00291 xresponse = messageServiceError; 00292 } catch (JAEBIServerWrongSessionException e) { 00293 lastErrorMessage = e.getMessage(); 00294 xresponse = messageSessionError; 00295 } 00296 } 00297 00298 return xresponse; 00299 }
Questo è il grafo delle chiamate per questa funzione: ![]() |
|
Ritorna il Messaggio relativo all'ultimo Errore verificatori.
Implementa org.jaebi.server.JAEBIWSSEI. Definizione alla linea 266 del file JAEBIWSImpl.java. Riferimenti org.jaebi.server.JAEBIWSImpl.lastErrorMessage. 00266 { 00267 return lastErrorMessage; 00268 }
|
|
Ritorna una Stringa contenente la Lista degli User attualmente registrati sul Server.
Implementa org.jaebi.server.JAEBIWSSEI. Definizione alla linea 307 del file JAEBIWSImpl.java. Riferimenti org.jaebi.server.JAEBIWSImpl.activeSessions, org.jaebi.server.JAEBIWSImpl.coreServer, org.jaebi.server.core.User.getNick(), org.jaebi.server.JAEBIServer.getRegisteredUser(), org.jaebi.server.JAEBIWSImpl.lastErrorMessage, e org.jaebi.server.auth.Session.toString(). 00307 { 00308 StringBuffer result = new StringBuffer(); 00309 Collection coll = activeSessions.values(); 00310 Iterator iter = coll.iterator(); 00311 Session currentSession = null; 00312 User currentUser = null; 00313 int i = 0; 00314 00315 result.append("[JAEBIWS] REGISTERED USERS:\n"); 00316 while ( iter.hasNext() ) { 00317 currentSession = (Session)iter.next(); 00318 00319 try { 00320 currentUser = coreServer.getRegisteredUser(currentSession); 00321 result.append("[" + ++i + "] - " + currentUser.getNick() + "\n" ); 00322 } catch (JAEBIServerWrongSessionException e) { 00323 lastErrorMessage = e.getMessage() 00324 + "Session ID: " + currentSession.toString(); 00325 //iter.remove(); 00326 } 00327 } 00328 00329 return result.toString(); 00330 }
Questo è il grafo delle chiamate per questa funzione: ![]() |
|
Ritorna il numero di User attualmente registrati sul Server.
Implementa org.jaebi.server.JAEBIWSSEI. Definizione alla linea 337 del file JAEBIWSImpl.java. Riferimenti org.jaebi.server.JAEBIWSImpl.activeSessions. 00337 { 00338 StringBuffer result = new StringBuffer(); 00339 Collection coll = activeSessions.values(); 00340 return coll.size(); 00341 }
|
|
Metodo di Login sul JAEBI Server.
Implementa org.jaebi.server.JAEBIWSSEI. Definizione alla linea 200 del file JAEBIWSImpl.java. Riferimenti org.jaebi.server.JAEBIWSImpl.activeSessions, org.jaebi.server.JAEBIWSImpl.authenticator, org.jaebi.server.JAEBIWSImpl.coreServer, org.jaebi.server.auth.Authenticator.getAuthentication(), org.jaebi.server.auth.Session.hashCode(), org.jaebi.server.JAEBIWSImpl.lastErrorMessage, e org.jaebi.server.JAEBIServer.registerNewUser(). 00200 { 00201 Session userSession; 00202 00203 // Allochiamo un Session per il nuovo User 00204 userSession = authenticator.getAuthentication(usernick); 00205 00206 /* Registriamo il Session, indicizzato in base al SessionID (in pratica, 00207 * l'hashcode di Session) */ 00208 activeSessions.put( 00209 new Integer( userSession.hashCode() ), 00210 userSession); 00211 00212 if ( coreServer == null ) 00213 return -1; 00214 00215 // Registrazione nuovo User 00216 try { 00217 coreServer.registerNewUser(usernick, userSession, usertype); 00218 } catch (JAEBIServerUserRegistrationException e) { 00219 lastErrorMessage = e.getMessage(); 00220 return -1; 00221 } 00222 00223 /* TODO 00224 * Cercare un algoritmo per la generazione del SessionID 00225 * piu' sicuro: l'HASHCODE potrebbe generare un valore 00226 * uguale al valore di errore (-1), creando confusione 00227 */ 00228 return userSession.hashCode(); 00229 }
Questo è il grafo delle chiamate per questa funzione: ![]() |
|
Metodo di Logout sul JAEBI Server.
Implementa org.jaebi.server.JAEBIWSSEI. Definizione alla linea 237 del file JAEBIWSImpl.java. Riferimenti org.jaebi.server.JAEBIWSImpl.activeSessions, org.jaebi.server.JAEBIWSImpl.coreServer, org.jaebi.server.JAEBIWSImpl.lastErrorMessage, org.jaebi.server.JAEBIWSImpl.messageLogout, org.jaebi.server.JAEBIWSImpl.messageSessionError, org.jaebi.server.JAEBIWSImpl.messageWrongSessionErrorID, e org.jaebi.server.JAEBIServer.unregisterUser(). 00237 { 00238 Session userSession; 00239 String xresponse = null; 00240 00241 // Recupero oggetto Session in base al SessionID 00242 userSession = (Session)activeSessions.get( new Integer(sessionid) ); 00243 00244 if ( userSession == null ) { 00245 xresponse = messageWrongSessionErrorID; 00246 } else { 00247 // Deregistrazione User 00248 try { 00249 coreServer.unregisterUser(userSession); 00250 xresponse = messageLogout; 00251 } catch (JAEBIServerWrongSessionException e) { 00252 xresponse = messageSessionError; 00253 lastErrorMessage = e.getMessage(); 00254 } 00255 } 00256 00257 return xresponse; 00258 }
Questo è il grafo delle chiamate per questa funzione: ![]() |
|
HashMap che server a recuperare le Session degli User. Inizialmente avevamo pensato di inviare direttamente l'oggetto Session ai Client i quali dovevano poi reinviarlo ad ogni iterazione: questa cosa pero' non e' risultata realizzabile, costringendoci ad ideare un sistema di Mapping che invia ai Client l'hashCode degli oggetti Session (definito SessionID), costruendo intanto una HashMap server-side che utilizzi questi valori come chiave e le corrispettive Session come valori: ci˜ permette il recupero dell'associazione tra User e Session. Definizione alla linea 80 del file JAEBIWSImpl.java. Referenziato da org.jaebi.server.JAEBIWSImpl.executeRequest(), org.jaebi.server.JAEBIWSImpl.getUsersList(), org.jaebi.server.JAEBIWSImpl.getUsersNumber(), org.jaebi.server.JAEBIWSImpl.JAEBIWSImpl(), org.jaebi.server.JAEBIWSImpl.login(), e org.jaebi.server.JAEBIWSImpl.logout(). |
|
Authenticator istanziato dal Web Service.
Definizione alla linea 70 del file JAEBIWSImpl.java. Referenziato da org.jaebi.server.JAEBIWSImpl.JAEBIWSImpl(), e org.jaebi.server.JAEBIWSImpl.login(). |
|
Valore iniziale:
"BackEndHandlerImpl.properties"
Definizione alla linea 86 del file JAEBIWSImpl.java. Referenziato da org.jaebi.server.JAEBIWSImpl.JAEBIWSImpl(). |
|
Valore iniziale:
"/opt/tomcat/webapps/axis/JAEBIWS/config/"
Definizione alla linea 83 del file JAEBIWSImpl.java. |
|
Server JAEBI istanziato dal Web Service.
Definizione alla linea 68 del file JAEBIWSImpl.java. Referenziato da org.jaebi.server.JAEBIWSImpl.executeRequest(), org.jaebi.server.JAEBIWSImpl.getUsersList(), org.jaebi.server.JAEBIWSImpl.JAEBIWSImpl(), org.jaebi.server.JAEBIWSImpl.login(), e org.jaebi.server.JAEBIWSImpl.logout(). |
|
Last Error Message.
Definizione alla linea 138 del file JAEBIWSImpl.java. Referenziato da org.jaebi.server.JAEBIWSImpl.executeRequest(), org.jaebi.server.JAEBIWSImpl.getLastError(), org.jaebi.server.JAEBIWSImpl.getUsersList(), org.jaebi.server.JAEBIWSImpl.JAEBIWSImpl(), org.jaebi.server.JAEBIWSImpl.login(), e org.jaebi.server.JAEBIWSImpl.logout(). |
|
Valore iniziale: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<xresponse xmlns='http://xml.netbeans.org/examples/targetNS' " + "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " + "xsi:schemaLocation='http://xml.netbeans.org/examples/targetNS " + "xresponse.xsd'>" + "<message result=\"error\">" + "Logged Out. Bye from JAEBI Server." + "</message>" + "</xresponse>"
Definizione alla linea 126 del file JAEBIWSImpl.java. Referenziato da org.jaebi.server.JAEBIWSImpl.logout(). |
|
Valore iniziale: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<xresponse xmlns='http://xml.netbeans.org/examples/targetNS' " + "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " + "xsi:schemaLocation='http://xml.netbeans.org/examples/targetNS " + "xresponse.xsd'>" + "<message result=\"error\">" + "Error during Service Execution." + "</message>" + "</xresponse>"
Definizione alla linea 102 del file JAEBIWSImpl.java. Referenziato da org.jaebi.server.JAEBIWSImpl.executeRequest(). |
|
Valore iniziale: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<xresponse xmlns='http://xml.netbeans.org/examples/targetNS' " + "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " + "xsi:schemaLocation='http://xml.netbeans.org/examples/targetNS " + "xresponse.xsd'>" + "<message result=\"error\">" + "User Session Error." + "</message>" + "</xresponse>"
Definizione alla linea 114 del file JAEBIWSImpl.java. Referenziato da org.jaebi.server.JAEBIWSImpl.executeRequest(), e org.jaebi.server.JAEBIWSImpl.logout(). |
|
Valore iniziale: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<xresponse xmlns='http://xml.netbeans.org/examples/targetNS' " + "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " + "xsi:schemaLocation='http://xml.netbeans.org/examples/targetNS " + "xresponse.xsd'>" + "<message result=\"error\">" + "Received a Wrong Session ID: please, check it." + "</message>" + "</xresponse>"
Definizione alla linea 90 del file JAEBIWSImpl.java. Referenziato da org.jaebi.server.JAEBIWSImpl.executeRequest(), e org.jaebi.server.JAEBIWSImpl.logout(). |