Projets
Pages enfant
  • 3.11.3 Accéder au service exposé

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

Sommaire :

Sommaire
maxLevel3

...

Version:1.0 StartHTML:0000000167 EndHTML:0000006474 StartFragment:0000000650 EndFragment:0000006458

Introduction

Deux cas se présentent généralement. L'un où l'on maîtrise le client et le serveur. L'autre où le serveur est développé par un tiers.

Dans le premier cas on a accès au code JAVA de l'interface définissant la couche métier mais aussi au code des objets manipuler. On aura alors intérêt à partager l'interface JAVA entre le client et le serveur.

Dans le deuxième cas, le Web Service n'est pas forcément développé en JAVA et on n'a pas accès au code de objets métiers. On aura alors intérêt à générer automatiquement du code java client via un plugin CXF pour maven.

Partage de l'interface JAVA

Dans ce cas, l'application doit avoir accès aux mêles modules maven (ou aux jar correspondants) domain-service et domain-bean de l'application serveur exposant le Web Service. L'interface étant dans le module domain-service et les potentiels objets métiers manipulés dans la module domain-bean.

Afin d'accéder à la couche service d'un Web Service il y a quelques éléments de configuration CXF à mettre dans la configuration Spring de la couche métier (properties/domain/domain.xml) :

Bloc de code
<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
	
	<jaxws:client id="domainService"
		serviceClass="org.esupportail.example.domain.DomainService"
		address="http://localhost:8085/cxf/DomainService" />

Explications :

  • Les imports spécifiques à CXF. A noter l'utilisation du préfixe classpath: qui permet de rechercher les fichier XML dans les jar du projet (celui de CXF ici)
  • L'espace de nom jaxws: est défini dans la balise racine du fichier Spring :
    Bloc de code
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation=".../...
     http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
  • La balise jaxws:client définit un bean, au sens Spring, qui va donner accès aux services du Web Service comme si ces services étaient locaux à l'application cliente. Elle a comme propriétés :
    • serviceClass qui pointe vers l'interface qui est implémentée par le Web service distant.
    • address correspond à l'url qui permettra d'interagir avec le Web Service.

Génération de code java via maven

La méthode qui est présentée ici consiste à :

  • Générer automatiquement du code java d'accès au service distant via un plugin CXF pour maven (Ici on utilise, à titre d'exemple, un service de création d'entrée dans le WorkFlow de ORI-OAI cf. ori-oai.org )
  • Utiliser ce code java générée dans la couche métier de l'application cliente

Au final on accède au service avec très peu de code. Tout le travaille est fait par le plugin CFX pour maven qui va complètement masquer la complexité du code JAX-WS en le générant automatiquement.

Le pom.xml

Le plugin

Pour que le plugin CFX pour maven génère automatiquement le code, il faut ajouter ces lignes dans les pom.xml :

...