Partiamo dal problema..
E' facile trovare diversi tutorial su come creare un web service con Eclipse, che una volta configurato permette di usare una procedura di 2 o 3 click adatta anche ad un programmatore inesperto.
In particolare si può far riferimento a questa ottima guida: "Build a simple web service tutorial"
Dando per scontato di essere riusciti a seguire il tutorial, supponiamo di voler eseguire il client del web service all'interno di una applet java.
Il motivo è banale: vogliamo riuscire a costruire il nostro web service e farne il deploy su un server, ma poi vogliamo interrogarlo da un browser.
E' molto facile costruire la classe java che implementa la applet, poichè Eclipse ci ha già creato in automatico le classi "HelloProxy" e compagnia bella.. ci viene in mente di usare proprio tali classi per evitarci di riscrivere codice, oppure di seguire la loro traccia per invocare il servizio. Iniziamo a scrivere..
Per prima cosa creiamo una classe "HelloApplet" che estende "java.applet.Applet" e della quale facciamo l'override del metodo paint:
package com.tutorial;
import java.applet.*;
import java.awt.Graphics;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class HelloApplet extends Applet
{
public void paint(Graphics g)
{
String msg = "Applet inizializzata";
String parametro = "MIO_NOME";
int i = 1;
g.drawString(msg, 20, 20*i++);
try {
Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress("http://localhost:8080/WebServiceTutorial/services/Hello");
call.setOperationName(new QName("http://soapinterop.org/", "sayHello"));
msg = (String)call.invoke(new Object[]{ parametro});
} catch (RemoteException e) {
msg = "Errore: RemoteException");
}
g.drawString(msg, 20, 20*i++);
}
}
Salviamo la classe, e cliccandoci il destro scelgiamo "Run As.. > Java Applet"
Tutto SEMBRA funzionare.. dico sembra perchè purtroppo se andiamo a usare gli stessi file sul browser, quindi fuori da Eclipse, non funziona più niente.
Il motivo principale è che Eclipse configura la applet per funzionare correttamente, settando il classpath e le policy di sicurezza. La applet però rimane "unsigned" dunque senza la possibilità di avere accesso all'esterno: come fare quindi a parlare col web service?!
Ecco la soluzione:
- Creare un fatjar contenente anche le librerie usate nel classpath: axis.jar, commons-logging.jar, commons-discovery-0.2.jar, jaxrpc.jar, saaj.jar, webserviceutils.jar, wsdl4j.jar . La procedura è descritta in questo post precedente: Esportare più librerie java in un unico jar
- Firmare il fatjar creato con la procedura descritta qui: Come creare una apple signed
- Far partire il server tomcat e provare la applet in un browser
Nessun commento:
Posta un commento
Grazie per aver aggiunto un commento su questo blog..