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