Table des Matières. Qu'est ce qu'un service Web



Documents pareils
Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Création d un service web avec NetBeans 5.5 et SJAS 9

Compte Rendu d intégration d application

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

Application de lecture de carte SESAM-Vitale Jeebop

JOnAS Day 5.1. Outils de développements

1. Installation d'un serveur d'application JBoss:

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

Intégration de Cisco CallManager IVR et Active Directory

Introduction aux «Services Web»

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i

Web Tier : déploiement de servlets

Cedric Dumoulin (C) The Java EE 7 Tutorial

Messagerie asynchrone et Services Web

TD/TP 1 Introduction au SDK d Android

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

ECLIPSE ET PDT (Php development tools)

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Java pour le Web. Cours Java - F. Michel

Approche Contract First

EXA1415 : Annotations

Intégration d'applications à "gros grain" Unité d'intégration : le "service" (interface + contrat)

Business Sharepoint Contenu

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

AFTEC SIO 2. Christophe BOUTHIER Page 1

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

IBM SPSS Statistics Version 22. Instructions d'installation sous Windows (licence simultanée)

Installation et prise en main

BIRT (Business Intelligence and Reporting Tools)

Déployer les Fonts, Icones, et Images avec Forms Services 11G

Introduction à Eclipse

Votre premier projet Android

Création d une application JEE

4. SERVICES WEB REST 46

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Didacticiel de mise à jour Web

SQL Server Installation Center et SQL Server Management Studio

Mise en œuvre des serveurs d application

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Oracle Developer Suite 10g. Guide de l installation. Vista & Seven

RMI le langage Java XII-1 JMF

TAGREROUT Seyf Allah TMRIM

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

2010 Ing. Punzenberger COPA-DATA GmbH. Tous droits réservés.

Programmation Web Avancée Introduction aux services Web

Oracle Learning Library Tutoriel Database 12c Installer le logiciel Oracle Database et créer une Database

CA Desktop Migration Manager

Serveur Acronis Backup & Recovery 10 pour Linux. Update 5. Guide d'installation

MEGA ITSM Accelerator. Guide de Démarrage

Remote Method Invocation (RMI)

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Corrigé de l'atelier pratique du module 8 : Implémentation de la réplication

Préparer la synchronisation d'annuaires

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

ADMINISTRATION DE ADOBE LIVECYCLE MOSAIC 9.5

Sommaire Introduction... 3 Le but du projet... 3 Les moyens utilisés... 3 Informations sur le client FTP... 4 Pourquoi une version Linux et

Comment créer vos propres pages web?

LES ACCES ODBC AVEC LE SYSTEME SAS

Guide d'utilisation de WebEx Meeting Center avec les Salles de réunion de collaboration (Collaboration Meeting Rooms / Nuage CMR)

1. Installation du Module

Assistance à distance sous Windows

Plateforme PAYZEN. Définition de Web-services

Créer un rapport pour Reporting Services

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

contact@nqicorp.com - Web :

Whitepaper. Méthodologie de création de rapports personnalisés SQL Server Reporting Services

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Installer Enterprise Miner 5.1 en SAS environnement Windows

Titre: Version: Dernière modification: Auteur: Statut: Licence:

Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne

Java DataBaseConnectivity

7.0 Guide de la solution Portable sans fil

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

(Fig. 1 :assistant connexion Internet)

Les Architectures Orientées Services (SOA)

TP1 : Initiation à Java et Eclipse

KeePass - Mise en œuvre et utilisation

Eclipse atelier Java

Guide de l'assistance à distance dans Windows XP

Qu'est-ce que le BPM?

La base de données XML exist. A. Belaïd

Novell. ifolder. Lisezmoi

Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Areca Backup Première Sauvegarde - Configurez votre premier groupe et votre première cible.

Procédure d'installation complète de Click&Decide sur un serveur

Programmation par composants (1/3) Programmation par composants (2/3)

Table des Matières. 2 Acronis, Inc

Réglages du portail de P&WC

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Bases Java - Eclipse / Netbeans

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Transcription:

