MokaByte 91- Dicembre 2004 
Web Services più sicuri e veloci
di
Massimiliano Bigatti

La nuova versione del JWSDP include due novità sostanziali, oltre ad un insieme di aggiornamenti alle classiche API distribuite in questo pacchetto. La prima è l'implementazione 1.0 FCS delle specifiche Web Services Security; la seconda è la presenza della versione 1.0 EA di un nuovo parser XML di tipo pull.


Novembre 2004 è il mese in cui SUN ha reso disponibile al grande pubblico un aggiornamento interessante del proprio JWSDP (Java Web Services Developer Pack). La nuova versione 1.5 include un aggiornamento delle diverse tecnologie che lo compongono. Si ricordi che questa non è una piattaforma, ma un "favore" che SUN fa agli sviluppatori, rendendo disponibile in un unico download diverse tecnologie, primariamente legate al mondo XML.

 

Apriamo il pacco
La panoramica delle tecnologie incluse nel JWSDP 1.5 è illustrata in figura 1. Come si nota, sono presenti le API SUN per i dati XML (JAXB, JAXP, JAXR, JAX-RPC, SAAJ, Streaming XML Parser), pezzi Web (JSTL), specifiche ed API varie per XML (XML Digital Signature, XML and Web Services Security), applicazioni di esempio e strumenti (WS-I Attachment Sample Application, Registry Server).

 


Figura 1
- Le tecnologie presenti in JWSDP 1.5

Si nota anche che l'abbandono del nome JAXM per l'implementazione di SOAP nella piattaforma Java. In quest'area c'è stata un po' di confusione: si è partiti con JAXM, che includeva la messaggistica SOAP e l'implementazione del relativo modello informativo. Poi è stata creata SAAJ, che includeva la sola parte di modello di SOAP; JAXM a quel punto esisteva come sola messaggistica. Oggi la pagina Web di JAXM è un po' obsoleta, il termine non viene più citato nella documentazione ufficiale e SAAJ pare includere anche la messaggistica SOAP.
La tecnologia JAXM è stata dunque tramutata in SAAJ, ma i contenuti sono sempre (più o meno) quelli di allora.

 

Requisiti ed installazione
Il JWSDP 1.5 è supportato su Solaris, Linux e Windows, ma il programma di installazione funziona anche su Mac OS X (figura 2). I Web Container supportati sono Tomcat 5.0, SUN Java System Application Server Plaftorm Edition 8.0.0_01 e SUN Java System Web Server 6.1 sp3. Ma si tenga presente che il Web Container è richiesto solo per componenti quali JSTL ed il Web Service Registry. Il resto delle tecnologie può girare tranquillamente al di fuori del container Web.

 


Figura 2
- Installazione del JWSDP 1.5

 

Un nuovo parser XML
Una delle novità sostanziali di questo JWSDP 1.5 è la presenza di una nuova tipologia di parser XML, detto di "tipo pull". SUN Java Streaming XML Parser (SJSXP) è una implementazione del JSR173, che introduce le nuove Streaming API for XML (StAX).
Oggi è dunque disponibile una nuova modalità per accedere a documenti XML, oltre alle già consolidate DOM, SAX e Dom4J. Ma quali sono le caratteristiche peculiari di questo parser?
Con SAX condivide la capacità di elaborare flussi di dati di grosse dimensioni; se il modello DOM risulta in certi casi più comodo per il programmatore a livello di accesso ai dati, ha il forte limite di occupare molta memoria per rappresentare internamente l'albero del documento XML.
Diversamente da SAX, in StAX è l'applicazione che conduce le operazioni, e non viceversa. E' infatti questa che richiede al parser di fornire il prossimo blocco di informazioni, e non il parser ad inviare eventi all'applicazione per ogni elemento informativo rilevato.
StAX ha inoltre la caratteristica di consentire la creazione di documenti XML, mentre SAX ne consentiva solo la lettura.
Per leggere un documento XML con StAX si può procedere come segue (il codice è ripreso dagli esempi del JWSDP 1.5). Per prima cosa è necessario ottenere una input factory:


