Activitats

Creació d'un servei web SOAP amb NetBeans

L’objectiu d’aquesta activitat és veure les facilitats que aporta NetBeans en la creació d’un servei web SOAP.

Creeu un servei web SOAP amb Java EE 7 que permeti les següents operacions:

  • Proporcionar una llistat de concerts i el nombre de places lliures a cada un d’ells.
  • Fer la reserva d’una entrada per a un d’aquests concerts.
  • Cancel·lar una reserva d’una entrada.

Cal que creeu el servei web fent servir els assistents que proporciona NetBeans.

Feu servir l’aplicació web “Resentioc”, que trobareu en el següent

enllaç ( 9.5 KB )
com a punt de partida.

Començarem l’activitat important el projecte “Resentioc”, que us servirà de punt de partida a NetBeans.

Una vegada tingueu el projecte “Resentioc” importat a NetBeans, feu clic amb el botó dret i seleccioneu New / Web Service… (vegeu la figura), i s’obrirà l’assistent que us permetrà crear el servei web.

Figura ‘New’ / ‘Web Service…’ a NetBeans

Cal especificar el nom que tindrà el servei i el paquet on es generarà la classe d’implementació (vegeu la figura).

Podeu triar també si crear la classe des de zero o bé fer servir algun EJB ja desenvolupat. Per fer l’exercici ens quedarem amb l’opció per defecte; anomenareu NetbeansTicketService el servei i el creareu al paquet cat.xtec.ioc.service.impl:

Figura Assistent de creació d’un servei web SOAP a NetBeans

Feu clic a Finish i veureu que s’ha generat la classe NetbeansTicketService al paquet cat.xtec.ioc.service.impl amb la implementació del servei web. Com que en Java EE 7 la creació d’una interfície per al servei web és opcional, l’assistent de NetBeans no en crea cap.

Ara toca afegir les tres operacions que ha d’oferir el servei web de gestió de reserves; per fer-ho, feu clic amb el botó dret al servei web creat i seleccioneu New / Add Operation… (vegeu la figura).

Figura ‘New’ / ‘Add Operation…’ a NetBeans

I creeu l’operació que ens ha de proporcionar la llistat de concerts i el nombre de places lliures a cada un d’ells (vegeu la figura).

Figura Operació getAllShows

Feu clic al botó OK i veureu que s’ha generat el mètode getAllShows a la classe NetBeansTicketService.

Ara toca escriure la implementació d’aquest mètode; podeu fer ús del repositori de concerts en memòria que teniu a la capa de persistència. Si ho feu, el codi us quedarà similar a aquest:

  1. package cat.xtec.ioc.service.impl;
  2.  
  3. import cat.xtec.ioc.domain.Show;
  4. import cat.xtec.ioc.domain.repository.ShowRepository;
  5. import cat.xtec.ioc.domain.repository.impl.InMemoryShowRepository;
  6. import java.util.ArrayList;
  7. import javax.jws.WebService;
  8. import javax.jws.WebMethod;
  9. import javax.jws.WebParam;
  10.  
  11. @WebService(serviceName = "NetbeansTicketService")
  12. public class NetbeansTicketService {
  13.  
  14. private final ShowRepository showRepository = new InMemoryShowRepository();
  15. /**
  16.   * Web service operation
  17.   */
  18. @WebMethod(operationName = "getAllShows")
  19. public ArrayList<Show> getAllShows() {
  20. return new ArrayList<Show>(this.showRepository.getAllShows());
  21. }
  22. }