Table des Matières Etendre les Applications J2EE avec des Services Web... 1 Qu'est ce qu'un service Web... 1 Consommation de services Web existant... 2 Implémentation d'un service web dans une application web... 6 Création de Services Web depuis un WSDL... 11 Types de Service Web... 12 Implémentation des Services Web dans un Module EJB... 13 Test des services Web... 14 Ajout d'un Gestionnaire de Message à un service Web... 16 Etendre les Applications J2EE avec des Services Web Dans les sections suivantes, vous allez apprendre combien il est facile de créer et d'ajouter des services Web à des applications J2EE (aussi bien des Applications Web que des Modules EJB) et comment les publier pour qu'ils puissent être utilisés par d'autres applications et testés depuis l'edi. Qu'est ce qu'un service Web L'organisation W3C définit un service Web comme ceci: "Un service Wev est un système logiciel identifié par une URI dont les interfaces publiques et les bindings sont définis et décrits dans un XML. Sa définition peut être découverte par d'autres systèmes logiciels. Ces systèmes peuvent alors intéragir avec le service Web d'une manière prescrite par sa définition, en utilisant des messages basés sur XML transportés par les protocoles Internets." L'implémentation d'un service Web peut être fait dans n'importe quel language, et un service Web peut être également accédé par différentes plateformes, puisque les messages sont basés sur XML. La plateforme J2EE 1.4 a spécifié la création de services Web pour les applications Web (Web Tier Based) et les Modules EJB. L'EDI NetBeans 4.1 supporte la création de services Web selon le JSR 109 dans les Applications J2EE, ainsi que la consommation de services Web publiés, dans les Applications J2EE. Les services Web permettent aux Applications d'exposer des opérations Business aux autres Applications, sans se préoccuper de leur implémentation. Cela est possible par l'utilisation des standards suivants: XML, le Common markup language pour la communication Les fournisseurs de services, qui rendent les services disponibles, et les utilisateurs de services, qui utilisent les services, communiquent entre eux par des Messages XML. SOAP, le Common message format pour l'échange d'information Ces messages XML suivent un format bien défini. Simple Object Access Protocol (SOAP) fournit un format de message commun pour les services Web. WSDL, le Common service specification formats En plus du SOAP et du XML, il devait y avoir un format commun que tous les fournisseurs de services Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 1

pouvaient utiliser pour spécifier les détails de leurs services, comme le type du service, les paramètres du service, comment accéder au service,.... Par exemple, Web services Description Language (WSDL) fournit des services Web avec des formats de spécification commun. Consommation de services Web existant Pour qu'il soit utilisable par d'autres applications, un service Web doit publier un fichier WSDL. Cela peut être fait via un répertoire UDDI, ou en exposant le fichier WSDL dans un emplacement connu et identifé par une URL. C'est ce fichier WSDL qui est utilisé par l'application pour construire les atrifacts nécessaires. L'assistant Web service Client de l'edi NetBeans 4.1 automatise le processus de création et met à jour les fichiers de descripteur de déploiement avec les éléments <service-ref> appropriés, le système de génération (pour générer les stubs client). Choisissez ce assistant appelé ose Web service Client dans la liste des éléments new depuis le menu contextuel d'un Projet Web application: Cet assistant vous permet de reprendre un fichier WSDL, soit depuis l'url d'un service qui tourne, ou depuis votre répertoire local. Assurez-vous de définir un nom de paquetage pour les interfaces générés qui seront utilisés par le code de votre utilisateur pour accéder et intéragir avec ce service Web. Deux types de Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 2

