Usare Apache Axis
Sviluppare e Installare un Web
Service
Scrivere una implementazione in Java
Scrivere un deployment descriptor (WSDD) per il servizio
Usare AdminClient di Axis per installare il file WSDD
Verrà usato da Axis per gestire le chiamate SOAP
Usato per indicare i metodi Java che si vogliono esporre come servizio
Comunica alla servlet axis di caricare la classe e ridirigere ad esse le
richieste SOAP
Finito
Axis genera automaticamente il file WSDL per il web service
WSDD di prova
<deployment name="EseguiComando"
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="EseguiComando" provider="java:RPC">
<parameter name="scope" value="request"/>
<parameter name="className"
value="SoapTest.ECwsImp"/>
<parameter name="allowedMethods"
value="execLocalCommand"/>
</service>
</deployment>
Spiegazione
Usare AdminClient da riga di comando per installare
il servizio sul server
Axis creerà un servizio chiamato
http://localhost:8080/services/EseguiComando
WSDL del servizio
java org.apache.axis.client.AdminClient deploy.wsdd
axis.jar nel classpath.
http://localhost:8080/services/EseguiComando?wsdl
Lista di tutti i servizi
http://localhost:8080/services
Scrivere un client SOAP
Dopo il deploy del servizio si programma il client
per invocarlo
Si possono utilizzare direttamente le API SOAP di
Axis
Esempio SOAP Axis
Service service = new Service();
Call call = (Call) service.createCall();
//Settare il target Endpoint al giusto indirizzo
call.setTargetEndpointAddress( new URL(“http://localhost:8080/axis/services) );
//Invocare l'operazione
call.setOperationName(new QName(“EchoService",“echo"));
call.addParameter( “in0", XMLType.XSD_STRING,
ParameterMode.IN );
call.setReturnType(XMLType.XSD_STRING);
Object ret = call.invoke(new Object[] {in0});
//ret è String o RemoteException in caso di errore.
Un altro metodo
Axis puo' generare automaticamente il codice
necessario a partire dal file WSDL
Usare WSDL2Java
Ottenere il file WSDL del servizio
http://localhost:8080/axis/services/Echo?wsdl
Usare il comando
java org.apache.axis.wsdl.WSDL2Java Echo.wsdl
File generati
Vengono generati 4 file:
Echo.java: interfaccia
EchoService.java: interfaccia client-side
EchoServiceLocator.java: locator che implementa
l'interfaccia
EchoSoapBindingStub.java: utilizza Call di SOAP
come nel primo esempio
Scrivere il programma Java utilizzando i file
Stub di esempio
/**Crea un client per Echo */
Echo myEcho = new
EchoServiceLocator().getEcho(new
URL(http://localhost:8080/axis/services/Echo));
/** Usare il metodo come in locale */
String risposta=
myEcho.echo(“Ciao!”);
Usare gli Stub
Il client visto prima può essere impiegato in qualsiasi
codice Java per eseguire un servizio remoto
Attenzione al classpath
GUI Swing, programmi da riga di comando, JSP, ecc.
I jar di Axis sono necessari sia per il client che per il web
service
In Tomcat, bisogna caricare axis tra le librerie del
server.
tomcat-5.5.x/webapps/app/WEB-INF/lib
Eclipse WTP
http://eclipse.org/webtools
Due principali sottoprogetti
WST (Web Standard Tools)
JST (J2EE Standard Tools)
HTML, XML, CSS, JS, WSDL, SOAP, UDDI, SQL
Servlet, JSP, EJB, JAX-RPC, JDBC, JAXP
Tools per HTML, XML, Web Services, J2EE, Data
Server tools per application servers: Tomcat, JBOSS, WebSphere,
WebLogic, ecc.
Screencast / Demo
Cosa fa il Wizard
Installa il motore SOAP di Axis nel progetto
Genera lo scheletro Java bean per il servizio e le classi per XML
data binding nella cartella src
Copia test.wsdl in WebContent/wsdl/testSOAP.wsdl e imposta
l'endpoint per la Web application creata
Crea il descrittore wsdd di Axis in WebContent/WEB-INF/serverconfig.wsdd
Crea file per deploy e undeploy del Web service in una
sottocartella di WebContent/WEB-INF
Avvia Tomcat
Axis e oltre
IBM SOAP4J -> Apache SOAP -> Axis -> Axis2
SUN JAXWS
Codehaus Xfire
JbossWS
webMethods Glue
SOAPpy, ZSI, wsdl2py
SOAP::Lite, XMLRPC::Lite, UDDI::Lite
C# System.Web.Services;
phpxmlrpc, WSO2
THE END
Grazie per l'attenzione