Apache Axis2 è un'infrastruttura di Apache Software Foundation per creare, pubblicare e consumare in Java. Axis2 fornisce: 1. strumenti da riga di comando per creare e usare Web Service 2. un server SOAP stand-alone 3. una che ospita i Web Service all'interno di un servlet container. Il sito ufficiale di Axis 2 è: http://ws.apache.org/axis2/

1. Installare il jdk (1.5 o superiore) prima di procedere con l'installazione di Axis2. 2. Impostare la variabile d'ambiente JAVA_HOME al pathname in cui è installato il JDK

Installare Tomcat 1. Download di tomcat da http://tomcat.apache.org/ 2. Selezionare la Binary Distributions 3. Scompattare il contenuto dell'archivio in (es.) /opt/apache-tomcat-7.0.34 4. Impostare la variabile d'ambiente CATALINA_HOME=/opt/apache-tomcat-7.0.34 (export CATALINA_HOME) nel file /home/miaHome/.bashrc ricordarsi di fare un source al termine 5. Avviare il server con il seguente comando: $ sh $CATALINA_HOME/bin/catalina.sh run 6. Testare tomcat (nella barra degli indirizzi del browser scrivere: localhost:8080 o se ci sono problemi usare meglio l'IP della macchina al posto di localhost) Installare axis2 1. estrarre il file axis2.war dall'archivio axis2-1.6.2-war.zip 2. copiare il file estratto in /opt/apache-tomcat-7.0.34/webapps Installare axis 2 (binary version) 1. scarichiamo l'ultima versione da qui: http://axis.apache.org/axis2/java/core/download.cgi 2. scompattare Axis2 Standard Binary Distribution in una cartella (es. /opt/axis2-1.6.2) 3. impostare la variabile nel pathname AXIS2_HOME che si riferisca alla cartella contenente la cartella espansa. In Linux è possibile avviare lo script setenv.sh contenuta in AXIS2_HOME/bin per settare la variabile d'ambiente AXIS2_HOME. 4. Aprire il file /home/miahome/.bashrc ed aggiungere le seguenti righe: AXIS2_HOME=/opt/axis2-1.6.2 export AXIS2_HOME 5. (Eseguire il server Axis2 usando il seguente comando: %AXIS2_HOME%\bin\axis2server.bat (Windows) $AXIS2_HOME/bin/axis2server.sh (Unix)) 6. Riavviare Tomcat 7. testare axis2: (nella barra degli indirizzi del browser scrivere: localhost:8080/axis2 o se ci sono problemi usare meglio l'IP della macchina al posto di localhost) appare una schermata con tre link