clients de service Web peuvent être générés: JSR-109 (services Web Enterprise). Étend la JSR-101 en définissant le packaging de services Web dans des modules J2EE standards, incluant un nouveau descripteur de déployement, et définissant des services Web qui sont implémentés en tant que session beans ou servlettes. C'est le moyen recommendé et portable (via la spécification J2EE 1.4). JSR-101 (JAX-RPC). Définit le mapping de WSDL en Java et vice versa. Il définit également une API cliente pour invoquer un service Web distant et un runtime environment sur le serveur pour accueillir un service Web. Cliquez sur le bouton Finish. Dans la fenêtre Project, vous devriez maintenant voir un nouveau noeud logique sous le noeud Web Services References. Explorez les enfants de ce noeud: pour chaque opération de service Web définie dans le fichier WSDL, l'edi montre un noeud qui a ce nom d'opération, et un menu contextuel qui vous permet de tester cette opération directement dans l'edi, sans écrire une seule ligne de code. L'entrée Web service Reference nécessaire dans le web.xml pour cette application Web a été correctement mise à jour, ce qui vous permet d'utiliser ce service Web soit depuis une serlvette ou depuis une classe utilitaire qui se situe dans votre application Web. Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 3

<service-ref> <service-ref-name>service/sforceservice</service-ref-name> <service-interface>com.acme.sforceservice</service-interface> <wsdl-file>web-inf/wsdl/enterprise.wsdl</wsdl-file> <jaxrpc-mapping-file>web-inf/wsdl/enterprise-mapping.xml</jaxrpcmapping-file> <port-component-ref> <service-endpoint-interface>com.acme.soap</service-endpointinterface> </port-component-ref> </service-ref> Bien que, la plupart du temps, l'edi va sélectionner correctement les options de l'outil wscompile, vous pouvez contrôler pleinement l'outil wscompile utilisé pour la génération du clde client depuis le fichier WSDL via la vue Proprerties du projet, dans le noeud Web services->web services Client. Par exemple, vous pouvez modifier les flags Optimized, Verbose Operation ou Debug. Maintenant, vous désirez appeler une opération de ce service Web dans votre code Java. Sélectionnez l'emplacement dans votre code source Java où vous désirez insérer du code, et choisissez dans le menu contextuel l'entrée Web services Client Resources---> Call Web service Operation. Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 4

