JAX-WS: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica Etichette: Modifica da mobile Modifica da web per mobile |
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 |
||
(4 versioni intermedie di 4 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 Web service ([[Java Web Service Development Pack]] – JWSDP) e include [[Java Architecture for XML Binding]] (JAXB) e [[SOAP]].
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 service application e client. Le specifiche di JAX-WS si allineano strategicamente con la tendenza attuale del settore verso un modello di messaggistica più ''document-centric'' e sostituisce il modello di [[chiamata di procedura remota]] (''object-centric'' model) come definito da JAX-RPC.
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 Web service applica la sua [[logica di business]] al documento, il cui contenuto determina il flusso di lavoro di elaborazione. Il web service di un'agenzia di viaggi è un buon esempio di servizio document-centric. Il servizio riceve una richiesta: un documento [[XML]] che contiene i dettagli dell'itinerario di viaggio che si desidera effettuare (date, luoghi da visitare, alloggio preferito, e così via), il servizio elabora la richiesta in base al contenuto del documento.
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 Web service), il supporto per SOAP.
Riga 23 ⟶ 26:
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 52 ⟶ 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 nella precedente [[classe astratta]].
<
package MioSOAP;
Riga 90 ⟶ 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).
Riga 113 ⟶ 116:
** 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) endpointInterface: (classe java, comprensiva del package, concatenata alla Stringa “ServicePortType”)
** targetNamespace: [[namespace]] di riferimento per il WSDL e gli XML generati (nome del package java)
** wsdlLocation: l'indirizzo documento WSDL del Web service. L'indirizzo può essere relativo o assoluto.
* @WebMethod Posta sopra la firma del metodo, dice all'interprete Java che si intende pubblicare questo metodo come un Web service. Il corrispettivo metodo dovrà essere dichiarato “public” e dovrà restituire qualcosa (nel nostro caso restituisce un double). Anche questa ha alcuni attributi come:
Riga 120 ⟶ 123:
** operationName: specifica il nome di wsdl: operation per il metodo (nome del metodo)
* @SOAPBinding Specifica la mappatura del Web service nel protocollo di messaggi [[SOAP]]. In particolare si vede nel costrutto tra parentesi lo stile dei messaggi scelto. In caso i metodi del Web service utilizzino tipi semplici come String o int è possibile utilizzare l'annotazione “@SOAPBinding(style=Style.RPC)” come nel nostro esempio.
==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 Web service. Wsgen genererà un file WSDL solo quando viene richiesto.
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 Web service cercando i loro codici sorgenti. I file originali devono trovarsi nel rispettivo package quando si chiama lo strumento Wsgen.
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.
==JAX-WS handlers==
Riga 130 ⟶ 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|https://download.oracle.com/javaee/5/tutorial/doc/bnayl.html|Java SE 5 Tutorial}}
|