Java EE - WebServices - Esempi

WebService - Realizzare un webservice in Java EE
G.Morreale

Introduzione:

Introduzione ai webservice: http://it.wikipedia.org/wiki/Web_service


Java EE e i webservice:

Le specifiche JSR 109 riguardanti i webservice su Java EE, definiscono due metodi per implementare un webservice:

  • Attraverso una classe Java
  • Attraverso l'uso delle tecnologia EJB


L'Esempio

Supponiamo di voler realizzare un webservice in grado di sommare due numeri interi.
Il metodo java in questione a prescindere dal webservice è il seguente:

  public int sommaNumeri(int a, int b)
  {    
    return a + b;
  }

Implementazione Esempio attraverso una classe Java

nota:
Ovviamente la classe Java in questione deve essere distribuita su un apposito container (glassfish, jboss etc.)

Codice della classe a prescindere dal webservice:

public class MyWebService
{    
  public int sommaNumeri(int a, int b)
  {    
    return a + b;
  }
        }

        Trasformazione delle classe in webservice:

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class WS 
{
  @WebMethod
  public int sommaNumeri(int a, int b){    
    return a + b;
  }    
}

Come è possible notare, banalmente sono state aggiunte due annotation, una per indicare che la classe implementa un webservice(@WebService) l'altra per indicare che il metodo in questione è un operazione che il webservice mette a disposizione(@WebMethod). Ovviamente sono state aggiunte anche le apposite import.

Implementazione Esempio attraverso uno Stateless Bean

Codice del session bean a prescindere dal webservice:

L'interfaccia

import javax.ejb.Local;

@Local
public interface WsLocal {

    public int sommaNumeri(int a, int b);
    
L'implementazione
}


import javax.ejb.Stateless;

@Stateless
public class WsBean implements WsLocal 
{     
   public int sommaNumeri(int a, int b)
   {    
    return a + b;
   }
}

Aggiunta disponibilità sotto forma di webservice

import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;

@Stateless
@WebService
public class WsBean implements WsLocal 
{     
    @WebMethod
   public int sommaNumeri(int a, int b)
   {    
    return a + b;
   }

Anche in questo con un paio di annotation la componente software, in questo caso il session bean, è stato reso disponibile anche come webservice.


Un pò di chiarezza su nomi e versioni

Sul web si trovano diverse sigle e api:

  • JAX-RPC: E' la specifica riguardante le api java per la Remote procedure call(RPC) basata su xml, la sua prima release è stata rilasciata nel giugno 2002.

  • JAXB(Java API for XML binding): E' una specifica rilasciata inizialmente nell'ottobre 2003 per mettere a disposizione dei tool e delle api per il mapping classi java <-> documenti xml. Ovviamente è utilizzata e fà parte delle api per i webservice.

  • WSTI(Web services interoperability technology):E' parte dello stack webservice in grado di garantire alcune importanti features riguardanti l'interoperabiltà tra webservice(sicurezza,transazioni etc)

  • JAX-WS: E' la nuova versione delle JAX-RPC, infatti con la versione 2.0 si cambia nome (JAX-RPC => JAX-WS) e vengono aggiunte una serie di nuove feature.

Differenze tra JAX-RPC 1.1 e JAX-WS

JAX-RPC è stata rilasciata come ver 1.0, la versione successiva è stata la 1.1, la 2.0 è stata rinominata in JAX-WS 2.0, e al momento è stata rilasciata la versione 2.1
JAXB attualmente è alla versione 2.1 (https://jaxb.dev.java.net/ )

  • Metro: E' un webservice stack comprendente le implementazioni di JAX-WS, JAXB e WSIT


Conclusione
Negli esempi si mostra come con il semplice uso delle annotation si riesce a creare data una classe java o uno stateless bean un interfaccia webservice per rendere disponibili le funzionalità di un metodo attraverso la tecnologia in questione

3 comments:

Giuseppe Morreale said...

Lascia un tuo feedback sull'annuncio.. ti è tornato utile, gli argomenti sono spiegati bene?

maintaining state in webservice said...

Let'see

Smanettomane said...

Ciao, grazie per il posto molto chiaro.
Come faccio a richiamare il webservice? Ti sarei grato se potessi indicare anche questo aspetto