SOAP/kSOAP Conservatoire National des Arts et Métiers Java et les WebServices : SOAP/kSOAP Mr Rajoharison Hans harisson@free.fr http://harisson.free.fr/webservices/ 1
Sommaire Présentation générale : Introduction et Historique SOAP WSDL UDDI Conclusion,présentation des outils existants en Java Démos (clients SOAP) ksoap ou SOAP pour les systèmes embarqués : Présentation et principe de fonctionnement de ksoap Présentation de Brazil ksoap server (+Demos) : Sur la Tini J2SE avec les Javacard 2
Présentation générale : Introduction Communication de deux sous-systèmes d'architectures semblables ou différentes de manière standard dans le but d'échanger des services ou des traitements applicatifs Passage vers une société de services WebServices (au sens SOAP) : moyen de distribuer un service de manière standard en utilisant XML Webservices (W3C) : SOAP,WSDL,XML,UDDI Microsoft : ORPC pour DCOM OMG : IIOP pour Corba Sun Microsystems : JRMP (Java Remote Method Protocol) 3
Présentation générale : historique Historique de SOAP : Septembre 1999 : SOAP 0.99 : spécifications par Microsoft,DevelopMentor,UserLand Novembre/Decembre 1999 : SOAP 1.0 : soumission des spécifications à l'ietf Avril/Mai 2000 : SOAP 1.1 : soumission au W3C nombreuses associations/partenariats : IBM,HP,Lotus,Compaq,Intel (XIDL : rapprochement avec Corba Septembre 2000 : création d'un groupe de travail W3C pour la standardisation de SOAP Septembre 2000-mai 2002 : SOAP 1.2 (refonte de SOAP 1.1) Mai 2003 : SOAP 1.2 devient une recommandation W3C 4
Présentation générale : SOAP SOAP (Simple Object Access Protocol) : Protocole d'invocation de méthodes sur des services distants Protocole de transmission asynchrones de messages Ensemble de règles pour la structuration des messages Utiliser pour exécuter des dialogues requête-réponse (type RPC) N'est pas lié à un protocole de transport : HTTP/HTTPs (le plus utilisé) SMTP (SOAP par email) MOM (JMS Java Messaging Service) etc N'est pas lié à un système d'exploitation ou à un langage de programmation 5
Présentation générale : messages SOAP Un message SOAP est un document xml valide,il doit utiliser une enveloppe SOAP et des espaces de nommage(namespaces) d'encodage SOAP Il doit suivre les regles suivantes : Une déclaration XML (qui est optionnelle) Une enveloppe SOAP constitué de : - en-tête SOAP (SOAP-Header qui est optionelle) - un corps SOAP (SOAP-Body) Arbre de message soap : 6
Présentation générale : messages SOAP Structure classique : 7
Présentation générale : messages SOAP Structure avec faute : 8
Présentation générale : messages SOAP Structure avec attachement : 9
Présentation générale : messages SOAP Exemple de requête SOAP : 1.Une méthode : int doubleaninteger(int numbertodouble) 2.Une requête SOAP : une entête xml (optionnelle): <?xml version="1.0" encoding="utf-8" standalone="no"?> Une enveloppe SOAP (sans SOAP-Header) : <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/ xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/xmlschema-instance" xmlns:xsd="http://www.w3.org/1999/xmlschema"> 10
Présentation générale : messages SOAP Le body de l'enveloppe : <SOAP-ENV:Body> <ns1:doubleanintegerresponse xmlns:ns1="urn:mysoapservices" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">246</return> </ns1:doubleanintegerresponse> </SOAP-ENV:Body> Fermeture de l'enveloppe </SOAP-ENV:Envelope> Exemple de SOAP-Body avec attachement (exemple methode String demandeinfoclient : <SOAP-ENV:Body> <ns1:demandeinfoclient xmlns:ns1="urn:infoownerservice" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 11
Présentation générale : messages SOAP <Formulaire href="harisson.tiff@free.fr"/> <Photo href="harisson.jpeg@free.fr"/> </ns1:doubleanintegerresponse> </SOAP-ENV:Body> Note : l'entête soap (qui est optionnelle) contient des éléments de type non applicatifs Sessions,Transactions,Authentification,Sécurité (XAML,SAML,etc) Un attribut mustunderstand (nécessaire pour interopérer avec.net ou pour l'utilisation de WebServices Proxy) =0 pour l'application réceptrice =1 l'élément doit être compris de l'application réceptrice 12
Présentation générale : messages SOAP La gestion des erreurs avec SOAP : Les erreurs HTTP utilisent l'infrastructure HTTP ( ex : 500) Les erreurs SOAP applicatives : utilisent les éléments SOAP PDU (Protocole Data Unit) Modèles standard pour toutes les erreurs Extensible pour prendre en compte les exceptions Exemple de message SOAP Fault <SOAP:Envelope xmlns:soap="urn:schemas-xmlsoap-org:soap.v1> <SOAP:Body> <SOAP:Fault> <faultcode>200</faultcode> <faultstring> Erreur d'execution </faultstring> <runcode>1</runcode> </SOAP:Fault> </SOAP:Body> </SOAP:Envelope> 13
Présentation générale : messages SOAP Sérialisation/désérialisation des données avec le modèle SOAP : 14
Présentation générale : messages SOAP Passage d'un objet Java à un objet SOAP : Dépend de l'implémentation du programme utilisée (JAXB pour cette opération est utilisé par exemple pour l'api de Sun) Structuration des données XML : Assuré par un parseur XML 2 modèles : SAX1/SAX2 (Simple Api for XML) DOM (Document object Model) Dans le monde Java,il existe un grand nombre de parser XML (liste non exhaustive) : Xerces : parser XML,créé par la fondation Apache JAXP : api Java,crée par SUN Microsystems 15
Présentation générale : messages SOAP Picollo XML Java Parser : qui est une petite api supportant les spécifications SAX1,SAX2 et JAXP Exemple de mapping (correspondance entre objet) des objets XML/Java : 16
Présentation générale : WSDL WSDL (Web Services Definition Language) Historique : Septembre 2000 : spécifications de WSDL par IBM,Ariba,Microsoft Mars 2001 : v1.1 note du W3C juillet 2002-juin 2003 : v1.2 en cours Format de représentation des interfaces de Service Web en XML Standardise l'envoi d'un ordre à une application distante Spécifie le prototype des services comprenant les signatures des méthodes et les différents types utilisés Equivalent à IDL(Interface definition language,corba) et MIDL (Microsoft,COM) 17
Présentation générale : WSDL Structure des fichiers WSDL : Types : Contient les définition de types utilisant un système de typage (comme XSD) Message : Décrit les noms et types d'un ensemble de champs à transmettre Paramêtres d'une invocation, valeur du retour Operation : action supportée par le service PortType : Décrit un ensemble d'opérations. Chaque opération a zero ou un message en entrée, zero ou plusieurs message de sortie ou de fautes Binding : Spécifie une liaison d'un <porttype> à un protocole concret (SOAP1.1, HTTP1,MIME,...). Un porttype peut avoir plusieurs liaisons Port : Spécifie un point d'entrée (endpoint) comme la combinaison d'un <binding> et d'une adresse réseau. 18
Présentation générale : WSDL Service : Une collection de points d'entrée (endpoint) relatifs. Fichier xml généralement très volumineux,l'utilisation d'outils générant automatiquement est à préconiser (quitte après à le modifier à la main pour qu'il corresponde parfaitement à la description du service : WSDL2Java : crée un fichier.wsdl d'une fichier class Java Java2WSDL : crée les fichiers classes nécessaires àla localisation et au déploiement du service à partir d'un fichier WSDL 19
Présentation générale : WSDL Exemple de fichier WSDL (DS1921ProxyService.wsdl,une méthode) : <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetnamespace="istr.ksoap4" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="istr.ksoap4" xmlns:intf="istr.ksoap4" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns2="http://adapter.onewire.dalsemi.com" xmlns:tns3="http://onewire.dalsemi.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/xmlschema"> <wsdl:types> <schema targetnamespace="istr.ksoap4" xmlns="http://www.w3.org/2001/xmlschema"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <complextype name="ds1921proxy"> <sequence> <element name="idbutton" nillable="true" type="xsd:string"/> 20
Présentation générale : WSDL <element name="description" nillable="true" type="xsd:string"/> <element name="message" nillable="true" type="xsd:string"/> <element name="propertycount" type="xsd:int"/> <element name="temperature" type="xsd:float"/> <element name="timestamp" type="xsd:long"/> </sequence> </complextype> </schema> </wsdl:types> <wsdl:message name="getnexttemperatureresponse"> <wsdl:part name="getnexttemperaturereturn" type="impl:ds1921proxy"/> </wsdl:message> <wsdl:message name="getnexttemperaturerequest"> </wsdl:message> 21
Présentation générale : WSDL <wsdl:porttype name="ds1921proxyservice"> <wsdl:operation name="getnexttemperature"> <wsdl:input message="impl:getnexttemperaturerequest" name="getnexttemperaturerequest"/> <wsdl:output message="impl:getnexttemperatureresponse" name="getnexttemperatureresponse"/> </wsdl:operation> </wsdl:porttype> <wsdl:binding name="ds1921proxyservicesoapbinding" type="impl:ds1921proxyservice"> <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="getnexttemperature"> <wsdlsoap:operation soapaction=""/> 22
Présentation générale : WSDL <wsdl:input name="getnexttemperaturerequest"> <wsdlsoap:body encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="istr.ksoap4" use="encoded"/> </wsdl:input> <wsdl:output name="getnexttemperatureresponse"> <wsdlsoap:body encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="istr.ksoap4" use="encoded"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="ds1921proxyservice"> <wsdl:port binding="impl:ds1921proxyservicesoapbinding" name="ds1921proxyservice"> <wsdlsoap:address location="http://163.173.228.94:8080/ds1921proxyservice/?service=ds1921proxyservice"/> 23
Présentation générale : WSDL </wsdl:port> </wsdl:service></wsdl:definitions> Fichier d'origine (source DS1921ProxyService.java) : package istr.ksoap4; import com.dalsemi.onewire.adapter.tiniexternaladapter; import com.dalsemi.comm.*; import com.dalsemi.onewire.adapter.onewireioexception; import com.dalsemi.onewire.container.onewirecontainer; import com.dalsemi.onewire.onewireexception; public class DS1921ProxyService { //declaration et initialisation du DS1921 private DS1921 ds1921=null; public DS1921ProxyService() {} 24
Présentation générale : WSDL public DS1921Proxy getnexttemperature(){ DS1921Proxy ds1921proxy=new DS1921Proxy(); try { // le code du service } } Structure générale d'un document wsdl : 25
Présentation générale : UDDI UDDI (Universal Description Discovery and Integration) Historique : Septembre 2000 : UDDI V1.0 specifications publiées Juin 2001 : UDDI V2.0 Aout 2003 : UDDI V3.0 Annuaire des WebServices basé lui aussi sur XML Crée par IBM,Ariba et Microsoft Architecture complexe et centralisée Orienté Business to Business Objectif : fournir un annuaire mondial permettant de retrouver des services web sur le même principe que les pages jaunes 26
Présentation générale : UDDI 27
Présentation générale : UDDI Principe de fonctionnement des WebServices Pour expliquer le fonctionnement des WebServices, il convient de distinguer plusieurs étapes : Recherche dans un annuaire UDDI : le client cherche un service particulier, il s adresse à un annuaire qui va lui fournir la liste des prestataires habilités à satisfaire sa demande. L'annuaire UDDI peut être comparé à un moteur de recherche sauf que les documents sont remplacés par des services. Recherche de l'interface du composant à contacter : une fois la réponse reçue (en XML) de l'annuaire, le client va chercher à communiquer via une interface. Cette interface décrite en langage WSDL fournit l'ensemble des services disponibles. Elle offre la possibilité de vérifier que le contrat correspond bien aux besoins demandés. 28
Présentation générale : UDDI Invocation du service : le client doit maintenant passer les paramètres attendus par le service et assurer la communication avec le serveur. L' outil utilisé pour cela est le proxy, c'est l'objet qui permet la communication entre le client et le serveur. Il est généré par le client en utilisant l'interface WSDL Note : la recherche et la publication de WebServices dans un annuaire UDDI nécessite une api supplémentaire cliente (exemple : UDDI4J d'ibm) dont les url seront définies par : Inquiry (recherche) :http://nom_site.foo/nom_registry/inquiry Publish (publication) :http://nom_site.foo/nom_registry/publish 29
Présentation générale : UDDI Exemple : portail de services : 30
Conclusion présentation outils en Java Récaptitulatif : SOAP est le protocole WebServices (SOAP=HTTP+XML) WSDL est l'interface des WebServices UDDI est l'annuaire des WebServices Pour approfondir le sujet : Ajout de BPEL4WS (Business Process Execution Language for WebServices) couche orientée business (OASIS) SAML,XACML,XKMS (la sécurité dans les WebServices) : trois niveaux de sécurité dans la diffusion de message soap : au niveau des WebServices (soap security) : trois systèmes SAML(Security Assertion Markup Language),XACML (extensible Acces Control Markup Language),XKMS(XML Key Management Specification) 31
Conclusion présentation outils en Java au niveau de la couche de présentation des données on a deux éléments XML security (XML Sig,XML Enc) au niveau de la couche de transport avec HTTPs : SSL(secure socket layer)/tls(transport Layer Security),S/MIME,PGP 32
Conclusion présentation outils en Java Management de l'identification,authentification,autorisation : Projet Liberty Alliance (vs Passport pour Microsoft) :regroupement d'un ensemble d'entreprises (FT R&D,Nokia,American Express...) Outils Java pour développer et déployer des WebServices : Solutions de Sun : Ensemble d'api Java pour le développement de WebServices JAXM (déprécié): Java API for XML messaging (api qui standardise l'envoi et la réception de messages en faisant abstraction des protocoles) JAXP :Java API for XML Processing (support des XML schemas API intégrant DOM,SaX et XSLT). JAX-RPC : Java API for XML RPC interface aux protocoles de transport de message XML de type RPC 33
Conclusion présentation outils en Java JAXB : Java API for XML Data Binding Correspondance automatique entre des objets Java et des données XML JAXTX : XML Transactioning API for Java interface pour l encaspulation et le transport de contextes transactionnels ACID et avancées dans SOAP SAAJ : Soap with Attachements api for java (api qui standardise l'envoi et la réception de messages en faisant abstraction des protocoles,remplace JAXM pour SOAP) L'ensemble de ces apis a été réuni dans un pack JWSDP (Java WebService Developement Pack,licence propriétaire SUN) A l'heure actuelle, excepté le WebService Pack de Sun faisant office de RI (Reference Implementation), il n'existe aucun produit intégrant toutes ces APIs. 34
Conclusion présentation outils en Java Le JWSDP inclut en plus un registry Java WSDP Registry Server,Tomcat,des outils Ant et les apis de sécurité 35
Conclusion présentation outils en Java Apache SOAP (extension SOAP du serveur Apache,OpenSource) Serveur SOAP Apache Axis (OpenSource licence APL) comprenant : Tomcat container Sevlet/JSP JUDDi : un registry UDDI en Java OpenSource (licence Apache) fonctionnant avec de nombreuses bases de données : HSQLDB,MySQL,PostGresSQL... des outils de génération de fichier WSDL : Java2WSDL et WSDLJava Glue : société themindelectric (commercial,propriétaire) WebSphere (version 5): société IBM (commercial)+uddi4j outils pour les clients UDDI OpenSource) WASP Server (commercial,propriétaire) Mozilla (>=1.5) : client OpenSource(MPL) SOAP,WSDL,UDDI 36
Conclusion présentation outils en Java Critiques sur les WebServices : Technologie encore assez jeune Simplicité par rapport à RMI, CORBA ou DCOM Limitations : pas de services plus complexes garbage collector, communications bidirectionnelles,activation à distance,cycle de vie des objets,sécurité pas assez éprouvée Performances : temps de réponse et utilisation de ressources inférieures à celle des autres protocoles de distribution d'objet rendant l'utilisation de SOAP improbable dans la réalisation d'applications fortes consommatrices en ressources ou nécessitant des performances optimales Un certain nombre d'implémentations de SOAP incompatibles entre elles 37
Conclusion présentation outils en Java SOAP s'avère simple et demandant un développement peu important. Ceci permet de se concentrer sur le développement du service à offrir, sans trop se soucier des problèmes de communication qui sont (presque) transparents. Cependant, il souffre de sa jeunesse notamment par un manque de documentation conséquente (il en est de même pour les outils nécessaires à sa mise en oeuvre) et pose toutefois des contraintes concernant le type des données à transmettre et leur sérialisation. Comme toute autre technologie, il ne constitue pas la solution ultime à tous les problèmes mais une solution particulièrement adaptée à certains cas de figures, et il convient de bien analyser si les services que l'on souhaite offrir fait partis de ces cas favorables. 38
Conclusion présentation outils en Java Bibliographie : Java & SOAP,1re édition, janvier 2003,Robert Englander,Editions O'reilly,ISBN : 2-84177-230-6 Programming Webservices with SOAP(en anglais),december 2001,James Snell,Doug Tidwell,Pavel Kulchenko,Editions O'reilly,ISBN: 0-596-00095-2 Web Services Essentials (en anglais),february 2002,Ethan Cerami,Editions O'reilly,ISBN: 0-596-00224-6 Java WebServices ( en anglais),march 2002,Dave Chappell, Tyler Jewell,Editions O'reilly,ISBN: 0-596-00269-6 Java Web Services in a Nutshell (en anglais),june 2003,Kim Topley,Editons O'reilly,ISBN: 0-596-00399-4 Java et XML,2e édition, mars 2002,Brett McLaughlin,Editions O'reilly,ISBN : 2-84177- 204-7 Services Web avec J2EE et.net,septembre 2003,Libero Maesano, Christian Bernard, Xavier Le Galles,Edition Eyrolles,ISBN : 2-212-11067-7 Web Service Patterns: Java Edition,P.Monday,Apress,ISBN : 1-59059-084-8 39
Conclusion présentation outils en Java Liens Web : Outils : http://ws.apache.org/ (Apache SOAP,Apache Axis,jUDDI) http://java.sun.com/webservices/ (JWSDP de SUN) http://www-136.ibm.com/developerworks/webservices/ (WebSphere 5.x +UDDI4J) http://www.themindelectric.com/glue/ (Glue) Consortium,Communauté,W3C: http://www.w3.org/2002/ws/ (W3C spécifications SOAP,WSDL) http://www.oasis-open.org/ (consortium spécifications UDDI,BPEL4WS,ebXML) http://www.uddi.org (consortium oasis implémentations,informations UDDI) http://www.projectliberty.org/ (consortium Liberty Alliance authentification...) Informations sur les WebServices,XML : http://www.soapware.org/ (informations générale spécifications,outils...) http://www.soapuser.com/fr/ (informations en français webservices,soap) http://xmlfr.org (portail informations francophone sur les WebServices et XML) 40
Conclusion présentation outils en Java Liens Web : Informations WebServices,tutoriaux : http://www.webservices.org/ (portail O'reilly sur les WebServices informations,tutoriels) http://fr.sun.com/developpeurs/codecamp2004/ (code camps Paris 2004,J2EE,WebServices,J2ME, présentations et tutoriels) http://www.application-servers.com (portail informations sur les serveurs J2EE +WebServices...) http://www.mozilla.org/projects/webservices/ (informations + scripts pour l'utilisation des WebServices avec Mozilla nécessite une version de mozilla >=1.5) UDDI Registry en ligne : http://xmethods.org (annuaire UDDI historique permettant de tester des WebServices) http://www.xmlwebservices.cc/index_samples.htm (quelques exemples de WebServices) http://uddi.org/find.html (registries IBM,SAP,Microsoft) 41
Demos Partie 1(Client SOAP) Client Mozilla : Mozilla possède dans son moteur Gecko des composants lui permettant avec l'aide de Javascript de devenir un client pour les WebServices (support de SOAP1.1 ->à partir de Mozilla 1.0,WSDL -> à partir de mozilla 1.4a,UDDI client methode inquiry à partir de 1.6 et plus ou Netscape à partir de la version 7.1) xmethods.org : Annuaire UDDI de WebServices invocation des services à l'aide d'une applet Java 42
ksoap : SOAP pour l' embarqué ksoap : SOAP pour les Systèmes embarqués (téléphones compatibles J2ME (CLDC/MIDP), Cartes Tini ( CDC /Java)) 43
ksoap : Présentation Historique : Mai 2001 : 1ère version expérimentale de ksoap Janvier 2002 : ksoap 1.0 Juin 2002 : ksoap 1.2 Aout 2003 : ksoap 2.0 Implémentation de SOAP à l'origine pour les téléphones portables compatibles j2me (MIDP/CLDC) de la communauté OpenSource Enhydra (http://enhydra.org) ksoap est constitué de trois composants (API) : kobject : pour le mapping des objets Java en objets SOAP KXML : pour le parsing des données XML ksoap : pour la constitution des messages SOAP et le transport des données par HTTP 44
KSOAP : Présentation Caractéristiques de ksoap (licence EPL pour la version 1.2 et BSD pour la version 2.0) : Sous ensemble minimal de SOAP version 1.1 Support du protocole Wap avec un ensemble de classes : Wbxml,WbxmlParser,WbxmlWriter,WmlParser,WmlWriter... Pas de support de WSDL Pas de support de UDDI (il existe un client kuddi pour les registries UDDI v1.0 non maintenu,buggué et abandonné) Nécessite 3 classes pour son bon fonctionnement : SOAPObject,HTTPTransport,ClassMap Prend en compte les fautes/exceptions SOAP (classe SOAPFault pouvant faire de la récupération d'exception) 45
KSOAP : Présentation Faible taille de l'api complète (ksoap+kobject+kxml) : ~ 40 Ko pour la version 1.2 ~ 56 Ko pour la version 2.0 Interopérable avec un grand nombre d'implémentation SOAP (cf tableau tests d'interopérabilité dans la partie liens) Adaptation de HTTPTransport pour être compatible avec J2SE (cas de la carte Tini ou les Applets) et ajout de classes supplémentaires pour le support de types non supportés dans J2ME Mapping automatique de 4 types primitifs de base : int,long,string,boolean Pas de support de tableaux multidimensionnels 46
KSOAP Présentation Il existe plusieurs manières de sérialiser/déserialiser les objets avec ksoap : Création d'une classe qui implémente l'interface KvmSerializable Public class Nom_classe implements org.kobjects.serialization.kvmserialzable Création d'un SoapObject avec ajout des propriétés de l'objet méthode addproperty(string nom_propriété,string valeur_de_la propriété ) Le Marshalling : création d'une classe implémentant l'interface Marshall 47
KSOAP : Principes de fonctionnement Les 4 règles de parsing des éléments SOAP: Si l'élément SOAP fait parti des 4 types primitifs de bases supportés par défaut il est converti automatiquement en objet Java correspondant Si l'élément SOAP n'a pas de noeud enfant (i.e un type primitif) il est converti en un objet une SoapPrimitive Si l'élément SOAP possède un noeud enfant (i.e un type complexe) il est converti en un objet KvmSerializable (qui est une interface) Un noeud enfant de type complexe suit les 3 mêmes règles précédentes est converti en properties (chacune d'entre elle est associée à un Object PropertyInfo contenant le nom de l'élément SOAP et le type de l'objet Java ) 48
KSOAP : Principes de fonctionnement Schéma : 49
KSOAP : Principes de fonctionnement Le classmap : Met en correspondance les classes Java avec les éléments XML il s'agit d'une HashTable La méthode addmapping définit un mapping direct à partir d'un namespace et le nom d'une classe Java Le Marshalling : Permet d 'étendre le mapping des objets Java en objets SOAP Indique au parser ce mapping Permet d'ajouter ses propres objets Java au ClassMap et étendre le mapping SOAP la méthode register(classmap) permet d'enregistrer l'objet dans le classmap 50
KSOAP : serveur Brazil ksoap La partie Serveur ksoap dans le modèle d'origine est assurée par une servlet à utiliser avec un conteneur (par exemple Tomcat ou Tynamo pour la carte Tini) : comprend la servlet,le service et l'objet utilisé par le service Le modéle modifié pour Brazil comprend un Handler qui délivre le service et qui gère la transormation du message requete XML en objet SOAP requete et la transformation de l'objet «SOAP reponse en message reponse XML. 51
KSOAP : serveur Brazil ksoap Principe de fonctionnement : Le client crée un message requête SOAP avec les paramètres d'invocation Le client envoie la requête SOAP au Brazil Server ksoap à travers le protocole HTTP (la classe HTTPTransport s'occupe de ça) Le Brazil Server invoque la méthode du ServiceHandler correspondant grace à l'extraction des parametres du message SOAP Le serveur compose la valeur de retour le met dans le message SOAP réponse Le client reçoit la réponse et le message réponse et parse les valeurs retournées en un objet Java 52
KSOAP : serveur Brazil ksoap 53
KSOAP : Démo 1 ksoap sur la carte Tini Protocole d'utilisation : Une carte Tini avec un serveur Brazil ksoap 163.173.228.94 port 8080 Un CLC client ksoap en ligne de commandes Un brazil ksoap handler client sur un Informations : Taille du serveur avec un service (Service DS1921Proxy) : ~92 Ko (fichier tini comprenant l'api ksoap,un serveur Brazil Minimal) Consommation mémoire : ~50 Ko à 200 Ko (suivant la nature du service Temps de réponse : ~10-30 s 54
KSOAP : Démo 1 ksoap sur la carte Tini Schéma fonctionnement : 55
KSOAP : Démo 1 ksoap sur la carte Tini Objet java KvmSerializable : package istr.ksoap4; import org.kobjects.serialization.propertyinfo; import org.kobjects.serialization.elementtype; public class DS1921Proxy implements org.kobjects.serialization.kvmserializable{ private float tempbutton = 0; private static int PROP_COUNT = 1; private static PropertyInfo PI_ds1921temp = new PropertyInfo ("ds1921temp",elementtype.float_class); private static PropertyInfo[] PI_PROP_ARRAY = {PI_ds1921temp}; public DS1921Proxy(){} public void settemperature(float tempbutton) this.tempbutton=tempbutton;} public float gettemperature(){ return tempbutton; } 56
KSOAP : Démo 1 ksoap sur la carte Tini public Object getproperty(int param) { if ( param == 0 ) { return new Float(getTemperature()); } else { //message d'erreur } } public void setproperty(int param, Object obj) { if ( param == 0 ) { float ds1921temp = ((Float) obj).floatvalue(); settemperature(ds1921temp); } else { //message d'erreur } } public int getpropertycount() { return PI_PROP_ARRAY.length; } public void getpropertyinfo(int param, org.kobjects.serialization.propertyinfo propertyinfo) { propertyinfo.name = PI_PROP_ARRAY[param].name; propertyinfo.nonpermanent = PI_PROP_ARRAY[param].nonpermanent; } propertyinfo.copy(pi_prop_array[param]); 57
KSOAP : Démo 1 ksoap sur la carte Tini Exemple du client en ligne de commande : package istr.ksoap4; import java.sql.timestamp; import java.io.ioexception; import org.ksoap.soapobject; import org.ksoap.transport.httptransportse; import org.ksoap.classmap; import org.ksoap.marshal.marshalfloat; public class DS1921ProxyClient2 { public DS1921ProxyClient2(){} public static void main(string args[]) { try{ String serviceurl="http://163.173.228.94:8080/ds1921proxyservice/"; ClassMap classmap = new ClassMap(); MarshalFloat mf=new MarshalFloat(); mf.register(classmap); 58
KSOAP : Démo 1 ksoap sur la carte Tini classmap.addmapping("istr.ksoap4", "DS1921Proxy",new DS1921Proxy().getClass() ); SoapObject rpc = new SoapObject("istr.ksoap4","getNextTemperature"); HttpTransportSE tx = new HttpTransportSE(serviceUrl+"?service=DS1921ProxyService","getNextTemperature"); tx.setclassmap( classmap ); tx.debug=true; DS1921Proxy ds1921proxy = (DS1921Proxy)tx.call( rpc ); System.out.println(tx.requestDump); System.out.println(tx.responseDump); float temp = ds1921proxy.gettemperature(); long timestamp = ds1921proxy.gettimestamp(); Timestamp ts = new Timestamp(timeStamp); String time = ts.tostring(); String idbutton =ds1921proxy.getidbutton(); 59
KSOAP : Démo 1 ksoap sur la carte Tini String descbutton=ds1921proxy.getdescription(); String message=ds1921proxy.getmessage(); System.out.println(message); System.out.println("La temperature du DS1921 : "+descbutton+" ID " +idbutton+" aujourd'hui :"+time+" est de :"+temp+" degres celsius"); } catch(ioexception e) { e.printstacktrace(); } } } 60
KSOAP : Démo 2 ksoap J2SE+Javacard Protocole d'utilisation : PursePhoto (Porte monnaie+image) 2 serveurs Brazil ( handler client ksoap PursePhotoRequestHandler port 9000 et handler de service PursePhotoProxyServiceHandler sur le port 9001) CLC : client ksoap en ligne de commande Wireless ToolKit 1.04 (client J2ME ksoap) Javacard Development Kit 2.2.1 (support de javacard rmi ) +simulateur JCREF Api OpenCardFramework partie client proxy javacard 2 fichiers jar sont nécessaires : base-core.jar base-opt.jar 61
KSOAP : Démo 2 ksoap J2SE+JavaCard Schéma fonctionnement : 62
KSOAP : Démo 2 ksoap J2SE+JavaCard Nous avons pu voir au travers des démos le fonctionnement de ksoap ainsi qu'une implémentation d'un serveur SOAP Brazil. Il se pose trois problèmes avec cette implémentation (du au fait qu'il n'y ait pas de support de WSDL et de UDDI) : 1)Nous connaissons déjà l'adresse url du serveur fournissant les services 2)Nous connaissons les méthodes ainsi que les paramètres de chaque service 3)Nous possédons les classes Java nécessaires côté client Une solution serait-elle de coupler cette implémentation avec Jxta/Jxme pour la localisation des serveurs et des services? Ou bien de créer un support WSDL et un annuaire UDDI? 63
Conclusion Bibliographie : Enterprise J2ME: Developing Mobile Java Applications,Oct. 24th 2003,Michael Juntao Yuan,Prentice Hall,ISBN:0131405306 Liens web : http://jcp.org/aboutjava/communityprocess/review/jsr172/index.html (spécifications J2ME du Java Community Process) http://ksoap.enhydra.org (site historique officiel de ksoap,versions =< 1.2 hébergées) http://ksoap.org (site proposant les implémentations de ksoap 2,kXML2,kobjects) http://webservices.xml.com/pub/a/ws/2003/08/19/ksoap.html (article sur ksoap tutoriel,sur le site WebServices d'oreilly) http://www.javaworld.com/javaworld/jw-08-2002/jw-0823-wireless-p5.html (article sur javaworld sur ksoap) http://www.extreme.indiana.edu/~aslom/exxp/ (lien sur des résultats d'analyses de parser XML dont kxml) http://ksoap.enhydra.org/software/documentation/round-2-base/index.html (tableaux de résultats d'intéropérabilité) 64
Conclusion Autres liens web sur les implémentations de SOAP dans les embedded devices : http://www.pocketsoap.com/ (implémentation en C++ de SOAP pour les PocketPC sous WinCE/PocketPC 200x) http://www.embedding.net/esoap/ (esoap autre implémentation c++) Informations générales sur les «embedded devices» supportant java : http://tuxmobil.org/ (site d'informations sur les laptops linux dont le Zaurus ) http://ewesoft.com/ (VM Java pour les appareils possédant un processeur de type StrongArm) http://www.superwaba.com.br/en/default.asp (VM java pour Palm OS et PocketPC il existe un support de ksoap pour SuperWaba) Liens divers : http://www.jxta.org (réseau peer 2 peer OpenSource ) http://jxme.jxta.org (implémentation de jxta pour les systèmes embarqués CDC/CLDC MIDP) 65
Liens connexes personnels : http://harisson;free.fr/webservices/ 66