Impostare, in .bash_profile, la variabile: export CLASSPATH=${CLASSPATH}:/opt/axis2-1.6.2/lib/* Cliccando su administration il sistema richiede l'immissione di un username e di una password che per default al primo accesso sono le seguenti: username=admin password=axis2 tali info sono contenute in chiaro nel file WEB-INF\conf\axis2.xml.

Creazione di un web service 1. Creare la cartella ciaoMondo ed in essa server 2. All'interno di sever creare la cartella “META-INF” 3. All'interno di sever creare la cartella “helloWorld” che ospiterà la classe java 4. Creare la classe java HelloWorldService.java e salvarla all'interno della sottocartella helloWorld package helloWorld; public class HelloWorldService { public String sayHello(String name) { System.out.println("Hello World Service called"); return "Hello : " + name; } } L'indirizzo del package parte dalla cartella superiore escluso “server” Scrivere il file “services.xml” come segue: helloWorld.HelloWorldService e posizionarlo all'interno della sotto-cartella META-INF Nel file di configurazione elenchiamo le classi che contengono i metodi che vogliamo pubblicare. Nel nostro esempio l’unica classe è helloWorld.HelloWorldService. A ciascun metodo viene associata una classe che si occupa di gestire la risposta al client. In questo caso si è utilizzato la classe apache.axis2.rpc.receivers.RPCMessageReceiver di Axis ma è possibile scrivere anche una classe personalizzata. Compilare la classe java con il comando: $ javac HelloWorldService.java

Pubblicazione del servizio per pubblicare il servizio vi sono due strade: 1. Posizionare la cartella “ciaoMondo” all'interno della cartella (è possibile mantenere solo i .class) /opt/apache-tomcat-7.0.34/webapps/axis2/WEB-INF/services Nel caso in cui non dovesse funzionare riavviare i server tomcat!

2. Creare un file zip e cambiare l'estensione in .aar contenente il contenuto di ciaoMondo ed eventualmente dando il nome di ciaoMondo.aar. Quindi posizionando il file ottenuto in /opt/apache-tomcat-7.0.34/webapps/axis2/WEB-INF/services oppure usare dall'interfaccia di amministrazione il tool upload file In alternativa allo zip si può usare il comando da linea di comando ed all'interno della cartella ciaoMondo: $ jar cvf HelloWorldService.aar *

Il servizio appena pubblicato può essere testato semplicemente osservando i servizi disponibili dall'amministrazione di axis2 → System Components → Available Services.

Sviluppo del client per accedere al servizio web “Hello World”. Creare una nuova directory ciaoMondo\client Aprire il terminale e posizionarsi all'interno della directory creata Generare il codice del client usando il tool “wsdl2java.bat”. Lanciare il seguente comando: sudo JAVA_HOME=/usr sh $AXIS2_HOME/bin/wsdl2java.sh -uri http://192.168.0.5:8080/axis2/services/provaWS?wsdl -p provaWS.client sudo JAVA_HOME=/usr sh $AXIS2_HOME/bin/wsdl2java.sh -uri http://192.168.0.5:8080/axis2/services/ciaoMondo?wsdl -o client

(In windows: WSDL2Java.bat -uri http://localhost:8080/axis2/services/ciaoMondo?wsdl -o client)

Questo, interoga partendo dal wsdl (WEB Services Description Language) genera due file java a) ciaoMondoStub.java b) ciaoMondoCallbackHandler.java dentro la cartella ciaoMondo/client/client/src/helloworld

Sviluppare il codice che invoca il servizio Crerae il file Test.java nella dir ciaoMondo\client\client\src\HelloWorld. Il codice di Test.java è il segeuente: package helloworld; import helloworld.*; import helloworld.CiaoMondoStub.SayHello; public class Test { public static void main(String[] args) throws Exception { CiaoMondoStub stub = new CiaoMondoStub(); //Create the request

helloworld.CiaoMondoStub.SayHello request = new helloworld.CiaoMondoStub.SayHello();

request.setArgs0("Deepak Kumar"); //Invoke the service helloworld.CiaoMondoStub.SayHelloResponse response = stub.sayHello(request); System.out.println("Response : " + response.get_return()); } }

Compilare e testare il Web service Spostarsi nella cartella ciaoMondo\client\client\src e compilare il nuovo file con il comando javac ciaoMondo\client\client\src$ javac helloworld/*.java probabilmente è necessario usare l'opzione -Xlint:unchecked ovvero: ciaoMondo\client\client\src$ javac -Xlint:unchecked helloworld/*.java

Fare attenzione che sia settata la variabile d'ambiente $CLASSPATH in .bash_profile (o .bashrc). In sostanza ci devono essere le due seguenti righe: export PATH=${PATH}:/opt/android-sdk-linux/tools:/usr/bin/java:/opt/axis2-1.6.2/bin export CLASSPATH=${CLASSPATH}:/opt/axis2-1.6.2/lib/*

Lanciare il programma compilato con il seguente comando: ciaoMondo/client/client/src$ java helloworld/Test l'output sarà il seguente: :WARN No appenders could be found for logger (org.apache.axis2.description.AxisOperation). log4j:WARN Please initialize the log4j system properly. Response : Hello : Pinco Pallino