Repetiu el procés per crear les operacions que permetran fer una reserva i cancel·lar-la. Un cop implementades aquestes operacions, el codi de la classe que implementa el servei web us quedarà similar a aquest:

  1. package cat.xtec.ioc.service.impl;
  2.  
  3. import cat.xtec.ioc.domain.Show;
  4. import cat.xtec.ioc.domain.repository.ShowRepository;
  5. import cat.xtec.ioc.domain.repository.impl.InMemoryShowRepository;
  6. import java.util.ArrayList;
  7. import javax.jws.WebService;
  8. import javax.jws.WebMethod;
  9. import javax.jws.WebParam;
  10.  
  11. @WebService(serviceName = "NetbeansTicketService")
  12. public class NetbeansTicketService {
  13.  
  14. private final ShowRepository showRepository = new InMemoryShowRepository();
  15. /**
  16.   * Web service operation
  17.   */
  18. @WebMethod(operationName = "getAllShows")
  19. public ArrayList<Show> getAllShows() {
  20. return new ArrayList<Show>(this.showRepository.getAllShows());
  21. }
  22.  
  23. /**
  24.   * Web service operation
  25.   */
  26. @WebMethod(operationName = "makeReservation")
  27. public Show makeReservation(@WebParam(name = "showId") String showId) {
  28. return this.showRepository.makeReservation(showId);
  29. }
  30.  
  31. /**
  32.   * Web service operation
  33.   */
  34. @WebMethod(operationName = "cancelReservation")
  35. public Show cancelReservation(@WebParam(name = "showId") String showId) {
  36. return this.showRepository.cancelReservation(showId);
  37. }
  38. }

Amb això ja teniu implementat el servei web de gestió de reserves; per desplegar-lo tan sols cal que feu Run a NetBeans (vegeu la figura) i es farà el desplegament al servidor d’aplicacions que tingueu configurat per al projecte.

Figura ‘Run’ a NetBeans

Un cop desplegat, i amb el servidor d’aplicacions corrent, el podeu provar fent clic amb el botó dret al servei web creat i seleccionant Test Web Service (vegeu la figura).

Figura ‘Test Web Service’ a NetBeans

I s’obrirà al navegador una pàgina web (vegeu la figura) on podreu veure el document WSDL de definició del servei web i la llista d’operacions que ofereix, cada una amb entrades per als seus paràmetres i un botó per provar-la:

Figura Pàgina de test del servei web

El codi de la solució d’aquesta activitat el podeu descarregar del següent

enllaç ( 10.5 KB )
.

Creació d’un client Java 'stand-alone' per a un servei web SOAP amb NetBeans

L’objectiu d’aquesta activitat és veure les facilitats que us aporta NetBeans en la creació d’un client Java stand-alone que consumeixi un servei web SOAP.

Creeu un client Java stand-alone que consumeixi el servei web de gestió de reserves d’entrades a concerts.

Cal que creeu el client fent servir els assistents que proporciona NetBeans.

Feu servir l’aplicació “Resentioc”, que trobareu en el següent

enllaç ( 10.5 KB )
i l’aplicació “Resentclientioc”, que trobareu en el següent
enllaç ( 6.9 KB )
com a punt de partida.

Començarem l’activitat important els projectes “Resentioc” i “Resentclientioc”, que us serviran de punt de partida, a NetBeans.

Una vegada tingueu els dos projectes importats a NetBeans cal que desplegueu el servei web de gestió de reserva d’entrades per a concerts fent clic amb el botó dret sobre el projecte “Resentioc” i polsant Run (vegeu la figura).

Figura Desplegament del servei web

Un cop desplegat i amb el servidor d’aplicacions corrent, verifiqueu que el servei web funciona correctament fent clic amb el botó dret al servei web NetbeansTicketService i seleccionant Test Web Service (vegeu la figura).

Figura Prova del servei web

I s’obrirà al navegador una pàgina web (vegeu la figura) on podreu veure el document WSDL de definició del servei web i la llista d’operacions que ofereix, cada una amb entrades per als seus paràmetres i un botó per provar-la:

Figura Pàgina de test del servei web

Nota important: la carpeta on teniu el projecte “Resentclientioc” no hauria de tenir espais en blanc al path, ja que wsimport no generaria bé els artefactes.

Ara toca fer servir NetBeans per crear una aplicació Java que consumeixi aquest servei web. Per fer-ho, feu clic amb el botó dret al projecte “Resentclientioc” i seleccioneu New / Web Service Client… (vegeu la figura).

Figura ‘New’ / ‘Web Service Client…’ a NetBeans

A l’assistent cal especificar l’URL on està publicat el document WSDL de definició del servei web i el paquet on volem que NetBeans generi els artefactes necessaris per poder consumir el servei web des d’aquest client (vegeu la figura).

Figura Assistent de creació del client a NetBeans

