Corso di Ingegneria del Web A A. 2016 2017 Domenico Rosaci

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
2
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
3
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
4
TOMCAT Installer
D. Rosaci
WS
5
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
6
AXIS2 1.6.4
D. Rosaci
WS
7
Scaricare la war distribution
D. Rosaci
WS
8
Installare AXIS su TOMCAT
• Il file axis2.war contenuto nello zip va semplicemente estratto
all’interno della cartella webapps di TOMCAT
D. Rosaci
WS
9
Scaricare ECLIPSE NEON
D. Rosaci
WS
10
Integrare i Runtime
Environments nell’IDE
D. Rosaci
WS
11
Aggiungere TOMCAT 8.5
D. Rosaci
WS
12
Specificare la cartella di
installazione di TOMCAT
D. Rosaci
WS
13
Aggiungere AXIS2, specificando la cartella
che contiene il file axis2.war
D. Rosaci
WS
14
Creare un nuovo Dynamic
Web Project
D. Rosaci
WS
15
Dare un nome al progetto, scegliere la
versione 2.5 per Dynamic Web Module e
modificare la Configuration
D. Rosaci
WS
16
Scegliere AXIS2 nei Project
Facets
D. Rosaci
WS
17
Aggiungere una classe al
progetto WebService1
Selezionare File->New->Other
D. Rosaci
WS
18
Dare un nome alla classe
(stesso nome del Progetto)
D. Rosaci
WS
19
Scrivere il codice della classe
D. Rosaci
WS
20
Creare il WS dalla classe
D. Rosaci
WS
21
Configurare il WS
Attenzione:
cambiare Apache
Axis in Axis2
D. Rosaci
WS
22
Service Deployment Configuration
D. Rosaci
WS
23
Web Service Java Bean
Configuration
D. Rosaci
WS
24
Avviare il Server
D. Rosaci
WS
25
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
26
Cambiare le porte in ECLIPSE
D. Rosaci
WS
27
WebService1 avviato
D. Rosaci
WS
28
Se tutto è andato a buon fine...
Cliccare qui per visualizzare il
WSDL del servizio
D. Rosaci
WS
29
WSDL generato – Tipi di dato
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns="http://domenicorosaci.it" xmlns:ws
aw="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://domeni
corosaci.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:complexType>
<xs:sequence>
<xs:element name="return" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
D. Rosaci
WS
30
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>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
D. Rosaci
WS
31
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>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
D. Rosaci
WS
32
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>
<mime:content type="application/xml" part="parameters"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
D. Rosaci
WS
33
WSDL generato – Service
<wsdl:service name="WebService1">
<wsdl:port name="WebService1HttpSoap11Endpoint" binding="ns:WebService1Soap11Binding">
<soap:address location="http://localhost:8081/WebService1/services/WebService1.WebService1HttpSoap11En
dpoint/"/>
</wsdl:port>
<wsdl:port name="WebService1HttpSoap12Endpoint" binding="ns:WebService1Soap12Binding">
<soap12:address location="http://localhost:8081/WebService1/services/WebService1.WebService1HttpSoap12
Endpoint/"/>
</wsdl:port>
<wsdl:port name="WebService1HttpEndpoint" binding="ns:WebService1HttpBinding">
<http:address location="http://localhost:8081/WebService1/services/WebService1.WebService1HttpEndpoint/"/
>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
D. Rosaci
WS
34
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:message>
<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
35
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
36
Generare il file .aar
D. Rosaci
WS
37
Bloccare il Web Server su
ECLIPSE
D. Rosaci
WS
38
Copiare il file WebService1.aar nella
cartella services di Axis2
D. Rosaci
WS
39
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
40
Generare un client per
WebService1
Scegliere
File->New->Other
D. Rosaci
WS
41
Configurazione del Client
URI del WSDL
D. Rosaci
WS
42
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
43
Una classe per testare il client
Eseguire come normale
Java Application. Ecco il
risultato
D. Rosaci
WS
44