Pubblicato il 13/01/2024 da alnao nella categoria Java & Spring Boot

Per quanto riguarda il termine WebService esiste una definizione data dalla W3C: si tratta di un software progettato per collegare più punti di una rete in un contesto distribuito come il tipo client-server o server-server. Nelle applicazioni Java esistono diverse librerie e framework che permettono ai programmatori di costruire applicazioni è possibile creare applicazioni per l’esposizione di servizi, le principali modalità sono: applicazioni web, web service SOAP e servizi REST.

Tipicamente le applicazioni web sono costruite con l’architettura J2EE che permettono di creare applicazioni navigabili con un browser attraverso il protocollo HTTP comunemente chiamato WWW, nelle applicazioni è possibile aggiungere framework evoluti come Struts o Spring per gestire servlet e migliorare la struttura delle applicazioni. Si rimanda ai vari articoli dedicati a questi argomenti per maggior approfondimenti.


Web service esposti con il protocollo SOAP possono essere creati con le librerie Axis2, JaxWS oppure CXF, grazie a queste librerie è possibile creare servizi di tipo SOAP-XML o simili, si rimanda alla documentazione ufficiale di Apache-Axis per maggior in formazioni riguardo a questa libreria. Esistono molti tutorial e guide che descrivono i passi necessari per creare webservice con questa libreria, in particolare questi descrivono come un semplice esempio di servizio:
public int add(int num1, int num2){
    return num1+num2;
}

possa essere descritto come servizio tramite un file XML:

<service>
    <parameter name="ServiceClass" locked="false">
        com.chamiladealwis.ws.service.SimpleService
    </parameter>
    <operation name="sayHello">
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
    </operation>
</service>

La libreria poi permette di esportare il servizio aar (Axis2 Archive) e possono essere distribuiti tramite il pacchetto war di Axis2.

Il programma Eclipse mette a disposizione una procedura guidata molto semplice ed efficace per creare servizi con questa libreria, anche in questo caso si rimanda al sito ufficiale dove è possibile trovare un semplice tutorial. Grazie a questa procedura è possibile creare webservice esposte con un il protoccolo SOAP e un WSDL:
 

questa libreria un po’ datata e non a volte non funziona con le ultime versioni di Eclipse e del servet Tomcat.

E’ possibile anche usare la libreria JaxWS per la definizione di questo tipo di webservice senza l’uso di Eclipse e Maven, si rimanda sempre alla documentazione ufficiale.

Tramite la libreria Jersey è possibile creare semplici servizi REST, grazie a maven è possibile selezionare il tipo base “Jersey-quickstart-webapp” presente nel repository “org.glassfish.jersey”, questo archetipo costruisce una applicazione web con la servelet configurata già pronta all’uso e una piccola classe di esempio che crea e espone un semplice servizio con una risorsa e il metodo GET dello standard HTTP, il codice di esempio della classe di esemepio:

@Path("/myresource")
public class MyResource {
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello() {
  return "<html> " + "<title>" + "Hello " + "</title>"
      + "<body><h1>" + "Hello " + "</body></h1>" + "</html> ";
}
@GET
@Path("/json")
@Produces(MediaType.APPLICATION_JSON)
public Response hello() {
  Persona p=new Persona("Alberto");
  return Response.status(Response.Status.OK).entity(p).build();
}
Questo servizio può essere richiamato da un piccolo client di esempio:
public class App{
    public static void main( String[] args )    {
    System.out.println("App 11RestClient");
        ClientConfig config = new ClientConfig();
        Client client = ClientBuilder.newClient();// newClient(config);
        WebTarget target = client.target(getBaseURI());
        javax.ws.rs.core.Response response = target.path("webapi").
                            path("myresource/json").
                            request().
                            accept(MediaType.APPLICATION_JSON).
                            get(Response.class);//.toString();
        System.out.println(response.toString());
        System.out.println(response.readEntity( String.class ) );
    }
    private static URI getBaseURI() {
        return UriBuilder.fromUri("http://localhost:8081/11RestServer").build();
    }
}

L’esempio completo e funzionante può essere trovato nel solito repository:

https://github.com/alnao/JavaExamples/tree/master/GenericJava
MENU