Quan polseu Finish, NetBeans generarà els artefactes necessaris per poder consumir el servei web amb la utilitat wsimport i afegirà una referència al servei web al menú Web Service References (vegeu la figura) i un conjunt de classes Java amb els artefactes necessaris per poder consumir el servei web al paquet cat.xtec.ioc.service.jaxws.

Figura ‘Web Service References’

Ara creeu la classe NetBeansTicketServiceClient al paquet cat.xtec.ioc.client, creeu a la classe un mètode main i feu-hi clic amb el botó dret de ratolí: Insert Code… / Call Web Service Operation…; veureu que us apareixen els serveis web que teniu referenciats (vegeu la figura) i podeu escollir l’operació que voleu cridar.

Figura Serveis web referenciats

Seleccioneu l’operació getAllShows i NetBeans us generarà el codi necessari per cridar l’operació al servei web. Si NetBeans us genera els noms de les classes amb el prefix del paquet cat.xtec.ioc.service.impl elimineu-lo i afegiu els imports corresponents al paquet on wsimport ha generat els artefactes necessaris per poder consumir el servei web (cat.xtec.ioc.service.jaxws).

  1. package cat.xtec.ioc.client;
  2.  
  3. import cat.xtec.ioc.service.jaxws.NetbeansTicketService;
  4. import cat.xtec.ioc.service.jaxws.NetbeansTicketService_Service;
  5. import cat.xtec.ioc.service.jaxws.Show;
  6.  
  7. public class NetBeansTicketServiceClient {
  8. public static void main(String[] args) {
  9.  
  10. try { // Call Web Service Operation
  11. NetbeansTicketService_Service service = new NetbeansTicketService_Service();
  12. NetbeansTicketService port = service.getNetbeansTicketServicePort();
  13. // TODO process result here
  14. java.util.List<Show> result = port.getAllShows();
  15. System.out.println("Result = "+result);
  16. } catch (Exception ex) {
  17. // TODO handle custom exceptions here
  18. }
  19. }
  20. }

Un cop vist el procés, creeu vosaltres, seguint aquests passos, l’aplicació Java client per gestionar les reserves a concerts. Una possible codificació que mostra el llistat de concerts amb les places disponibles per consola seria la següent:

  1. package cat.xtec.ioc.client;
  2.  
  3. import cat.xtec.ioc.service.jaxws.NetbeansTicketService;
  4. import cat.xtec.ioc.service.jaxws.NetbeansTicketService_Service;
  5. import cat.xtec.ioc.service.jaxws.Show;
  6. import java.util.List;
  7.  
  8. public class NetBeansTicketServiceClient {
  9.  
  10. public static void main(String[] args) {
  11. NetbeansTicketService_Service service = new NetbeansTicketService_Service();
  12. NetbeansTicketService port = service.getNetbeansTicketServicePort();
  13. List<Show> list = port.getAllShows();
  14. printALlShows(list);
  15. }
  16.  
  17. public static void printALlShows(List<Show> shows) {
  18. shows.stream().forEach((show) -> {
  19. System.out.println("Show [id=" + show.getId() + ", name=" + show.getName() + ", available tickets=" + show.getAvailableTickets() + "]");
  20. });
  21. }
  22. }

El codi de la solució d’aquesta activitat, amb una classe main que treu per consola el llistat de concerts amb les entrades disponibles, el podeu descarregar del següent

enllaç ( 9.5 KB )
.

Consumint serveis web publicats a internet

L’objectiu d’aquesta activitat és fer un client que Java stand-alone que consumeixi un servei web SOAP publicat a internet.

Creeu un client Java stand-alone que mostri les ciutats de les quals té informació sobre el temps el servei web GlobalWeather. Podeu obtenir la informació necessària sobre aquest servei web aquí: www.service-repository.com/service/overview/-2082028434.

A vegades els recursos a internet canvien de lloc o simplement deixen d’estar disponibles. Si no us funciona l’enllaç podeu fer l’exercici amb qualsevol servei web publicat a internet que tingui accessible el document WSDL de definició del servei.

Començarem l’activitat creant el projecte “GlobalWeatherClient” a NetBeans. Per fer-ho, feu New Project… / Java / Java Application (vegeu la figura).

