Tutoriel des Services Web AXIS2

Bienvenue dans le tutoriel Apache Axis2. Récemment, j’ai essayé de mettre à jour mes compétences sur Apache Axis2 de la version 1.3 à la dernière version 1.5.4 et je n’ai pas pu trouver de tutoriel explicatif couvrant la dernière version. C’est donc la base de mon article pour le Tutoriel sur les services Web Axis2.

Tutoriel Apache Axis2

Pour qui est destiné ce tutoriel?

Ce tutoriel s’adresse aux programmeurs Java intéressés par le développement et le déploiement de services Web à l’aide d’Apache Axis2.

Prérequis

Le but de ce tutoriel est d’utiliser Axis2 pour créer des services Web, d’inviter le service Web à l’aide d’un programme client Java et de tester le service Web à l’aide de l’outil Soap UI. Une compréhension de base de Java, des services Web, XML, Ant et du serveur d’application (Tomcat) est nécessaire pour comprendre le tutoriel facilement.

Logiciels et Outils Utilisés

  1. Kit de développement Java (JDK) 1.6.0 (Tomcat 7 nécessite au moins JDK 1.6)
  2. Apache Ant 1.7.0 (Axis2 nécessite une version minimale de 1.6.5)
  3. Apache Axis2 1.5.4 (Distribution Binaire)
  4. Eclipse 3.6.1 IDE pour le Développement de Projets (Vous pouvez également utiliser d’autres IDE, par exemple NetBeans)
  5. Apache Tomcat 7.0.8
  6. SoapUI pour tester notre service web.
  7. Mac OS X 10.6.4 (Je travaille sur Mac OS mais le tutoriel devrait fonctionner pour d’autres systèmes d’exploitation également, cependant quelques modifications pourraient être nécessaires dans l’exécution des commandes)

Configuration du Système

  1. Téléchargez la dernière version de Apache Tomcat. À l’heure actuelle, la dernière version est la 7.0.8 et c’est celle que j’utilise pour ce tutoriel. Elle nécessite au minimum la version Java 1.6, donc assurez-vous qu’elle est installée sur votre système. Si Java 6 n’est pas installé sur votre système, vous devez d’abord le télécharger et l’installer depuis Téléchargements Java SE. Téléchargez le fichier zip Tomcat Core (apache-tomcat-7.0.8.zip) et décompressez-le pour l’installer sur votre système. Définissez la variable d’environnement JAVA_HOME pour démarrer et arrêter le serveur.

  2. Téléchargez Apache Axis2 1.5.4 Distribution binaire zip depuis Apache Axis2 – Releases. Cette étape est nécessaire pour créer axis2.war qui sera déployé sur tomcat et pour obtenir les bibliothèques axis2 à utiliser dans les projets.

  3. Décompressez la distribution binaire d’Axis2 dans n’importe quel répertoire pratique. Accédez au répertoire axis2-1.5.4/webapp et exécutez la commande “ant create.war” pour créer le déploiement axis2.war dans le répertoire axis2-1.5.4/dist. Si vous n’avez pas Apache Ant installé, vous pouvez le télécharger et l’installer depuis Apache Ant – Binary Distributions. Veuillez noter que j’ai rencontré un problème avec axis2.war téléchargé depuis War Distribution. Plus tard, j’ai découvert que quelques jars sont manquants dans la distribution War. La distribution War ne contient que 58 jars, tandis que la distribution binaire en contient 63. (Je suis trop paresseux pour trouver les jars manquants.)

    $ ant create.war
    Buildfile: build.xml
    
    init:
        [mkdir] Created dir: /Users/pankaj/Downloads/axis2-1.5.4/dist/temp
          Copying 59 files to /Users/pankaj/Downloads/axis2-1.5.4/dist/temp
    
    prepare.repo:
          Copying 9 files to /Users/pankaj/Downloads/axis2-1.5.4/dist/temp/WEB-INF
        [mkdir] Created dir: /Users/pankaj/Downloads/axis2-1.5.4/dist/temp/WEB-INF/conf
          Copying 1 file to /Users/pankaj/Downloads/axis2-1.5.4/dist/temp/WEB-INF/conf
    
    create.war:
          [war] Building war: /Users/pankaj/Downloads/axis2-1.5.4/dist/axis2.war
       [delete] Deleting directory /Users/pankaj/Downloads/axis2-1.5.4/dist/temp
    
    BUILD SUCCESSFUL
    Total time: 2 seconds
    
  4. Déployez le fichier axis2.war dans le serveur d’application Tomcat en le copiant dans le répertoire webapps de Tomcat. Vous devrez peut-être redémarrer le serveur s’il ne prend pas en charge le déploiement à chaud.

  5. Accédez à https://localhost:8080/axis2/ et cliquez sur le lien « Valider ». Si la page Happy Axis s’affiche en couleur VERTE, cela signifie que axis2 est déployé avec succès. Notre configuration système est maintenant prête et nous pouvons procéder à la création de services web Axis2.

