Table of Contents

Guide d'implémentation d'eP-WebServices

1. Introduction

eP-WebServices est le module permettant l'accès à eP-Core à l'aide de web-services. Cela permet à des application externes (eP-Back par exemple) d'interroger eP-Core en utilisant des requêtes HTTP contenant du XML. De ce fait on peut ouvrir à “l'extérieur” certaines fonctionnalités bien précises d'eP-Core.

2. Technologies


Figure 1 : Schématisation du fonctionnement des web-services.
- 1/ Le fournisseur fournit un document au format WSDL permettant de décrire le service proposé (adresse, arguments acceptés en entrée, type de retour etc…).
- 2/ Le client interroge le diffuseur afin de récupérer la description du service.
- 3/ Après avoir construit sa requête selon le schéma demandé le client l’envoie au fournisseur du service qui traite la demande et réexpédie la réponse.

La technologies utilisée pour implémenter les web-services est XFire (version 1.2.6). Cette librairie permet de générer automatiquement les documents WSDL et de gérer les services à partir de la classe d'implémentation du service (et de son interface).

3. Architecture

Cette section décrit l’organisation des packages ainsi que les points d’interaction entre eP-WebServices et eP-Core.

1.Général

Figure 2 : Fonctionnement d'eP-webservices (eP-WS).
- eP-WS fonctionne comme un fournisseur de web-services normal (voir figure 1) sauf qu'il intègre la notion de diffuseur et qu'il délègue le traitement de la requête à eP-Core.
- eP-WS est donc un intermédiaire entre un utilisateur extérieur et eP-Core :il reçoit la requête SOAP, la décode, la transmet à eP-Core qui lui renvoie la réponse. eP-WS traite celle-ci en la modifiant au besoin et en la codant en SOAP, puis il l'envoie à l'utilisateur.

2.eP-WebServices

eP-WS est un projet Web normal intégrant une librairie particulière permettant de faire des web-services, sa structure est la suivante :

Ce module contient 4 packages : En gros : model, services, exception, test

Détails du package model

Ce package contient les classes spécifiques aux web-services, et de ce fait non présents dans eP-Core.

3. Services Disponibles

PlateServices

Ce “pack” contient les services généraux de consultation des plaques.

PlateStorage

Ce “pack” contient les services d'enregistrement d'informations concernant les plaques.

4. Utilisation d'XFire

a. Configuration

La configuration de XFire se fait dans le fichier xfire-servlet.xml. Le fichier de configuration de l'appli web, web.xml, et un fichier de configuration de Spring, springWSAppContext.xml, (Spring utilisé dans eP-Core) contiennent aussi des réglages nécessaires au fonctionnement de XFire.

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="urlMap">
            <map>
                <entry key="/PlateServices">
                    <ref bean="plateServicesExporter"/> <!-- Le bean xfire du webservice contact -->
                </entry>
         </property>
 </bean> 

Déclaration du bean du service plateServicesExporter :

<!-- plate Web services declaration -->
    <bean id="plateServicesExporter" class="org.codehaus.xfire.spring.remoting.XFireExporter">
        <property name="serviceFactory">
            <ref bean="xfire.serviceFactory"/>
        </property>
        <property name="xfire">
            <ref bean="xfire"/>
        </property>
        <property name="serviceBean">
            <ref bean="plateServices"/> <!-- Le bean Spring déclaré dans springWSAppContext.xml -->
        </property>
        <property name="serviceClass">
            <value>cea.edyp.platews.services.IPlateServices</value> <!-- L'interface du service -->
        </property>
    </bean>
<!-- Xfire servlet -->
    <servlet>
        <!-- Servlet using the "name"-servlet.xml file for configuration -->
        <servlet-name>xfire</servlet-name>
        <servlet-class>
           org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>xfire</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

Déclaration des fichiers de configuration de spring :

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
           /WEB-INF/springWSAppContext.xml,
           classpath:org/codehaus/xfire/spring/xfire.xml
        </param-value>
    </context-param>
<bean id="plateServices" class="cea.edyp.platews.services.PlateServices">
        <property name="delegate">
            <ref bean="robotPlanningService"></ref> <!-- Le bean du service eP-Core utilisé comme délégué par le web-service-->
       </property>
</bean>       

5. Construction d'un nouveau Web-service

Un web-service, avec XFire, est composé d'une interface et de sa classe d'implémentation (ex : PlateStorage et IPlateStorage). L'ensemble des méthodes présentent dans l'interface constituera les méthodes disponibles pour le service. La classe d'implémentation contient ces même méthodes plus des méthodes permettant aux services de fonctionner (test de valeurs, transformation de paramêtres etc…). Cette classe d'implémentation contient aussi en tant qu'attribut un (ou des) délégué(s) qui sont les services d'eP-Core nécessaires aux traitement de la requête.

Pour construire un web-service il faut donc :

Après avoir lancer l'appli il suffit d'interroger l'adresse domaine ?WSDL (ex : /PlateServices?WSDL) pour récupérer la description du services et construire une requête.