Figura Creació d’una aplicació Java a NetBeans

Polseu Next i ompliu el formulari de l’assistent especificant com a nom del projecte “GlobalWeatherClient” i generant ja la classe main, que contindrà el codi del client (vegeu la figura).

Figura Assistent de creació d’una aplicació Java a NetBeans

Ara toca fer servir NetBeans per crear una aplicació Java que consumeixi aquest servei web. Per fer-ho, feu clic amb el botó dret al “projecteGlobalWeatherClien” i seleccioneu New / Web Service Client… (vegeu la figura).

Figura ‘New’ / ‘Web Service Client…’ a NetBeans

Cal especificar l’URL on està publicat el document WSDL de definició del servei web i el paquet on volem que NetBeans generi els artefactes necessaris per poder consumir el servei web des d’aquest client (vegeu la figura). El servei GlobalWeather té publicat el document WDSL en aquesta adreça: www.webservicex.com/globalweather.asmx?WSDL, i direm a NetBeans que generi els artefactes al paquet per defecte.

Figura Assistent de creació del client a NetBeans

Amb aquesta informació, NetBeans generarà els artefactes necessaris per poder consumir el servei web amb la utilitat wsimport i afegirà una referència al servei web al menú Web Service References.

Ara aneu a la classe GlobalWeatherClient al paquet cat.xtec.ioc.client i feu clic amb el botó dret del ratolí al mètode main, Insert Code… / Call Web Service Operation….

Veureu que us apareixen els serveis web que teniu referenciats (vegeu la figura) i podeu escollir l’operació que voleu cridar.

Figura Serveis web referenciats

Seleccioneu l’operació GetCitiesByCountry i NetBeans us generarà el codi necessari per cridar l’operació al servei web:

  1. private static String getCitiesByCountry(java.lang.String countryName) {
  2. net.webservicex.GlobalWeather service = new net.webservicex.GlobalWeather();
  3. net.webservicex.GlobalWeatherSoap port = service.getGlobalWeatherSoap();
  4. return port.getCitiesByCountry(countryName);
  5. }

Ara ja sols us cal cridar aquesta funció des del mètode main especificant un país, per exemple Spain, i imprimir el resultat per la consola:

  1. package cat.xtec.ioc.client;
  2.  
  3. public class GlobalWeatherClient {
  4.  
  5. /**
  6.   * @param args the command line arguments
  7.   */
  8. public static void main(String[] args) {
  9. System.out.println(getCitiesByCountry("Spain"));
  10. }
  11.  
  12. private static String getCitiesByCountry(java.lang.String countryName) {
  13. net.webservicex.GlobalWeather service = new net.webservicex.GlobalWeather();
  14. net.webservicex.GlobalWeatherSoap port = service.getGlobalWeatherSoap();
  15. return port.getCitiesByCountry(countryName);
  16. }
  17.  
  18. }

Si executeu el client fent primer Build i després amb Run File veureu a la consola la llista de ciutats que torna el servei web cridat:

  1. <NewDataSet>
  2. <Table>
  3. <Country>Spain</Country>
  4. <City>Fuerteventura / Aeropuerto</City>
  5. </Table>
  6. <Table>
  7. <Country>Spain</Country>
  8. <City>Hierro / Aeropuerto</City>
  9. </Table>
  10. <Table>
  11. <Country>Spain</Country>
  12. <City>La Palma / Aeropuerto</City>
  13. </Table>
  14. <Table>
  15. <Country>Spain</Country>
  16. <City>Las Palmas De Gran Canaria / Gando</City>
  17. </Table>
  18. <Table>
  19. <Country>Spain</Country>
  20. <City>Lanzarote / Aeropuerto</City>
  21. </Table>
  22. <Table>
  23. <Country>Spain</Country>
  24. <City>Tenerife Sur</City>
  25. </Table>
  26. <Table>
  27. <Country>Spain</Country>
  28. <City>Tenerife / Los Rodeos</City>
  29. </Table>
  30. ...

El codi de la solució d’aquesta activitat el podeu descarregar del següent

.

Anar a la pàgina anterior:
Serveis web SOAP amb Java EE 7
Anar a la pàgina següent:
Exercicis d'autoavaluació