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.
|