a. roussanaly - université nancy2 axis master miage/sid – université nancy2
Post on 03-Apr-2015
116 Views
Preview:
TRANSCRIPT
A. Roussanaly - Université Nancy2
AXIS
Master MIAGE/SID – Université NANCY2
A. Roussanaly - Université Nancy2
Généralités
Open source de Apache Software FoundationMoteur SOAP
Compatible JAX-RPCDistribué avec des outils de développement et
de monitoringAccompagné de documentation et d'exemples
A. Roussanaly - Université Nancy2
Architecture JAX-RPC
HTTP
SOAP
JAX-RPC JAX-RPC
API Client API Serveur
WSDLCLIENT SERVICE
A. Roussanaly - Université Nancy2
Architecture Axis
JVM
Moteur de Servlet
AxisServlet
La Servlet AxisServlet reçoit et renvoie les messages SOAP et transmet aux objets Java correspondant Les Objets Java effectuent
les services. Ils sont des objets Java classiques.
Objets Java et Servlet sont dans la même JVM (pas de répartition).
SOAP/HTTP
Le client envoie des messages SOAP/HTTP
D'après Xavier Blanc
A. Roussanaly - Université Nancy2
Axis2
JVM
Moteur de Servlet
AxisServlet
Archives au format .aar
SOAP/HTTP
A. Roussanaly - Université Nancy2
Activité : développer un serveur
Développer un serveur qui fournit le change de différentes monnaies par rapport au DM
Ecrire ensuite une application de conversion de monnaies (client)
Exemple d’opérations:getDollar()getFrancSuisse()getLivre()getYen()
A. Roussanaly - Université Nancy2
ARCHIVES
A. Roussanaly - Université Nancy2
Créer un service web avec Axis2…
…et Eclipse for J2EE developper
A. Roussanaly - Université Nancy2
Configuration
A. Roussanaly - Université Nancy2
Créer un projet
A. Roussanaly - Université Nancy2
Ajouter automatiquement les jar de Axis2 dans lib
A. Roussanaly - Université Nancy2
A. Roussanaly - Université Nancy2
A. Roussanaly - Université Nancy2
Créer une classe
A. Roussanaly - Université Nancy2
Générer le WS
A. Roussanaly - Université Nancy2
A. Roussanaly - Université Nancy2
A. Roussanaly - Université Nancy2
A. Roussanaly - Université Nancy2
A. Roussanaly - Université Nancy2
Tester le service
A. Roussanaly - Université Nancy2
Axis
Ecriture d’un serveur
A. Roussanaly - Université Nancy2
Projet Eclipse/Tomcat
build.xmlproject.properties
deploy.wsddundeploy.wsddindex.jsp…
axis-change
src classeslib
fr.miage.sid.axis.server
<ext-jars>axis.jar
axis-ant.jarwsdl4j.jarmail.jar
activation.jar….java
.class
WEB-INF
web.xmlserver-config.wsdd
perms.lstusers.lst…
A. Roussanaly - Université Nancy2
Propertiesname=poubversion=1.0year=2006debug=ondeploy.file=deploy.wsddundeploy.file=undeploy.wsddservice.host=localhostservice.port=80service.package=fr.miage.sid.axis.server
A. Roussanaly - Université Nancy2
Service « rapide »
Dans un premier temps, il nous faut un service ;Axis permet d’en créer de manière très rapide. Pour notre application, nous allons créer un service qui
nous permet d’obtenir le cours de différentes monnaies en euro.
Exemple d’opérations:getDollar()getFrancSuisse()getLivre()getYen()
A. Roussanaly - Université Nancy2
Change : service
Créer un programme source javaexemple : une classe Change qui fournit le taux
de change de l’USD, CHF, JPY, GBPModifier l'extension .java du fichier source en .jws Déployer le fichier .jws
copie dans %tomcat%\webapps\axis
A. Roussanaly - Université Nancy2
Listing : Change.jws
public class Change {
private double EU_USD = 1.251;
private double EU_CHF = 1.592;
private double EU_JPY = 149.00;
private double EU_GBP = 0.670;
public double getDollar(){return EU_USD;}
public double getFrancSuisse(){return EU_CHF;}
public double getYen(){return EU_JPY;}
public double getLivre(){return EU_GBP;}
}
A. Roussanaly - Université Nancy2
Test du service Change
Examiner sa description WSDL http://localhost:8080/axis/Change.jws?wsdl
Enregistrer le fichier WSDL dans un projet EclipseExemple : change.wsdl
Tester ce service avec les outils Eclipse/WTPMenu contextuel Web Services sur change.wsdl
et Test with Web services Explorer…
A. Roussanaly - Université Nancy2
Change : client
On peut maintenant écrire une application cliente du service change.
Par exemple, un convertisseur de monnaie :
A. Roussanaly - Université Nancy2
Ecriture « normale » d’un service
Usage des fichiers JWS limité :Obligation de travailler avec le code source Pas de possibilité de mappingsPas de possibilité de contrôle avec un handler
On est donc amené à déployer des classes (ou éventuellement des jars)
A. Roussanaly - Université Nancy2
Ecriture « normale » d’un service
Le point de départ peut être :
1. un fichier WSDL : On utilise alors l’outil WSDL2JAVA pour
engendrer le « squelette » d’un serveur (skeleton)
2. une classe JAVA : Le fichier WSDL est dynamiquement engendré
par le servlet Axis
A. Roussanaly - Université Nancy2
Etapes
1. Développer le service et l’intégrer dans un projet Tomcat contenant le servlet Axis (autrement dit déployer le servlet Axis sous Tomcat)
2. A l’aide d’un fichier de descripteur de déploiement (WSDD) propre à Axis, déployer le service Axis
Il s’agit de mettre à jour le fichier de configuration server-config.wsdd qui se trouve dans le dossier WEB-INF d’Axis
On utilise l’outil AdminClient d’Axis
A. Roussanaly - Université Nancy2
Ant<taskdef name="axis-admin" classname="org.apache.axis.tools.ant.axis.AdminClientTask">
<classpath refid="classpath" /></taskdef>
<target name="deployer" description="Déploiement du serveur"><axis-admin port="${service.port}" hostname="$
{service.host}" failonerror="true" servletpath="${name}/services/AdminService" debug="true" xmlfile="${deploy.file}" /></target>
A. Roussanaly - Université Nancy2
WSDD<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="change" provider="java:RPC"> <parameter name="className" value="fr.miage.sid.axis.server.Change"/> <parameter name="allowedMethods" value="*"/> </service>
</deployment>
A. Roussanaly - Université Nancy2
Explications
L’outil AdminClient s’appuie (1) sur les informations contenues dans le fichier WSDD et (2) sur les arguments passés en paramètres (host, port, axis-root) axis.jar et axis-ant.jar doivent être dans le classpath.
Axis crée un servive appelé http://<host>:<port>/<axis-root>/services/<service-name>
Le WSDL du service is accessible à http://<host>:<port>/<axis-root>/services/<service-name>?wsdl
Une liste des services est visible à http://<host>:<port>/<axis-root>/services
A. Roussanaly - Université Nancy2
WSDD avancée
Scope<service name=<service>...>
<parameter name="scope" value=<valeur>/> ...
</service>
<valeur> : "Request" "Session" "Application"
A. Roussanaly - Université Nancy2
Annexes
(archives)
A. Roussanaly - Université Nancy2
Exemple client n°1 (DII)public String endPoint = "http://localhost:8080/axis/AddFunction.jws";
public String operationName = "addInt";
public int invokeService(int a, int b) throws Exception{
Service service = new Service(); Call call = (Call) service.createCall(); call.setOperationName(new QName(endPoint, operationName)); call.setTargetEndpointAddress( new URL(endPoint) ); Integer ret = (Integer) call.invoke( new Object[] { new Integer(a), new Integer(b)} );
return ret.intValue();}
A. Roussanaly - Université Nancy2
Exemple client n°2 (PROXY)
public String wsdlUrl = "http://localhost:8080/axis/AddFunction.jws?wsdl";public String nameSpaceUri = "http://localhost:8080/axis/AddFunction.jws";public String serviceName = "AddFunctionService";public String portName = "AddFunction";
public int invokeService(int a, int b) throws Exception{
ServiceFactory serviceFactory = ServiceFactory.newInstance(); Service afService = serviceFactory.createService( new URL(wsdlUrl), new QName(nameSpaceUri, serviceName)); AddFunctionServiceIntf afsIntf =(AddFunctionServiceIntf)afService .getPort(new QName(nameSpaceUri, portName), AddFunctionServiceIntf.class); return afsIntf.addInt(a, b);}
A. Roussanaly - Université Nancy2
Exemple client n°2 (PROXY)
public interface AddFunctionServiceIntf extends java.rmi.Remote {
public int addInt(int a, int b) throws java.rmi.RemoteException;
}
A. Roussanaly - Université Nancy2
Exemple client n°3 (STUB)
public int invokeService(int a, int b) throws Exception{
AddFunctionService afs = new AddFunctionServiceLocator(); AddFunction af = afs.getAddFunction();
return af.addInt(a, b);}
Générer préalablement le stub à l'aide de l'outil WSDL2Java
A. Roussanaly - Université Nancy2
Déploiement de service
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="MyService" provider="java:RPC"> <parameter name="className" value="samples.userguide.example3.MyService"/> <parameter name="allowedMethods" value="*"/> </service>
</deployment>
%java org.apache.axis.client.AdminClient MyService.wsdd
A. Roussanaly - Université Nancy2
Axis
Ecriture d’un client
A. Roussanaly - Université Nancy2
Ecriture d'un client
On a le choix entre 3 méthodes :Proxy
• Cas d’utilisation : type des paramètres et résultat connus (voir exemple annexe de présentation)
Interface d'invocation dynamique (DII) :• Cas d’utilisation : on ne connaît que l’url du service =>
invocation dynamique des méthodes (voir exemple annexe de présentation)
Génération d'un Stub à partir d'une description WSDL• Cas d’utilisation : connaissance préalable du WSDL• On se place dans ce cas dans la suite…
A. Roussanaly - Université Nancy2
Synopsis de l’application
Change.wsdl
WSDL2JAVA
ChangeSoapBindindStub.java
UI.java
Convertisseur.java
JAVAC
ChangeServiceLocator
ChangeService.java
Change.java
A. Roussanaly - Université Nancy2
Projet Eclipse
build.xmlproject.properties
ChangeAxisClient
src binlib
fr.miage.sid.axis.clientimg
stub
axis.jaraxis-ant.jarwsdl4j.jarmail.jar
activation.jar…
.java
.java(wsdl2java)
.class
.jpg
A. Roussanaly - Université Nancy2
Ant<project default="compiler" basedir=".">
<!-- Variable d'accès aux variables d'environnement --><property environment="env" /><!-- Accès aux variables locales du projet --><property file="project.properties" />
<!-- Où se trouvent les jar --><property name="lib.dir" value="lib" /><!-- Où se trouvent les src --><property name="src.dir" value="src" /><!-- Où se trouvent les img --><property name="img.dir" value="${src.dir}/img" /><!-- Où se trouvent les class --><property name="bin.dir" value="bin" /><!-- Où se trouvent les javadoc --><property name="javadoc.dir" value="${bin.dir}/javadoc" />
…
</project>
A. Roussanaly - Université Nancy2
Ant<!-- Definition de la tache ant wsdl2java --><taskdef name="wsdl2java"
classname="org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask"><classpath refid="classpath" />
</taskdef>
A. Roussanaly - Université Nancy2
Ant<!--
====================================================================Créer un stub avec wsdl2java
====================================================================--><target name="wsdl2java"
description="Génération d'un stub (client)"><wsdl2java url="${wsdl.file}" output="${src.dir}">
<mapping namespace="${service.urn}" package="${service.package}"/></wsdl2java>
</target>
top related