JAX-WS: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m →Collegamenti esterni: +portale |
Funzionalità collegamenti suggeriti: 2 collegamenti inseriti. Etichette: Modifica visuale Modifica da mobile Modifica da web per mobile Attività per i nuovi utenti Suggerito: aggiungi collegamenti |
||
(12 versioni intermedie di 10 utenti non mostrate) | |||
Riga 1:
'''JAX-WS''' ('''Java API for XML Web Services''') è un insieme di interfacce ([[Application programming interface|API]]) del linguaggio di programmazione [[Java (linguaggio di programmazione)|Java]] dedicate allo sviluppo di [[Web service|servizi web]]. L'insieme fa parte della piattaforma [[Java EE]]. Come altre API della Java EE, JAX-WS usa [[Annotazione (Java)|annotazioni]], introdotte nella Java SE 5, per semplificare lo sviluppo e implementazioni di client e terminali di servizi web. JAX-WS fa parte del kit di sviluppo Java per
Uno dei grandi vantaggi di questa implementazione è quella di poter riutilizzare gran parte delle funzionalità, senza toccare server enterprise come il progetto Glassfish.
==Descrizione==
JAX-WS è un nuovo modello di programmazione che semplifica lo sviluppo delle applicazioni attraverso il supporto di un modello standard, ''annotation-based'', per sviluppare Web
Con un servizio document-centric, la logica di fatto viene tenuta separata dal contenuto del documento. Il servizio riceve un documento [[XML]], che contiene solo dati. I metodi specifici non vengono richiamati, ma il
JAX-WS è il modello di programmazione strategica per lo sviluppo di servizi Web. L'implementazione dello standard di programmazione della JAX-WS fornisce importanti miglioramenti come: migliore indipendenza della piattaforma per le applicazioni [[Java (linguaggio di programmazione)|Java]], [[Annotazione (Java)|annotazioni]], richiamare i servizi Web in modo asincrono, client dinamici e statici, Supporto per il Message Transmission Optimized Mechanism (MTOM, metodo di trasmissione di dati binari da e verso
Il progetto fornisce il nucleo del progetto Metro (stack di
==Storia==
I
La vera innovazione è stata quella di fare uso di standard aperti utilizzando [[XML]] e [[Hypertext Transfer Protocol|HTTP]] (modello [[SOAP]]), insieme alla presenza del [[Web Services Description Language]] (WSDL) e introduzione di un sistema di ricerca/pubblicazione ([[UDDI]]).
Sebbene da un lato questo progetto ricevesse una spinta in avanti nello sviluppo, dall'altro vi furono forti elementi di impedimento: i vari produttori e soggetti, che partecipavano allo sviluppo di componenti e implementazioni per
Questo portò alla creazione di specifiche e implementazioni proprietarie, contrarie e contraddittorie agli obiettivi iniziali della realizzazione di
Nel 2003 i vari produttori, ormai consapevoli di come fosse privo di senso avere
Il consorzio operò alla ricerca e selezione del sottoinsieme minimo di standard e specifiche comuni a tutte le implementazioni, che furono poi raggruppati e raccolti in profili a seconda degli obiettivi che si volevano raggiungere, opera tuttora in corso. In ambito WS-I, Sun ha prodotto recentemente una nuova implementazione chiamata WSIT, che consiste nel Java API for XML Web Services.
Riga 22:
Anche se le radici di JAX-WS vengono da JAX-RPC, il primo è un componente completamente diverso da quest'ultimo. Una delle differenze principali tra i due è il modello di programmazione: un servizio web basato su JAX-WS utilizza annotazioni (ad esempio ''@WebService'') per dichiarare endpoint di servizi web, mentre JAX-RPC usa la procedura di [[Remote Method Invocation|Invocazione remota dei metodi (RMI)]]. JAX-WS ha il supporto per l'invio di messaggi XML su HTTP. L'uso delle annotazioni evita la necessità di deployment descriptor. Inoltre il JAX-WS presenta altre funzionalità aggiuntive come callback asincroni. Sebbene vi siano numerose differenze, JAX-WS e JAX-RPC possono coesistere senza problemi.
==Esempio==
Ora vediamo un breve esempio di creazione di un semplice
Scriviamo ad esempio un semplice programma che calcoli l'area e il perimetro di un poligono regolare, creiamo quindi una classe “FunzioniPoligoniRegolari”, in cui definiamo l'interfaccia astratta “MioWs” al cui interno dichiariamo i metodi che andremo ad implementare; poi creiamo il nostro main.
<
package MioSOAP;
Riga 55:
}
}
</syntaxhighlight>
Endpoint.Publish(String address, Object implementor) è un metodo che crea e pubblica un endpoint per l'oggetto “implementor” al dato indirizzo “address”.
Da notare che lo schema WSDL viene così creato automaticamente.
Creiamo inoltre la classe “Implementazione” dove implementeremo i metodi dichiarati
<
package MioSOAP;
Riga 93:
}
}
</syntaxhighlight>
Una volta compilato il [[codice sorgente]] usando il comando javac, bisogna effettuare un ulteriore passo: chiamare il tool Wsgen come di seguito:
<
> wsgen –cp . MioSOAP.Implementazione
</syntaxhighlight>
Il main attiva un server http sulla porta fissata (nel nostro caso 8080).
Quando l'applicazione viene eseguita, Java SE 6 ha una piccola applicazione server web che pubblicherà il
Mentre la JVM è in esecuzione, apriamo un browser e andiamo al seguente indirizzo:
http://localhost:8080/funzionicerchio?WSDL
Riga 111:
==Annotazioni==
Alcune delle annotazioni più utilizzate sono:
* @WebService Marca una classe o un'interfaccia Java rispettivamente come una implementazione o una definizione di un Web
** name: nome del wsdl: portType (nome della classe Java priva di package)
** portName: nome del wsdl: portName (nome del WebService concatenato a Port)
** serviceName: nome del servizio (wsdl:service) (nome della classe concatenato alla Stringa “Service”)
** endpointInterface: (es. endpointInterface = "package.MioSOAP.MioWS") specifica il nome completo della SEI (“Service endpoint Interface”, interfaccia Java che dichiara i metodi che un client può invocare sul servizio)
** targetNamespace: [[namespace]] di riferimento per il WSDL e gli XML generati (nome del package java)
** wsdlLocation: l'indirizzo documento WSDL del Web
* @WebMethod Posta sopra la firma del metodo, dice all'interprete Java che si intende pubblicare questo metodo come un Web
** action: definisce l'azione per l'operazione. ( = al nome del metodo)
** exclude: specifica se il metodo va escluso dalla pubblicazione del Web
** operationName: specifica il nome di wsdl: operation per il metodo (nome del metodo)
* @SOAPBinding Specifica la mappatura del Web
==Wsgen==
Il comando della riga comandi wsgen genera gli artefatti portatili usati nei servizi web JAX-WS. Questo strumento legge una classe endpoint di un servizio web e genera tutti gli artefatti richiesti per la generazione e invocazione del
L'opzione -cp specifica dove trovare la classe di implementazione del servizio.
Questo tool genererà un certo numero di file sorgenti in una sottocartella chiamata wsgen, che poi compila. Sebbene non sia richiesto modificare questi file, è possibile vedere come il JAX-WS crei i file stub che usa nella pubblicazione del
In caso contrario è possibile che si manifesti un errore che dice che la classe in cui è presente l'annotazione “@WebService”, come FunzioniCerchio, debba dichiarare separatamente javax.jws.Webservice.targetNamespace element perché i file dei codici sorgenti non fanno parte del package.
Riga 139:
==Collegamenti esterni==
*{{cita web | 1 = http://jax-ws.java.net/ | 2 = JAX-WS Java.net | accesso = 18 luglio 2011 | dataarchivio = 9 agosto 2011 | urlarchivio = https://web.archive.org/web/20110809125412/http://jax-ws.java.net/ | urlmorto = sì }}
*{{cita web|http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/|Java Sun Articles}}
*{{cita web|
*{{cita web|url=
*{{cita web |1=https://jax-ws.dev.java.net/ |2=JAX-WS Developer |accesso=18 luglio 2011 |urlarchivio=https://web.archive.org/web/20070711131121/https://jax-ws.dev.java.net/ |dataarchivio=11 luglio 2007 |urlmorto=sì }}
*{{cita web|
*{{cita web|http://www.dontesta.it/blog/programming/come-realizzare-handlers-in-jax-ws/|Come realizzare Handlers in JAX-WS}}
|