Sélectionnez l'opération que vous désirez invoquer, et voyez le nouveau code que l'edi à rajouté dans votre fichier Java: try { getnamefinderwebservicerpcport().namefindersearch( //TODO enter operation arguments */); catch(java.rmi.remoteexception ex) { // TODO handle remote exception ainsi que quelques méthodes privées fait le Web service Reference lookup depuis l'initialcontext, et l'accesseur au RCP Port pour l'opération sélectionnée: private unknown.namefinderwebservice getnamefinderwebservice() { unknown.namefinderwebservice namefinderwebservice = null; try { javax.naming.initialcontext ic = new javax.naming.initialcontext(); namefinderwebservice = (unknown.namefinderwebservice) ic.lookup("java:comp/env/service/namefinderwebservice"); catch(javax.naming.namingexception ex) { // TODO handle JNDI naming exception Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 5

return namefinderwebservice; private unknown.namefinderwebservicerpc getnamefinderwebservicerpcport() { unknown.namefinderwebservicerpc namefinderwebservicerpcport = null; try { namefinderwebservicerpcport = getnamefinderwebservice(). getnamefinderwebservicerpcport(); catch(javax.xml.rpc.serviceexception ex) { // TODO handle service exception return namefinderwebservicerpcport; Notez les commentaires // TODO dans le code rajouté: vous pouvez tracer facilement ce que vous, en tant que développeur, devez rajouter pour finaliser votre application. NetBeans IDE Tip Use the TODO manager Tool from the IDE Tools menu item to search for all the TODOs in your code. NetBeans J2EE wizards always add some TODO statements so that you can quickly find in the Java source code the areas you need, as a business logic developer to complete. Implémentation d'un service web dans une application web Dans l'edi, vous pouvez créer un service Web en implémentant un fichier WSDL existant, en exposant du code existant, ou en créant from scratch. L'EDI génère les informations de déployement dans les descripteurs de déployement, le code Java nécessaire qui décrit ce service Web (l'implémentation par défaut, l'interface Service End Point également appelée SEI, et une cible de compilation dans le script Ant.) Une façon simple de créer un service Web est de démarrer de rien. Dans un projet Web application, choisissez le modèle New Web service.... Spécifiez un nom, et un paquetage Java (évitez le paquetage par défaut, qui n'a pas de nom), et choisissez l'option From scratch, et cliquez sur le bouton Finish. Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 6

Un nouveau service Web sans opérations, est rajouté à votre projet. Vous pouvez voir un noeud logique représentat ce nouveau composant dans le noeud Web Services dans la la fenêtre Projects. Un nouvelle entrée servlet est rajouté dans le web.xml ainsu qu'une entrée webservice-description dans les fichiers de descriptions webservices (similaires au fichier web.xml). Généralement, vous ne devrez pas du tout vous souciez de ces entrées qui sont automatiquement maintenues à jour par l'edi lorsque cela est nécessaire. En tant que développeur, la vue logiquen sera celle que vous utiliserez le plus. Elle synthétise les détails d'implémentation d'un service Web (c'est-à-dire sa classe d'implémentation et son SEI (Service Endpoint Interface), et permet: d'explorer les opérations existantes, d'ajouter de nouvelles opérations au service Web, de l'enregistrer dans le registre qui vous permettra de le tester depuis l'edi, et de configurer les possibles classes de Web services Message Handler qui pourraient y être associées. Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 7

Choisissez le menu Add Operation (soit depuis le menu contextuel du noeud de ce service Web dans la fenêtre Project ou dans l'éditeur de Source Java pour ce Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 8

service Web). Vous pouvez configurer la liste des paramètres pour cette opération ainsi que le type de retour et les exceptions possibles: L'opération est rajoutée à la classe Java implémentant le service Web. L'EDI a automatiquement synchronisé l'interface Service End Point (SEI), ce qui vous permet de ne vous concentrez que sur le développement du contenu de la méthode de l'opération. Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 9

Maintenant que le service Web a été rajouté à votre application Web J2EE, vous n'avez plus qu'à appeler l'action Build ou Deploy pour lancer le processus de génération Ant qui va invoquer l'outil wscompile avec les paramètres corrects. L'application Web sera paquetagée en tant que fichier WAR et déployée sur le serveur défini pour ce projet. init: deps-module-jar: deps-ear-jar: deps-jar: library-inclusion-in-archive: library-inclusion-in-manifest: Copying 2 files to C:\Documents and Settings\ludo\WebApplication29\build\web wscompile-init: NewWebService_wscompile: command line: wscompile C:\j2sdk1.4.2_06\jre\bin\java.exe -classpath "C:\j2sdk1.4.2_06\lib\tools.jar;C:\Sun\AppServer81ur1\lib\j2ee.jar;C:\S un\appserver81ur1\lib\saaj-api.jar;c:\sun\appserver81ur1\lib\saajimpl.jar;c:\sun\appserver81ur1\lib\jaxrpcapi.jar;c:\sun\appserver81ur1\lib\jaxrpc-impl.jar;c:\documents and Settings\ludo\WebApplication29\build\web\WEB-INF\classes" com.sun.xml.rpc.tools.wscompile.main -d "C:\Documents and Settings\ludo\WebApplication29\build\generated\wssrc" -features :documentliteral -gen:server -keep -mapping "C:\Documents and Settings\ludo\WebApplication29\build\web\WEB-INF\wsdl\NewWebServicemapping.xml" -nd "C:\Documents and Settings\ludo\WebApplication29\build\web\WEB-INF\wsdl" -verbose -Xprintstacktrace "C:\Documents and Settings\ludo\WebApplication29\src\java\com\acme\NewWebServiceconfig.xml" [creating model: NewWebService] [creating service: NewWebService] [creating port: com.acme.newwebservicesei] [creating operation: getvalidation] [CustomClassGenerator: generating JavaClass for: getvalidation] [CustomClassGenerator: generating JavaClass for: getvalidationresponse] [LiteralObjectSerializerGenerator: writing serializer/deserializer for: getvalidation] [LiteralObjectSerializerGenerator: writing serializer/deserializer for: getvalidationresponse] [SerializerRegistryGenerator: creating serializer registry: com.acme.newwebservice_serializerregistry] compile: compile-jsps: Building jar: C:\Documents and Settings\ludo\WebApplication29\dist\WebApplication29.war do-dist: dist: run-deploy: Starting server Sun Java System Application Server 8 C:\Sun\AppServer81ur1\bin\asadmin.bat start-domain --domaindir C:\Sun\AppServer81ur1\domains\ domain1 Distributing C:\Documents and Settings\ludo\WebApplication29\dist\WebApplication29.war to [localhost:4848_server] deployment started : 0% Deployment of application WebApplication29 completed successfully Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 10

Enable of WebApplication29in target server completed successfully run-display-browser: Browsing: http://localhost:8080/webapplication29/ run: BUILD SUCCESSFUL (total time: 12 seconds) Vous pouvez interroger l'application Web qui a été déployée et qui s'exécute pour avoir le fichier WSDL publié pour ce service Web. Dans notre cas, http://localhost:8080/webapplication29/newwebservice?wsd : Votre service Web est maintenant disponible à tout un chacun et publiée de façon à ce que d'autres applications (des applications J2EE, des applications.net ou même des applications J2ME ) peuvent inter-agir avec ces opérations. Création de Services Web depuis un WSDL Vous pouvez également créer un service web depuis un document WSDL. Un scénario typique de quand cela est nécessaire est lorsque des partenaires business formulent la façon dont ils vont communiquer en services web. Le contrat devrait être le WSDL, dans lequel ils vont se mettre Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 11

d'accord sur les données et messages qu'ils vont s'échanger ainsi que comment ces messages seront envoyés et reçus. Ce WSDL est alors utilisé pour implémenter le service web. Les éléments d'un document WSDL peut être catégorisé en parties abstraites et concrete. Les éléments types, message, et porttype définissent les données qui forment les messages envoyés et reçus par les services web et leur clients, ainsi que les opérations qui vont utiliser ces messages. Ces sections constituent la portion abstraite du WSDL. Les éléments binding et service décrivent les protocoles et mécanismes de transport qui seront utilisés pour envoyer et recevoir des messages, ainsi que les adresses réelles de l'extremité. Cela est considéré comme étant la portion concrète du WSDL. Lors de la création d'un service Web depuis le WDSL dans NetBeans, un nouveau WSDL est créé et packagé avec le service Web. La portion abstraite du WDSL original est copiée telle quelle dans le nouveau. La portion concrète du WDSL original est normalisée pour le binding SOAP over HTTP, une recherche dans le WSDL de la première occurrence de ce binding est effectuée. Si elle est trouvée, elle est copiée dans le nouvel WSDL. Sinon, un binding SOAP/HTTP est créé pour le premier porttype définit dans le WSDL original. Donc, le service Web créé depuis un WSDL dans NetBeans n'aura toujours exactement qu'un binding SOAP, et un port de service correspondant à ce binding. L'élément de service qui est ajouté sera nommé selon le nom du service Web spécifié dans l'assistant, remplacant l'élément du service dans le WSDL original. Pour créer un service Web depuis un WSDL, sélectionnez le bouton "From Local WSDL File" ou "From WSDL URL" dans l'assistant, dépendant de l'emplacement du document WSDL. Lorsque le service Web est créé, les classes pour l'interface Service End Point (SEI) et le bean d'implémentation seront créées. Ces classes vont contenir toutes les opérations décrites dans le WSDL. La classe bean d'implémentation sera affichée dans l'éditeur de Source, et vous pourrez alors introduire du code pour implémenter ces opérations. Si le WSDL décrit des opérations qui utilisent des types complexes, les classes pour ces types (connus comme value types) sont également générés pour que vous puissiez les utiliser dans votre code d'implémentation. Du fait que c'est le document WSDL qui gouverne l'interface au service Web, vous ne pouvez pas ajouter de nouvelles opérations aux services Web qui sont créés depuis un WSDL, puisque ces opérations ne seront pas reportées dans le WSDL. Notez que les WSDL qui important d'autres WSDL ne sont pas supportés par ces fonctionnalités. Types de Service Web Par défaut, NetBeans crée des services Web "document/literal". Cela réfere à la façon dont le message SOAP est envoyé sur le réseau et est exprimé dans la partie SOAP binding du WSDL. La nomenclature "document/literal" vient de la façon dont les messages SOAP sont décrit dans la partie SOAP binding d'un document WSDL, nommé par ses attributs "style" et "use". L'attribut style referre au formatage du message SOAP. Cela referre basiquement à ce que le corps du SOAP contiendra lorsqu'il sera envoyé sur le réseau. Il y a deux façons de formatter un message SOAP, rpc ou document. Lorsque le stype est rpc, le contenu du corps SOAP est dicté par les règles de la spécification SOAP. C'est à dire que le premier élément est nommé après l'opération, et ses enfants sont interprétés comme les paramètres de la méthode appelée. L'extremité interpretera cela comme une représentation XML d'un appel de méthode (c'est-à-dire un remote procedure call). De l'autre coté, si l'attribut style est document, le corps du SOAP consiste en un XML arbitraire, qui n'est contraint par aucune règle et peut contenir n'importe quoi sur lequel les deux parties (émetteur et récepteur) se sont entendues. L'attribut use décrit comment les données sont converties entre le XML et les objets, c'est à dire comment ils seront sérialisé en XML. Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 12

Si l'attribut use est encoded, cela signifie que les règles pour encoder/décoder les données sont dictées par certaines règles d'encodage, dont la plus courante est l'encodage SOAP spécifié dans la spécification SOAP. La Section 5 de la spécification SOAP définit comment les données devraient être sérialisées en XML. Les services Web ou les clients voient ces données sous la forme d'objets. Si l'attribut use est literal, les règles d'encodage des données sont dictées par un schéma XML. Il n'y a pas de règles d'encodage et le service Web ou le client voit les données sous la forme d'un XML. Ici, le développeur fait le travail de parsing du XML pour rechercher les données nécessaire. Donc, document/literal est typiquement utilisé pour l'échange de documents business tandis que rpc/encoded est typiquement utilisé pour invoquer des objets distants. Pour cette raison, document/literal est préféré à rpc/encoded parce que dans document/literal, le développeur a le contrôle totale sur les messages qui seront échangé. Le profile WS-I Basic, qui est une spécification pour l'interopérabilité de services Web ne supporte pas les services Web de type rpc/encoded. Voici la liste des avantages des services Web document/literal sur rpc/encoded : Formattage des Document/literal est plus inter-opérable que rpc/encoded car le style de formatage rpc tend à lier les messages à la structure du langage de programmation. Les services Web Document/literal supporte mieux la montée en charge que rpc/encoded du faut de la surcharge de travail effectué dans le marshalling/unmarshalling des données rpc. Les services Web Document-centric se prêtent mieux à la validation des documents échangés. Cela est plus difficile à faire dans les services de style rpc. Implémentation des Services Web dans un Module EJB Pour implémenter un service Web dans un module EJB, vous utiliserez un assistant de service Web similaire à celui décrit pour l'application Web. La plupart des artifacts qui sont créés et des entrées dans le descripteur de déployement qui sont rajoutés au module sont similaires à ceux dans l'application Web. Vous suivrez la même procédure pour ajouter des gestionnaires de message SOAP ainsi que pour les configurer dans les services Web. Une différence significative est l'implémentation du bean d'un service Web dans un module EJB. Le JST 109 requiert que les services Web soient implémentés dans un module EJB en tant que stateless Session beans. Donc, l'implémentation des opérations de service Web dans un module EJB est contenu dans la classe Session bean. Le descripteur de déployement du module aura une entrée stateless session bean, mais cela déclarera une endpoint interface au lieu d'un Local interface ou Remote Interface. Aussi, un service Web dans un module EJB n'a pas de home interface. Une fois que vous avez créé un service web dans un module EJB, vous verrez le noeud logique du service Web dans la fenêtre Projects. Le code source que vous allez manipuler est la classe d'implémentation du stateless session bean. L'expérience du développeur est completement similaire au développement d'un service Web avec une application Web. Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 13

Dans le noeud Source Packages, vous pouvez voir la classe Bean du service ainsi que le Service Endpoint Interface (SEI), et le fichier de configuration XML du service. Test des services Web L'EDI NetBeans a un Environnement de Test intégré pour la publication de services Web, soit créés par vous et déployé dans une application Web ou une application J2EE, ou publiée à l'extérieur. Tout ce dont vous avez besoin est d'accéder au fichier WSDL pour ce service Web. Ensuite, utilisez l'outil Web services Registry depuis la fenêtre Runtime de l'edi, via le noeud Web services : Utilisez le menu contextuel de ce noeud et choisissez l'action Add Web service, Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 14

pour activer l'assistant qui demandera après un fichier WSDL (que ce soit une URL ou un fichier local). Une fois le bouton Add cliqué, les opérations du service sont disponibles en tant que noeud dans le registre et vous pouvez utiliser pour chacune des opérations l'entrée du menu contextuel Test Operation. Ce assistant vous permet d'introduire tous les Paramètres d'entrée pour cette opération. Lorsque vous avez introduit les valeurs correctes pour les paramètres d'entrée, sélectionnez le bouton Submit : l'opération du service Web est appelée, et les paramètres output sont affichés dans l'aire Result. Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 15

Ajout d'un Gestionnaire de Message à un service Web NetBeans simplifie le développement de services Web J2EE et de clients parce qu'il détache les développeurs de l'application des messages SOAP qui en résultent. Au lieu d'écrire du code pour concevoir et parser des messages SOAP, les développeurs d'application implémentent principalement les méthodes du service et les invoquent depuis des clients distants. Cependant, il y a des moments où vous désirez ajouter des fonctionnalités aux applications de services Web sans avoir à modifier le code du service web ou du client. Par exemple, vous pourriez vouloir encrypter les appels distants au niveau des messages SOAP. Le gestionnaire de message SOAP fournit le mécanisme pour rajouter une telle fonctionnalité sans devoir modifier la logique métier. Les Handlers accomplissent cela en interceptant les messages SOAP qui s'échangent entre le client et le service. Un handler de message SOAP est une instance stateless qui accede aux messages SOAP représentant des requêtes RPC, des réponses ou des fautes. Liés aux extremités du service, les handlers vous permet de processer les messages SOAP et d'étendre la fonctionnalité du service. Pour une extrêmité de service donné, un ou plusieurs handlers peut résider sur le serveur et le client. Une requête SOAP est handled comme ceci: Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 16

Le client handler est invoquée avant que la requête SOAP ne soit envoyée vers le serveur. Le service handler est invoquée avant que la requête SOAP ne soit dispatchée vers le service endpoint. Une réponse SOAP est traitée dans cet ordre: Le service handler est invoquée avant que la réponse SOAP ne soit renvoyée au client. Le client handler est invoquée avant que la réponse SOAP ne soit transformée en une méthode Java retournée et passée au programme client. Pour créer un Message Handler sur une application Web dans NetBeans, choisissez l'assistant appelé Message Handler : Le nouveau fichier Java contient le code central du message handler. Une méthode intéressante ici est handlerequest(messagecontext context) qui est appelée avant le message SOAP ne soit dispatchée au l'autre extrémité. La classe handler générée fournit une implémentation par défaut de cette méthode (comme exemple) qui affiche le contenu du corps SOAP plus quelques informations de date. Notez que le paramètre MessageContext fournit un contexte en obtenant le message SOAP transmis. Vous pouvez alors utilser l'api SAAJ (SOAP with Attachments API for Java) pour accéder et manipuler le message SOAP. Une autre méthode, handleresponse(messagecontext context) est appelée avant que le message de réponse ne soit renvoyé à l'appelant. Cette méthode, ainsi que Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 17

handlefault ne fournit qu'une implémentation par défaut et c'est à vous, le développeur, d'en fournir une autre. package com.acme; import import import import import import import import import import import javax.xml.rpc.handler.messagecontext; javax.xml.rpc.handler.handlerinfo; javax.xml.rpc.handler.soap.soapmessagecontext; javax.xml.namespace.qname; javax.xml.soap.soapelement; javax.xml.soap.soapmessage; javax.xml.soap.soappart; javax.xml.soap.soapenvelope; javax.xml.soap.soapheader; javax.xml.soap.soapbody; java.util.date; public class NewMessageHandler extends javax.xml.rpc.handler.generichandler { // TODO Change and enhance the handle methods to suit individual needs. private QName[] headers; public void init(handlerinfo config) { headers = config.getheaders(); public javax.xml.namespace.qname[] getheaders() { return headers; // Currently prints out the contents of the SOAP body plus some date information. public boolean handlerequest(messagecontext context) { try{ SOAPMessageContext smc = (SOAPMessageContext) context; SOAPMessage msg = smc.getmessage(); SOAPPart sp = msg.getsoappart(); SOAPEnvelope se = sp.getenvelope(); SOAPHeader shd = se.getheader(); SOAPBody sb = se.getbody(); java.util.iterator childelems = sb.getchildelements(); SOAPElement child; StringBuffer message = new StringBuffer(); while (childelems.hasnext()) { child = (SOAPElement) childelems.next(); message.append(new Date().toString() + "--"); formlogmessage(child, message); System.out.println("Log message: " + message.tostring()); catch(exception e){ e.printstacktrace(); return true; public boolean handleresponse(messagecontext context) { return true; Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 18

public boolean handlefault(messagecontext context) { return true; public void destroy() { private void formlogmessage(soapelement child, StringBuffer message) { message.append(child.getelementname().getlocalname()); message.append(child.getvalue()!= null? ":" + child.getvalue() + " " : " "); try{ java.util.iterator childelems = child.getchildelements(); while (childelems.hasnext()) { Object c = childelems.next(); if(c instanceof SOAPElement) formlogmessage((soapelement)c, message); catch(exception e){ e.printstacktrace(); Vous devez maintenant associer ce Message handler à votre service Web. Cliquez-droit sur le noeud du service Web dans la fenêtre Projects, et utilisez l'option Configure Handlers. Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 19

Naviguez jusqu'à la classe du message handler nouvellement créés et sélectionnezlà. Cliquez sur OK. L'EDI a mis à jour automatiquement le fichier webservices.xml situé dans le répertoire WEB-INF de votre application Web en rajoutant l'élément <handler>. Voici un fichier webservices.xml mis à jour. Ne soyez pas effrayé par son compexité, l'edi gère ce fichier pour vous. C'est pourquoi vous pouvez être très productifs en utilisant NetBeans en tant qu'environnement de développement... <?xml version='1.0' encoding='utf-8'?> <webservices xmlns='http://java.sun.com/xml/ns/j2ee' version='1.1'> <webservice-description> <webservice-description-name>newwebservice</webservicedescription-name> <wsdl-file>web-inf/wsdl/newwebservice.wsdl</wsdl-file> <jaxrpc-mapping-file>web-inf/wsdl/newwebservicemapping.xml</jaxrpc-mapping-file> <port-component xmlns:wsdl-port_ns='urn:newwebservice/wsdl'> <port-component-name>newwebservice</port-componentname> <wsdl-port>wsdl-port_ns:newwebserviceseiport</wsdlport> <service-endpointinterface>com.acme.newwebservicesei</service-endpoint-interface> <service-impl-bean> <servlet-link>wsservlet_newwebservice</servletlink> </service-impl-bean> <handler> <handler-name></handler-name> <handlerclass>com.acme.newmessagehandler</handler-class> </handler> </port-component> </webservice-description> </webservices> Exécutez cette application Web. Pour voir les effets du message handler sur le service Web, faites les étapes suivantes Exécutez l'application Web pour la redéployer Ajoutez le service Web au registre de l'edi (cliquez-droit sur le noeud du Web service dans la fenêtre Projects window, et choisissez l'option Add to Registry ) Allez dans la fenêtre Runtime de l'edi, naviguez jsqu'au noeud Web services, sélectionnez votre service Web et choisissez une opération pour tester (option Test dans le menu contextuel du noeud d'une operation) Guide Pratique EDI NetBeans, Extension d'applications J2EE avec des Services Web, 20