XMLInputFactory xmlif = XMLInputFactory.newInstance();
xmlif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES,Boolean.TRUE);
xmlif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES,Boolean.FALSE);
xmlif.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE , Boolean.TRUE);
xmlif.setProperty(XMLInputFactory.IS_COALESCING , Boolean.TRUE);

a questo punto è possibile leggere il file, creando un FileInputStream per leggere dal file e passandolo ad un metodo di creazione di un XMLStreamReader:
FileInputStream fis = new FileInputStream(filename);
XMLStreamReader xmlr = xmlif.createXMLStreamReader(filename, fis);

l'oggetto XMLStreamReader risponde ad una interfaccia che ricorda gli iteratori: per ottenere l'elemento successivo viene chiamato il metodo next(), mentre per sapere se esistono altri elementi si impiega hasNext():
while(xmlr.hasNext()){
eventType = xmlr.next();
System.out.println(eventType);
}

Il metodo next() ritorna un intero che identifica il tipo di evento. L'oggetto vero e proprio è accessibile dai diversi metodi dell'oggetto XMLStreamReader. Questo comportamento è differente rispetto agli iteratori, dove next() ritorna l'elemento successivo. D'altra parte, StAX è stato progettato per essere il più performante possibile, dunque in questo modo si evita la creazione di un oggetto che rappresenta l'elemento XML ad ogni esecuzione di next().

 

Benvenuta sicurezza
Le altre novità in questo rilascio sono rappresentate dalle due tecnologie dedicate alle firme digitali e la sicurezza di XML e dei servizi Web. In particolare, con la seconda è possibile rendere sicure applicazioni basate su JAX-RPC, sulla base delle specifiche di sicurezza di OASIS. Sono supportati i tre standard SOAP Message Security 1.0, Username Token Profile, X.509 Token Profile. Queste funzionalità erano presenti nel JWSDP 1.4 in versione early-access. In questa sono definitive.
La cosa positiva è che SUN, membro del consorzio per l'interoperabilità WS-I ha implementato la sicurezza in JWSDP in modo compatibile con il resto del mondo. Il consorzio ha infatti adottato, come profilo di sicurezza, quello definito da OASIS. A sua volta, OASIS aveva adottato la proposta WS-Security, prodotta inizialmente da Microsoft, IBM e Verisign. Si può dire quindi che nella piattaforma Java ci sia un pezzo inventato da Microsoft :-).
Ad ogni modo, questo significa anche che i Web Service resi sicuri da JWSDP 1.5 possono essere utilizzati da client Microsoft. E che i servizi sicuri Microsoft possono essere invocati da Java.

 

Conclusioni
I Java Web Services ora possiedono un elemento fondamentale, che risolve uno dei problemi che prima venivano additati come motivazione principale per l'adozione dei servizi Web a ritmo ridotto. Basteranno questi nuovi elementi per portare ad uno sprint in questo settore?

 

Riferimenti
[1] SUN, "Java Web Services Devloper Pack 1.5 Release Notes", http://java.sun.com/webservices/docs/1.5/ReleaseNotes.html
[2] Eliotte Harold, "An Introduction to StAX" http://www.xml.com/pub/a/2003/09/17/stax.html
[3] WS-Security è ora una specifica ufficiale OASIS, http://www.javawebservices.it/canali/detail.php?id=402


Massimiliano Bigatti è autore dei libri "Da Visual Basic a Java", "Da Visual Basic a C#" e "Java Web Application". E' certificato, tra le altre, come SUN Certified Enterprise Architect for Java Platform, Enterprise Edition Technology. E' content editor del portale dedicato ai Web Services http://javawebservices.it.


MokaByte® è un marchio registrato da MokaByte s.r.l. 
Java®, Jini® e tutti i nomi derivati sono marchi registrati da Sun Microsystems.
Tutti i diritti riservati. E' vietata la riproduzione anche parziale.
Per comunicazioni inviare una mail a info@mokabyte.it