Création de service Web Axis2

Pour créer une archive de service Web Axis2, nous avons besoin des éléments suivants :

  1. A Java Project (Axis2WSImplementation) with a class that will be exposed as a web service. In my example, I am exposing two operations from MyService class. The first operation getData input is String and returns String whereas the second operation getObjectData input is MyBean java object and returns MyBean java object after some data manipulation. Note that MyBean class implements Serializable interface so that it can be transferred over the network.
  2. Le fichier build.xml Ant qui sera utilisé pour créer le aar, le wsdl, le côté client stub et les classes de gestionnaire de rappel.
  3. Le fichier services.xml qui fera partie de l’archive axis2. Ce fichier sera placé dans le dossier META-INF de l’archive axis2.

La structure du projet ressemblera à l’image ci-dessous. Ne vous trompez pas avec le contenu du dossier de construction. Ils seront créés lorsque nous exécuterons le fichier ant build.xml.

Explication du projet de service Web Axis2

MyService.java : Classe d’implémentation qui sera exposée en tant que service Web Axis2.

package com.journaldev.ws;

import com.journaldev.bean.MyBean;

public class MyService {

	public String getData(String input) {
		return "Hi" + input;
	}

	public MyBean getObjectData(MyBean myBean) {

		String name = myBean.getName();
		int id = myBean.getId();
		myBean.setId(id + 100);
		myBean.setName("Output: " + name);

		return myBean;
	}
}

MyBean.java : Classe de bean Java qui est l’entrée et la sortie de l’opération getObjectData dans le service Web.

package com.journaldev.bean;

import java.io.Serializable;

public class MyBean implements Serializable {

	private static final long serialVersionUID = -1129402159048345204L;

	private String name;

	private int id;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

}

services.xml: Les paramètres liés au service web Axis2 font partie de ce fichier xml. Le paramètre ServiceClass spécifie la classe qui sera exposée en tant que service web. Les autres paramètres importants sont targetNamespace et schemaNamespace. services.xml

<service name="MyService" scope="application" targetNamespace="https://journaldev.com/">
 <description>
 MyService
 </description>
 <messageReceivers>
 <messageReceiver mep="https://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
 <messageReceiver mep="https://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
 </messageReceivers>
 <schema schemaNamespace="https://journaldev.com/xsd"/>
 <parameter name="ServiceClass">com.journaldev.ws.MyService</parameter>
</service>

build.xml: Fichier de construction Ant pour effectuer des tâches Axis2. Il existe trois cibles définies dont les détails sont :

  1. generate.wsdl : Cette cible génère le fichier MyService.wsdl dans le dossier de construction. Assurez-vous que targetNamespace et schemaTargetNamespace sont identiques à ceux du fichier service.xml.
  2. generate.service : Cette cible génère une archive axis2 dans le dossier de construction. Elle inclut le fichier services.xml dans l’archive et le nom de l’archive est MyService.aar
  3. generate.client : Cette cible génère les classes côté client. Assurez-vous de l’exécuter après avoir exécuté generate.wsdl afin que le fichier MyService.wsdl soit présent dans le dossier de construction.

build.xml

