WebServices/Java

Un article de Agora2ia.


Cette page traite la mise en oeuvre des WebServices en Java.


Sommaire

Librairies


Voir aussi

Le déploiement

Java Web Service

  • Renommé le fichier .java en .jws
  • Avantages :
    • Facile et rapide.
  • Inconvénients :
    • Impossible de packager plusieurs classes.
    • Compiler à l'execution/acces (donc moins rapide, et erreur(s) potentielle(s) découverte(s) qu'à cet instant).
    • Besoin du code pour connaitre l'interface.
    • Paramétage limité sur l'accéssibilité du service.

Web Service Deployment Descriptor (WSDD)

L'idée est de spécifier dans un déscripteur de déploiement (deploy.wsdd) l'ensemble des services que l'on souhaite fournir afin que le moteur qui héberge le service web les rende disponible.

Web Services Definition Language (WSDL)

Une fois le protocole de communication défini, il demeure important qu'un client sache comment accéder aux Web Services et à leurs interfaces. Ceci sera réalisé grâce au langage WSDL (Web Service Description Language) basé lui aussi sur XML.

Il s'agit en fait d'un langage qui standardise les schémas XML utilisés pour établir une connexion entre émetteurs etrécepteurs de Web Services.

D'après ses spécification, WSDL est un format XML pour la description des services reseau vus comme un ensemble de points de destination traitant des messages contenant de l'information de type documentaire ou procédurale.

Le fichier WSDL peut être généré depuis ou être à l'origine de, son pendant dans un langage quelconque. Par exemple :

WSDL ---WSDL2Java---> JAVA ---Java2WSDL---> WSDL ...

Ainsi, avec WSDL, il devient possible pour un client d'invoquer un service Web grâce au protocole SOAP car il connaît désormais ses caractéristiques techniques ainsi que le format des messages. Cependant il est relativement fastidieux d'écrire soi-même le ou les fichiers WSDL c'est pourquoi, nous ne les détaillerons pas. Dans la pratique il existe des outils permettant de les générer automatiquement (comme par exemple l'outil en ligne de commande de la plate-forme GLUE, "java2wsdl", permettant de générer le fichier WSDL correspondant à un service Java ou encore "wsdlgen" contenu dans le toolkit WSTK d'IBM).

Pour plus d'informations, voir la page sur WSDL.



Apache Axis

Présentation

Axis (pour Apache eXtensible Interaction System) est avant tout une implémentation de SOAP, ainsi qu'un framework de développement, permettant de construire :

  • des clients,
  • des serveurs,
  • des gateways.

La version actuelle est écrite en Java, mais une implémentation Cpp plus légère existe également.

Mais Axis inclue également :

  • un serveur stand-alone,
  • un serveur qui peut être intégré à des conteneurs de servlet tel que Tomcat,
  • un support poussé de WSDL,
  • des outils pour générer des classes Java à partir du WSDL,
  • des exemples de programmes, et
  • un outils pour monitoré les paquets TCP/IP.

Axis est la troisième version de Apache SOAP qui a été chronologiquement :

  1. SOAP4J,
  2. Apache SOAP,
  3. Apache Axis.

La version actuelle d'Axis (1.2), inclue les fonctionnalités suivantes :

  • SOAP 1.1/1.2 compliant engine
  • Flexible configuration / deployment system
  • Support for "drop-in" deployment of SOAP services (JWS)
  • Support for all basic types, and a type mapping system for defining new serializers/deserializers
  • Automatic serialization/deserialization of Java Beans, including customizable mapping of fields to XML elements/attributes
  • Automatic two-way conversions between Java Collections and SOAP Arrays
  • Providers for RPC and message based SOAP services
  • Automatic WSDL generation from deployed services
  • WSDL2Java tool for building Java proxies and skeletons from WSDL documents
  • Java2WSDL tool for building WSDL from Java classes.
  • Preliminary security extensions, which can integrate with Servlet 2.2 security/roles
  • Support for session-oriented services, via HTTP cookies or transport-independent SOAP headers
  • Preliminary support for the SOAP with Attachments specification
  • An EJB provider for accessing EJB's as Web Services
  • HTTP servlet-based transport
  • JMS based transport
  • Standalone version of the server (with HTTP support)
  • Examples, including a client and server for the SoapBuilders community interoperability tests and experimental TCP, JMS, and file-based transports.

Technique

Génération des stubs avec WSDL2Java

>java org.apache.axis.wsdl.WSDL2Java -cp 
axis.jar;commons-logging.jar;commons-discovery.jar;wsdl4j.jar;jaxrpc.jar !AddressBook.wsdl
  • Mapping :
    • WSDL clause >>> Java class(es) generated
    • For each entry in the type section >>> A java class
    • For each entry in the type section >>> A holder if this type is used as an inout/out parameter
    • For each portType >>> A java interface
    • For each binding >>> A stub class
    • For each service >>> A service interface
    • For each service >>> A service implementation (the locator)
  • Génération d'un JavaBean pour chaque type (get/set et serializable)
  • Mapping WSDL - Java : les méta-données
    • XML (WSDL) étant moins restrictif que que Java, il arrive que le nommage des types ne soit pas identique : il y a donc un système de méta-données de type
    • En cas de problème : WSDL2Java génère une portion de code statique qui fourni à la classe un descripteur de type (il s'agit d'une collection de descripteurs entre membre Java et balise XML)
  • Génération de Holder : le holder vise à traduire en Java la notion de paramètre inout. Cela se concétise par une classe ayant un attribut du même type qu'elle même (elle possède donc une autre instance d'elle même).
  • Génération du Service Definition Interface (SDI) : classe d'interface issue du WSDL.portType


Conclusion

Voir la page WebService pour la conclusion.