Corso di Ingegneria del Web A A Corso di Ingegneria del Web A A. 2016 2017 Domenico Rosaci Realizzare WS con ECLIPSE e AXIS 2 su TOMCAT Esercitazione N°1
Sommario Vedremo come realizzare Web Services usando l’IDE Eclipse per J2EE, integrando al suo interno l’ambiente di sviluppo per WS AXIS2 e l’ambiente di runtime TOMCAT come Web Application Server. D. Rosaci Ingegneria del Web
TOMCAT Apache Tomcat è un’implementazione open source delle tecnologie Java Servlet, JavaServer Pages, Java Expression Language e Java WebSocket technologies. Fornisce un ambiente di runtime per Web server e Web applications D. Rosaci WS
Versione 8.5 Per questa esercitazione scaricheremo dal sito tomcat.apache.org la binary distribution 8.5.6, sotto forma di installer per windows. Abbiamo scelto questa versione perché non presenta particolari incompatibilità con l’IDE Eclipse D. Rosaci WS
TOMCAT Installer D. Rosaci WS
AXIS2 Apache Axis2 è un Web Services / SOAP / WSDL engine, successore dell’ambiente AXIS. Esistono due implementazioni di Apache Axis2 Web services engine: Apache Axis2/Java and Apache Axis2/C Noi utilizzeremo Axis2/Java, nella versione 1.6.4 di inizio 2016, sempre perché non presnta incompatibilità con ECLIPSE D. Rosaci WS
AXIS2 1.6.4 D. Rosaci WS
Scaricare la war distribution D. Rosaci WS
Installare AXIS su TOMCAT Il file axis2.war contenuto nello zip va semplicemente estratto all’interno della cartella webapps di TOMCAT D. Rosaci WS
Scaricare ECLIPSE NEON D. Rosaci WS
Integrare i Runtime Environments nell’IDE D. Rosaci WS
Aggiungere TOMCAT 8.5 D. Rosaci WS
Specificare la cartella di installazione di TOMCAT D. Rosaci WS
Aggiungere AXIS2, specificando la cartella che contiene il file axis2 Aggiungere AXIS2, specificando la cartella che contiene il file axis2.war D. Rosaci WS
Creare un nuovo Dynamic Web Project D. Rosaci WS
Dare un nome al progetto, scegliere la versione 2 Dare un nome al progetto, scegliere la versione 2.5 per Dynamic Web Module e modificare la Configuration D. Rosaci WS
Scegliere AXIS2 nei Project Facets D. Rosaci WS
Aggiungere una classe al progetto WebService1 Selezionare File->New->Other D. Rosaci WS
Dare un nome alla classe (stesso nome del Progetto) D. Rosaci WS
Scrivere il codice della classe D. Rosaci WS
Creare il WS dalla classe D. Rosaci WS
Configurare il WS Attenzione: cambiare Apache Axis in Axis2 D. Rosaci
Service Deployment Configuration D. Rosaci WS
Web Service Java Bean Configuration D. Rosaci WS
Avviare il Server D. Rosaci WS
Problema frequente Se per caso avevate già avviato Tomcat prima di lanciare Eclipse, si genererà un errore dovuto al fatto che le porte del server (generalmente la 8080, la 8005 e la 8009 rispettivament per l’ascolto HTTP, per lo startup e per lo shutdown) sono già occupate. Occorrerà che chiudiate il programma di «monitor» di Tomcat (facendo exit, non basta lo stop del server) e dovrete cambiare le porte del server in ECLIPSE Dovrete editare in Eclipse il file server.xml e cambiare i numeri delle porte (es. 8080 in 8081) D. Rosaci SOAP
Cambiare le porte in ECLIPSE D. Rosaci WS
WebService1 avviato D. Rosaci WS
Se tutto è andato a buon fine... Cliccare qui per visualizzare il WSDL del servizio D. Rosaci WS
WSDL generato – Tipi di dato <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns="http://domenicorosaci.it" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:ns1="http://org.apache.axis2/xsd"xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="http://domenicorosaci.it"> <wsdl:documentation>Please Type your service description here</wsdl:documentation> <wsdl:types> <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://domenicorosaci.it"> <xs:element name="somma"> <xs:complexType> <xs:sequence> <xs:element name="a" type="xs:int"/> <xs:element name="b" type="xs:int"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="sommaResponse"> <xs:element name="return" type="xs:int"/> </xs:schema> </wsdl:types> D. Rosaci WS
WSDL generato – Primo binding <wsdl:binding name="WebService1Soap11Binding" type="ns:WebService1PortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <wsdl:operation name="somma"> <soap:operation soapAction="urn:somma" style="document"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> </wsdl:output> </wsdl:operation> </wsdl:binding> D. Rosaci WS
WSDL generato – Secondo binding <wsdl:binding name="WebService1Soap12Binding" type="ns:WebService1PortType"> <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <wsdl:operation name="somma"> <soap12:operation soapAction="urn:somma" style="document"/> <wsdl:input> <soap12:body use="literal"/> </wsdl:input> <wsdl:output> </wsdl:output> </wsdl:operation> </wsdl:binding> D. Rosaci WS
WSDL generato – Terzo binding <wsdl:binding name="WebService1HttpBinding" type="ns:WebService1PortType"> <http:binding verb="POST"/> <wsdl:operation name="somma"> <http:operation location="somma"/> <wsdl:input> <mime:content type="application/xml" part="parameters"/> </wsdl:input> <wsdl:output> </wsdl:output> </wsdl:operation> </wsdl:binding> D. Rosaci WS
WSDL generato – Service <wsdl:service name="WebService1"> <wsdl:port name="WebService1HttpSoap11Endpoint" binding="ns:WebService1Soap11Binding"> <soap:address location="http://localhost:8081/WebService1/services/WebService1.WebService1HttpSoap11Endpoint/"/> </wsdl:port> <wsdl:port name="WebService1HttpSoap12Endpoint" binding="ns:WebService1Soap12Binding"> <soap12:address location="http://localhost:8081/WebService1/services/WebService1.WebService1HttpSoap12Endpoint/"/> <wsdl:port name="WebService1HttpEndpoint" binding="ns:WebService1HttpBinding"> <http:address location="http://localhost:8081/WebService1/services/WebService1.WebService1HttpEndpoint/"/> </wsdl:service> </wsdl:definitions> D. Rosaci WS
WSDL generato - 2 <wsdl:message name="sommaRequest"> <wsdl:part name="parameters" element="ns:somma"/> </wsdl:message> <wsdl:message name="sommaResponse"> <wsdl:part name="parameters" element="ns:sommaResponse"/> <wsdl:portType name="WebService1PortType"> <wsdl:operation name="somma"> <wsdl:input message="ns:sommaRequest" wsaw:Action="urn:somma"/> <wsdl:output message="ns:sommaResponse" wsaw:Action="urn:sommaResponse"/> </wsdl:operation> </wsdl:portType> D. Rosaci WS
Creare un archivio Axis Per evitare di dovere usare Eclipse ogni volta che vogliamo lanciare il servizio, possiamo creare un archivio axis (file .aar) e renderlo disponibile sul Web server. A questo scopo, andiamo nella cartella WebService1 in c:\users\username (dove username è il vostro account su Windows), da riga di comando D. Rosaci WS
Generare il file .aar D. Rosaci WS
Bloccare il Web Server su ECLIPSE D. Rosaci WS
Copiare il file WebService1.aar nella cartella services di Axis2 D. Rosaci WS
Vedere il servizio sotto Axis2 Avviamo Tomcat dal programma monitor. Dovremmo vedere il servizio WebService1 tra i servizi di Axis2 (attenzione: la porta sarà la 8080) D. Rosaci WS
Generare un client per WebService1 Scegliere File->New->Other D. Rosaci WS
Configurazione del Client URI del WSDL D. Rosaci WS
Generazione dello Stub e del Callback Handler Due nuove classi generate: WebService1Stub.java WebService1CallbackHandler.java. Ora generiamo una classe per testare il client D. Rosaci WS
Una classe per testare il client Eseguire come normale Java Application. Ecco il risultato D. Rosaci WS