<project name="AxisWSImplementation" basedir="." default="generate.service">

 <property environment="env"/>
 <property name="build.dir" value="build"/>

 <path id="axis2.classpath">
 <fileset dir="${basedir}/lib">
 <include name="*.jar"/>
 </fileset>
 </path>

 <target name="compile.service">
 <mkdir dir="${build.dir}"/>
 <mkdir dir="${build.dir}/classes"/>
 <mkdir dir="${build.dir}/resources"/>
 <!--First let's compile the classes-->
 <javac debug="on"
 fork="true"
 destdir="${build.dir}/classes"
 srcdir="${basedir}/src"
 classpathref="axis2.classpath">
 </javac>
 </target>

 <target name="generate.wsdl" depends="compile.service">
 <taskdef name="java2wsdl"
 classname="org.apache.ws.java2wsdl.Java2WSDLTask"
 classpathref="axis2.classpath"/>
 <java2wsdl className="com.journaldev.ws.MyService"
 outputLocation="${build.dir}"
 targetNamespace="https://journaldev.com/"
 schemaTargetNamespace="https://journaldev.com/xsd">
 <classpath>
 <pathelement path="${axis2.classpath}"/>
 <pathelement location="${build.dir}/classes"/>
 </classpath>
 </java2wsdl>
 </target>

 <target name="generate.service" depends="compile.service">
 <copy toDir="${build.dir}/classes" failonerror="false">
 <fileset dir="${basedir}/resources">
 <include name="**/*.xml"/>
 </fileset>
 </copy>
 <jar destfile="${build.dir}/MyService.aar">
 <fileset excludes="**/Test.class" dir="${build.dir}/classes"/>
 </jar>
 </target>

 <target name="generate.client" depends="compile.service">
 <taskdef name="wsdl2java"
 classname="org.apache.axis2.tool.ant.AntCodegenTask"
 classpathref="axis2.classpath"/>
 <wsdl2java
 wsdlfilename="${build.dir}/MyService.wsdl"
 output="${build.dir}/resources" />
 </target>

 <target name="clean">
 <delete dir="${build.dir}"/>
 </target>
</project>

Génération de WSDL, Archive Axis et Fichiers Stub

  • Exécutez la cible ant generate.wsdl pour générer le fichier MyService.wsdl.
  • Exécutez la cible ant generate.service pour générer le fichier MyService.aar.
  • Exécutez la cible ant generate.client pour générer les classes Stub.

Déploiement du service Web Axis2

