Usare Apache Axis
Sviluppare e Installare un Web Service Scrivere una implementazione in Java Scrivere un deployment descriptor (WSDD) per il servizio Verrà usato da Axis per gestire le chiamate SOAP Usato per indicare i metodi Java che si vogliono esporre come servizio Usare AdminClient di Axis per installare il file WSDD 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 java org.apache.axis.client.AdminClient deploy.wsdd axis.jar nel classpath. Axis creerà un servizio chiamato http://localhost:8080/services/EseguiComando WSDL del servizio 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 Usare il comando 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 GUI Swing, programmi da riga di comando, JSP, ecc. Attenzione al classpath 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) HTML, XML, CSS, JS, WSDL, SOAP, UDDI, SQL JST (J2EE Standard Tools) 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/server- config.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