Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 18 di 68
  • livello ninja
Indice lezioni

Test del Web service

Effettuiamo il test di un Web service iniziando con il Web Service Tester di JBoss Developer Studio e concludendo con la generazione del client.
Effettuiamo il test di un Web service iniziando con il Web Service Tester di JBoss Developer Studio e concludendo con la generazione del client.
Link copiato negli appunti

Affrontiamo adesso la fase di test del servizio. Iniziamo con il Web Service Tester di JBoss Developer Studio.
Utilizzando l'URL:

http://localhost:8080/ProgettoEjb1/ConverterBeanService/ConverterBean?WSDL

scarichiamo il file avendo cura che l'estensione sia wsdl. Successivamente poniamo il file wsdl appena salvato nella cartella META-INF del progetto
ProgettoEjb1 e, successivamente, con il tasto destro del mouse, apriamo su di esso il menù. Selezioniamo quindi "Web Services" e "Test in Jboss Web Service Tester" come mostrato in figura:

Figura 1. Test in Jboss Web Service Tester
JBoss Developer Studio 9.1.0 Web Service Tester

A questo punto il body dovrebbe contenere un xml che rispecchi una RPC, ma cosa scrivere nel body per avere una chiamata SOAP corretta? Il Tester di Jboss, così come SOAP UI, costruisce automaticamente il frammento xml necessario per il test semplificando notevolmente il lavoro.

Figura 2. Web Service Tester
JBoss Developer Studio 9.1.0 Web Service Tester

Utilizziamo l'icona accanto a JAX-WS per aprire una finestra e selezionare il file wsdl della cartella META-INF del progetto ProgettoEjb1. Questa nuova finestra consente di scegliere un metodo del servizio da testare. Scegliamo ad esempio celsiusToFahrenheit e clicchiamo su "ok" attendendo il completamento dell'operazione. Il risultato finale si traduce nell'inserimento all'interno del pacchetto SOAP del frammento xml per effettuare una request SOAP di test:

Figura 3. xml per la request SOAP di test
JBoss Developer Studio 9.1.0 Web Service Tester

Al posto del valore 0.0 inseriamo ad esempio 30 e clicchiamo sul pulsante verde di destra. Verrà prodotta una chiamata al Web Service che genera una risposta SOAP sul lato destro del Tester. Come ulteriore esercizio, si suggerisce di variare lo stile del servizio in DOCUMENT, generare il nuovo wsdl e ripetere i test.

Vediamo ora come generare classi client utilizzabili da un qualsiasi client Java, quindi anche dalla nostra classe IntegrationTestCase, per invocare il servizio Web. Come in precedenza, con il tasto destro del mouse, click sul file wsdl nella cartella META-INF del progetto ProgettoEjb1. Selezioniamo "Web Service" e successivamente "Generate Client":

Figura 4. Generazione client
Generazione client

Continuiamo con il wizard come mostrato di seguito:

Figura 5. Web Service Client
Web Service Client

Conludendo:

Figura 6. Web Service Client: step finale
Web Service Client: step finale

Al termine dell'esecuzione del wizard abbiamo due classi nel package it.html.progetto1.wsclient.ejb30 che realizzano quanto necessario ad un client per invocare un web service. Vediamo come utilizzarle e aggiungiamo nella classe IntegrationTestCase il metodo:

@Test
    public void testWebServiceConverter(){
            System.out.println("***********************");
            System.out.println("Create Web Service Client...");
            ConverterBeanService service1 = new ConverterBeanService();
            System.out.println("Create Web Service...");
            ConverterBeanWS port1 = service1.getConverterBeanPort();
            System.out.println("Call Web Service Operation...");
            System.out.println("Server said: " + port1.celsiusToFahrenheit(30f));
            System.out.println("Server said: " + port1.fahrenheitToCelsius(86f));
    }

Il primo step serve per ottenere un oggetto della classe ConverterBeanService e, attraverso essa, l'interfaccia endpoint del servizio web sulla quale invocare i metodi. Vediamo la parte fondamentale della classe ConverterBeanService:

package it.html.progetto1.wsclient.ejb30;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceFeature;
import javax.xml.ws.Service;
@WebServiceClient(name = "ConverterBeanService",
                  wsdlLocation = "http://localhost:8080/ProgettoEjb1/ConverterBeanService/ConverterBean?WSDL",
                  targetNamespace = "urn:ConverterBeanService")
public class ConverterBeanService extends Service {
    public final static URL WSDL_LOCATION;
    public final static QName SERVICE = new QName("urn:ConverterBeanService", "ConverterBeanService");
    public final static QName ConverterBeanPort = new QName("urn:ConverterBeanService", "ConverterBeanPort");
    static {
        URL url = null;
        try {
            url = new URL("http://localhost:8080/ProgettoEjb1/ConverterBeanService/ConverterBean?WSDL");
        } catch (MalformedURLException e) {
            java.util.logging.Logger.getLogger(ConverterBeanService.class.getName())
                .log(java.util.logging.Level.INFO,
                     "Can not initialize the default wsdl from {0}", "http://localhost:8080/ProgettoEjb1/ConverterBeanService/ConverterBean?WSDL");
        }
        WSDL_LOCATION = url;
    }
    .......
    public ConverterBeanService() {
        super(WSDL_LOCATION, SERVICE);
    }
    ....
    @WebEndpoint(name = "ConverterBeanPort")
    public ConverterBeanWS getConverterBeanPort() {
        return super.getPort(ConverterBeanPort, ConverterBeanWS.class);
    }
    .....

Gli URL al wsdl prodotti non sono in realtà quelli indicati nel codice, il generatore infatti inserisce path locali al file contenuto nella cartella META-INF, la modifica ha come obiettivo quello di recuperare il file wsdl attraverso l'application server. I due oggetti necessari per l'invocazione del servizio sono i due tipi, QName SERVICE
e ConverterBeanPort, che permettono il recupero dell'interfaccia endpoint del servizio.

Possiamo quindi concludere avviando il JUnit test e verificandone il risultato.

Ti consigliamo anche