Copiez le fichier MyService.aar dans le répertoire ~apache-tomcat-7.0.8/webapps/axis2/WEB-INF/services. Axis2 prend en charge le déploiement à chaud des services, vous n’avez donc pas besoin de redémarrer le serveur. Vérifiez le déploiement de votre service sur la page ListServices (https://localhost:8080/axis2/services/listServices). MyService devrait y être répertorié avec deux opérations.

Test du service Web Axis2

Après le déploiement du service, nous devons d’abord le tester. J’utilise ici SoapUI, l’un des meilleurs outils pour les tests de services Web. Si vous ne l’avez pas, vous pouvez le télécharger depuis leur site Web et l’installer facilement. Étapes pour le test avec SoapUI

  1. Créez un nouveau projet SoapUI avec le nom de projet MyServiceTest (vous pouvez donner n’importe quel nom que vous voulez) et WSDL/WADL initial https://localhost:8080/axis2/services/MyService?wsdl (Vous pouvez obtenir cette URL depuis la page de liste des services Axis2 après avoir cliqué sur le lien MyService.). Laissez les autres options avec la valeur par défaut et cliquez sur le bouton OK pour créer le projet de test SoapUI.
  2. Choisissez l’un des liens Soap Bindings et double-cliquez sur les requêtes SOAP getData et getObjectData.
  3. Fournissez quelques valeurs pour l’entrée dans la requête et soumettez-la à l’URL du point de terminaison du service Web. Vous devriez obtenir une sortie du service similaire à l’image ci-dessous. Cela confirme que notre service Web est opérationnel.

Maintenant, nous passerons à la dernière tâche d’invocation du service Web en utilisant les classes de stub Axis2.

Invocation du service Web Axis2 en utilisant des fichiers de stub

  1. Créez un projet Java Axis2Client dans Eclipse.
  2. Créez un dossier lib et copiez tous les fichiers JAR Axis2 depuis le dossier lib de la distribution binaire téléchargée. Ajoutez ces JAR au chemin de construction du projet.
  3. MyServiceStub.java et MyServiceCallbackHandler.java générés précédemment dans le dossier src du projet avec la structure de package correcte. Dans mon cas, je les ai copiés dans le package com.journaldev. Si vous devez fournir ces classes à quelqu’un d’autre, je vous recommande vivement de créer un fichier JAR à partir d’elles, puis de le distribuer aux autres pour éviter toute modification.
  4. Créez la classe client Axis2ClientUsingStubsFromAnt pour invoquer les opérations du service web. La structure du projet ressemblera à l’image ci-dessous.

Code Axis2ClientUsingStubsFromAnt

package com.journaldev.ws.client;

import java.rmi.RemoteException;

import com.journaldev.MyServiceStub;
import com.journaldev.MyServiceStub.GetData;
import com.journaldev.MyServiceStub.GetDataResponse;
import com.journaldev.MyServiceStub.GetObjectData;
import com.journaldev.MyServiceStub.GetObjectDataResponse;
import com.journaldev.MyServiceStub.MyBean;

/**
 *
 * @author Pankaj - www.journaldev.com This class will invoke Axis2 web service
 *         operations using Stub classes
 *
 */
public class Axis2ClientUsingStubsFromAnt {

	/**
	 * END_POINT is the web service endpoint
	 */
	private final static String END_POINT = "https://localhost:8080/axis2/services/MyService";

	public static void main(String[] args) throws RemoteException {
		System.out.println("START");

		// Créer l'objet Stub en passant l'URL du point de terminaison du service web
		MyServiceStub stub = new MyServiceStub(END_POINT);

		// Création d'un objet d'entrée pour l'opération getData
		GetData getDataInput = new GetData();

		// Configuration de la partie d'entrée dans l'objet d'entrée getData
		getDataInput.setInput("PANKAJ");

		// Invocation de l'opération getData
		GetDataResponse getDataOutput = stub.getData(getDataInput);

		// La méthode get_return renvoie l'objet de sortie du service web. Ici, c'est
		// une chaîne, nous pouvons donc
		// imprimer directement la valeur retournée
		System.out.println("Output:" + getDataOutput.get_return());

		// Création d'un objet d'entrée pour l'opération getObjectData
		GetObjectData getObjectDataInput = new GetObjectData();
		MyBean myBean = new MyBean();
		myBean.setId(1);
		myBean.setName("KUMAR");

		// Configuration de la partie d'entrée dans l'objet d'entrée getObjectData
		getObjectDataInput.setMyBean(myBean);

		// Invocation de l'opération getObjectData
		GetObjectDataResponse getObjectDataOutput = stub
				.getObjectData(getObjectDataInput);

		// Obtenir l'objet MyBean à partir de l'objet de réponse
		MyBean myBeanOutput = getObjectDataOutput.get_return();

		// Imprimer les valeurs myBeanOutput pour vérifier que les opérations du service web
		// sont invoquées
		System.out.println("ID:" + myBeanOutput.getId() + "NAME:"
				+ myBeanOutput.getName());

		System.out.println("DONE");

	}

}

Exécutez la classe Axis2ClientUsingStubsFromAnt pour invoquer le service web. La sortie du programme ci-dessus est :

START
log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisService).
log4j:WARN Please initialize the log4j system properly.
Output:HiPANKAJ
ID:101NAME:Output: KUMAR
DONE

Si vous trouvez le tutoriel utile pour comprendre Axis2 et commencer avec lui, veuillez partager vos réflexions dans la section des commentaires. Et oui, n’oubliez pas de le partager avec d’autres. Vos deux clics et 5 secondes peuvent aider quelqu’un d’autre à apprendre Axis2 facilement. 🙂

Source:
https://www.digitalocean.com/community/tutorials/axis2-web-services-tutorial