Creare un web service SOAP utilizzando Java ed Eclipse è un’ottima introduzione al mondo dei servizi web. Questa guida vi accompagnerà passo dopo passo nella creazione di un semplice servizio SOAP, dalla configurazione dell’ambiente di sviluppo fino alla realizzazione e test del servizio.

Prima di iniziare, assicuratevi di avere:
package it.scuola.webservice;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
@WebService(serviceName="CalcolatriceService")
public class CalcolatriceService {
@WebMethod(operationName="somma")
public int somma(@WebParam(name="a") int a, @WebParam(name="b") int b) {
return a + b;
}
@WebMethod(operationName="sottrazione")
public int sottrazione(@WebParam(name="a") int a, @WebParam(name="b") int b) {
return a - b;
}
@WebMethod(operationName="moltiplicazione")
public int moltiplicazione(@WebParam(name="a") int a, @WebParam(name="b") int b) {
return a * b;
}
@WebMethod(operationName="divisione")
public double divisione(@WebParam(name="a") int a, @WebParam(name="b") int b) {
if (b == 0) {
throw new ArithmeticException("Divisione per zero non consentita");
}
return (double) a / b;
}
}
In questo codice:
@WebService indica che questa classe rappresenta un servizio web@WebMethod identifica i metodi che saranno esposti come operazioni del servizio web@WebParam permette di specificare il nome dei parametri nel WSDL generatopackage it.scuola.webservice;
import javax.xml.ws.Endpoint;
public class CalcolatricePublisher {
public static void main(String[] args) {
// Indirizzo dove verrà pubblicato il servizio
String address = "http://localhost:8080/SoapWebServiceDemo/calcolatrice";
// Creazione dell'endpoint con la classe di implementazione del servizio
Endpoint.publish(address, new CalcolatriceService());
System.out.println("Servizio pubblicato all'indirizzo: " + address);
System.out.println("WSDL disponibile all'indirizzo: " + address + "?wsdl");
}
}
Modificate il file web.xml nella cartella WEB-INF con il seguente contenuto:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>SoapWebServiceDemo</display-name>
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>CalcolatriceService</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CalcolatriceService</servlet-name>
<url-pattern>/calcolatrice</url-pattern>
</servlet-mapping>
</web-app>
lib del pacchetto Metro estrattopackage it.scuola.webservice;
import javax.xml.ws.Endpoint;
public class CalcolatriceEndpoint {
// Metodo per avviare il servizio web
protected void start() {
// Crea un'istanza del servizio
CalcolatriceService service = new CalcolatriceService();
// Pubblica il servizio all'indirizzo specificato
String address = "http://localhost:8080/calcolatrice";
Endpoint.publish(address, service);
System.out.println("Servizio avviato all'indirizzo: " + address);
System.out.println("WSDL disponibile all'indirizzo: " + address + "?wsdl");
}
public static void main(String[] args) {
// Avvia il servizio
new CalcolatriceEndpoint().start();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
<endpoint name="CalcolatriceService"
implementation="it.scuola.webservice.CalcolatriceService"
url-pattern="/calcolatrice" />
</endpoints>
Il WSDL del vostro servizio sarà disponibile all’indirizzo:
http://localhost:8080/SoapWebServiceDemo/calcolatrice?wsdl
Per testare il servizio potete utilizzare:
package it.scuola.webservice;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class CalcolatriceClient {
public static void main(String[] args) {
try {
// URL del WSDL
URL wsdlURL = new URL("http://localhost:8080/SoapWebServiceDemo/calcolatrice?wsdl");
// Namespace e nome del servizio
QName qname = new QName("http://webservice.scuola.it/", "CalcolatriceService");
// Creazione del servizio
Service service = Service.create(wsdlURL, qname);
// Ottenere l'interfaccia per il servizio
CalcolatriceService calcolatrice = service.getPort(CalcolatriceService.class);
// Test delle operazioni
System.out.println("Somma 10 + 5 = " + calcolatrice.somma(10, 5));
System.out.println("Sottrazione 10 - 5 = " + calcolatrice.sottrazione(10, 5));
System.out.println("Moltiplicazione 10 * 5 = " + calcolatrice.moltiplicazione(10, 5));
System.out.println("Divisione 10 / 5 = " + calcolatrice.divisione(10, 5));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Nota: Per eseguire correttamente questo client, sarà necessario generare le classi client dal WSDL utilizzando lo strumento wsimport o utilizzare un’interfaccia condivisa.
Se incontrate errori relativi alle dipendenze JAX-WS, assicuratevi di:
Se il servizio non è raggiungibile:
Se il WSDL non è generato correttamente:
Congratulazioni! Avete creato con successo un web service SOAP utilizzando Java ed Eclipse. Questo esempio di base può essere ampliato aggiungendo più funzionalità e gestendo casi d’uso più complessi.
Ricordate che i servizi SOAP sono solo uno dei modi per creare web service. In progetti futuri, potreste voler esplorare anche i servizi REST, che offrono un approccio più leggero alla comunicazione tra sistemi.